Perusahaan saya menggunakan geometry
( the_geom
) tipe data untuk menyimpan data geospasial.
Saya baru-baru ini berkenalan dengan konsep tipe data geography
( the_geog
) yang, seperti yang saya pahami, menyimpan SRID
beserta geometri.
Apa perbedaan antara geography
dan geometry
, dan apakah ada manfaat menggunakan salah satunya di basis data besar?
postgis
geometry-data-type
geography-data-type
Adam Matan
sumber
sumber
Jawaban:
Fitur geografi selalu disimpan dalam WGS84 sebelum PostGIS 2.2; sejak saat itu sistem referensi spasial apa pun berbasis lat / lat dapat digunakan. Pengukuran berdasarkan fitur geografi akan dilakukan dalam meter, bukan unit CRS dan PostGIS akan menggunakan perhitungan geodetik alih-alih geometri planar.
Tidak semua fungsi mendukung geometri tetapi Anda dapat memilih antara geometri dan geografi. Untuk daftar fungsi saat ini, lihat: https://postgis.net/docs/PostGIS_Special_Functions_Index.html#PostGIS_GeographyFunctions
Saya tidak berpikir itu mungkin untuk merekomendasikan geografi atau geometri untuk basis data besar. Itu tergantung pada apa yang Anda lakukan dengan data Anda. Karena perhitungan pada bola lebih rumit, saya berharap analisis lebih lambat pada fitur geografi. Anda juga harus mengubah semua data Anda menjadi WGS84 untuk menggunakan geografi.
Jika Anda melakukan banyak pengukuran dan misalnya harus membandingkan ukuran poligon besar, masuk akal untuk menggunakan geografi daripada geometri.
Saya menemukan hal berikut yang bermanfaat: http://postgis.net/workshops/postgis-intro/geography.html
Topik ini juga tercakup dalam "PostGIS Beraksi" (ISBN: 9781935182269).
sumber
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:
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,
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,
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!).
sumber
ST_GeomFrom*
danST_As*
tampak sangat berguna, terutama dikombinasikan dengan kemampuan untuk mendefinisikan CRS kustom, membiarkan PostGIS menangani transformasi selama permintaan dan ekspor dalam satu CRS tunggal?Saya percaya bahwa perbedaan yang paling signifikan adalah bahwa dengan tipe geografi, perhitungan dibuat pada bola yang mewakili bumi yang bertentangan dengan permukaan datar yang digunakan dalam perhitungan yang dibuat pada fitur tipe geometri.
Dokumennya cukup bagus: http://postgis.net/docs/manual-1.5/ch04.html#PostGIS_Geography
Jenis geografi baru-baru ini ditambahkan, sehingga lebih sedikit fungsi yang didukung / diimplementasikan.
sumber
Mungkin Anda menemukan fitur ini - dan jawaban - tidak berguna, tetapi salah satu keuntungan bekerja dengan geometri adalah Anda dapat bekerja tanpa referensi spasial (yaitu, SRID diatur ke -1).
Saat ini saya sedang bekerja dalam sebuah aplikasi yang menyaring data LiDAR di udara, di antara sumber datanya adalah database PostGIS, yang menyediakan pengindeksan spasial kelas pertama ( RTree over GiST ) dan mengatasi volume data yang tinggi tanpa masalah. Karena aplikasi itu tidak memerlukan memanipulasi atau menganalisis fitur geografi, SRID tidak diperlukan, sehingga menghindari overhead yang dapat ditimbulkannya.
sumber