Saya menggunakan "aturan praktis" intuitif saya ... Sangat berguna untuk keputusan cepat,
Tentang DATABASE Anda : jika fitur dan / atau analisis spasial berskala benua , dan membutuhkan ketelitian (aplikasi serius) gunakan geografi . Lain-lain gunakan geometri: ketika semua basis data hampir sama ( skala kota ), atau Anda tidak perlu presisi, dll. Anda hanya perlu geometri.
Lihat aturan serupa di kuliah saran @underdark .
Tentang kebutuhan Anda dalam hal PERFORMANCE / PRECISION BALANCE: geometri lebih cepat; jika Anda membutuhkan kinerja dan berpikir untuk menggunakan geografi, lakukan tolok ukur Anda terlebih dahulu.
Konsep-kunci
Pada halaman ini, kita melihat beberapa kata kunci dan fokus pada beberapa konsep: presisi , kinerja , dan sesuatu seperti fleksibilitas / komoditas penggunaan .
Sebagaimana diingat oleh orang lain, perbedaannya, untuk penyimpanan dan perhitungan, adalah penggunaan bola dalam geografi dan bidang dalam geometri:
- bola (geografi) lebih baik, lebih tepat. Lihat contoh Los Angeles / Paris .
- evolusi geografi: seperti yang dikatakan @DavidF, "tipe geografi baru-baru ini ditambahkan, sehingga lebih sedikit fungsi yang didukung / diimplementasikan".
Mungkin pada tahun 2020 semua database GIS akan ditetapkan ke standar SRID / EPSG yang sama (setara dengan kode 4326 saat ini, untuk WGS84). Geografi hari ini bukanlah pilihan standar karena keterbatasan kinerja dan fungsional.
Diskusi
Menurut pendapat saya itu adalah pertanyaan tentang "praktik terbaik", bukan masalah teknis / teoretis yang mendalam.
Presisi
Setelah memperkirakan kesalahan pada data Anda, apakah tes Anda dan membandingkan hasil: perolehan presisi dengan geografi lebih tinggi dari kesalahan data? Fungsi ST_Distance (dengan MAX dan AVG agregator ) adalah referensi utama dalam jenis percobaan ini.
Performa
Contoh tolok ukur di daerah perkotaan ~ 100km2 (diameter ~ 11km), semua disimpan sebagai geometri, dalam sistem koordinat UTM planar. CATATAN: dimulai dengan konversi geometri / geografi yang sering digunakan - sering kali karena beberapa fungsi tidak ada dan beberapa lainnya, seperti ST_Buffer dan ST_Intersection, melakukan konversi secara internal.
Bench # 1: sebuah tabel dengan ~ 87000 poligon yang mewakili lot perkotaan, masing-masing dengan poli dengan (rata-rata) ~ 13 poin,
BEGIN; EXPLAIN ANALYSE CREATE TABLE temp_geom AS
SELECT gid, the_geom FROM urbanlots; ROLLBACK;
-- time 2080 ms ~ 2.0 s
BEGIN; EXPLAIN ANALYSE CREATE TABLE temp_geog AS
SELECT gid, Geography(ST_Transform(the_geom,4326)) AS geog
FROM urbanlots; ROLLBACK;
-- time 12374 ms ~ 12.4 s ~ 6 * geometry.
jadi, geography_time = 6 * geometry_time.
Bench # 2: sebuah tabel dengan ~ 3500 poligon yang mewakili blok perkotaan, masing-masing dengan poli dengan (rata-rata) ~ 50 poin: 0,6s vs 2,7s, geography_time = 4,5 * geometry_time.
Bench # 3: ~ 10000 baris mewakili jalan-jalan kota, masing-masing dengan ~ 5 poin. ~ 0.87s vs ~ 0.36s, geography_time = 2.4 * geometry_time.
Kembali ke Bench # 2, membuat tabel dan melakukan kueri,
EXPLAIN ANALYSE SELECT ST_Area(g.the_geom)+ST_Distance(g.the_geom,t.the_geom)
FROM temp_geom g, (SELECT the_geom FROM temp_geom WHERE gid=1) as t;
-- time 182 ms ~ 0.2 s
EXPLAIN ANALYSE SELECT ST_Area(g.geog)+ST_Distance(g.geog,t.geog)
FROM temp_geog g, (SELECT geog FROM temp_geog WHERE gid=1) as t;
-- time 58657 ms ~ 59 s ~ 300*geometry
-- curioselly for only distances, geography=4*geometry
Kesimpulan: untuk tugas-tugas kecil dan kerja keras yang baik, waktu menyatu dengan "waktu yang dapat diterima-sama", tetapi untuk tugas besar, ada peringkat kinerja yang perlu dipertimbangkan.
Fleksibilitas / Komoditas
Pada tolok ukur saya melakukan tugas sehari-hari, memeriksa jumlah poin (berdasarkan ST_NPoints
) ... Ini adalah contoh operasi yang tidak ada untuk geografi, perlu dilemparkan. "Pemeran geografi / geometri" adalah tugas yang menjengkelkan bagi programmer, master, dll.
Saat menggunakan kembali pustaka fungsi SQL dan PL / pgSQL, geografi perlu adaptasi. Dan, jika Anda ingin mengoptimalkan kode, atau menghindari masalah presisi dengan banyak konversi perantara, tidak adanya seperangkat fungsi bawaan lengkap, dengan geografi, adalah masalah lain. Program untuk geografi, bukanlah tugas yang mudah.
Hanya proses, pertukaran data, dll.
Untuk permintaan yang tidak biasa, tanpa pengguna intensif seperti Mapserver, ketika satu-satunya pekerjaan Anda (PostGIS) adalah memproses input data dan mengembalikan setiap saat (seperti jam atau hari) data yang diproses, aturan praktisnya adalah "gunakan geografi jika Anda nyaman! " (lihat "Fleksibilitas / Komoditas" di atas). Jika tidak, periksa aturan yang biasa.
CATATAN: tentu saja, jika tugas Anda (tidak biasa) hanya menampilkan data dari PostGIS ke Mapserver, tanpa perlu proses, untuk mempertahankan data input Anda yang sama (geometri atau geografi), adalah keputusan yang lebih baik.
Saya percaya sentralisasi data adalah tugas lain di mana geografi lebih baik: dalam konteks di mana keragaman format input dan sistem referensi biasa, penggunaan standar, seperti yang ditegakkan oleh geografi, bermanfaat ... Konvensi alih konfigurasi adalah prinsip yang baik ketika sentralisasi dan pertukaran data adalah fokus bisnis (lihat Google Maps!).