Saya pemula untuk PostgreSQL dan PostGIS. Saya ingin menyimpan nilai lintang dan bujur dalam tabel database PostgreSQL 9.1.1. Saya akan menghitung jarak antara dua titik, menemukan titik yang lebih dekat dengan menggunakan nilai lokasi ini.
Jenis data mana yang harus saya gunakan untuk lintang dan bujur?
postgresql
types
latitude-longitude
postgis
pengguna1008404
sumber
sumber
Jawaban:
Anda dapat menggunakan tipe data
point
- gabungan(x,y)
yang bisa menjadi lat / panjang Anda. Menempati 16 byte: 2float8
angka secara internal.Atau buat dua kolom tipe
float
(=float8
ataudouble precision
). Masing-masing 8 byte.Atau
real
(=float4
) jika presisi tambahan tidak diperlukan. Masing-masing 4 byte.Atau bahkan
numeric
jika Anda membutuhkan ketelitian mutlak. 2 byte untuk setiap grup yang terdiri dari 4 digit, ditambah overhead 3 - 8 byte.Baca manual bagus tentang tipe numerik dan tipe geometris .
Tipe
geometry
dangeography
data disediakan oleh modul tambahan PostGIS dan menempati satu kolom di tabel Anda. Masing-masing menempati 32 byte untuk satu titik. Ada beberapa overhead tambahan seperti SRID di sana. Jenis ini menyimpan (long / lat), bukan (lat / long).Mulailah membaca manual PostGIS di sini .
sumber
float
tipe data. Itu membuat perhitungan dengan koordinat sangat rumit. Anda harus menggunakan PostGIS dangeography
tipe data untuk perhitungan seperti itu.Di PostGIS, untuk titik dengan lintang dan bujur ada datatype geografi.
Untuk menambahkan kolom:
Untuk memasukkan data:
4326 adalah ID Referensi Tata Ruang yang mengatakan datanya dalam derajat bujur dan lintang, sama seperti pada GPS. Lebih lanjut tentang itu: http://epsg.io/4326
Urutan adalah Bujur, Lintang - jadi jika Anda memplotnya sebagai peta, itu adalah (x, y)
Untuk menemukan titik terdekat Anda perlu terlebih dahulu membuat indeks spasial:
dan kemudian meminta, katakan, 5 paling dekat ke titik tertentu:
sumber
Saya sangat menganjurkan untuk PostGis . Ini spesifik untuk tipe data seperti itu dan memiliki metode di luar kotak untuk menghitung jarak antar titik, di antara operasi GIS lainnya yang dapat Anda temukan berguna di masa depan
sumber
Jika Anda tidak memerlukan semua fungsionalitas yang ditawarkan PostGIS, Postgres (saat ini) menawarkan modul ekstensi yang disebut earthdistance . Menggunakan tipe data titik atau kubus tergantung pada kebutuhan akurasi Anda untuk perhitungan jarak.
Anda sekarang dapat menggunakan fungsi earth_box untuk -misalnya- permintaan untuk poin dalam jarak tertentu dari lokasi.
sumber
Dalam PostGIS Geometri lebih disukai daripada Geografi (model pembumian bulat) karena perhitungannya lebih sederhana sehingga lebih cepat. Ini juga memiliki BANYAK fungsi yang lebih banyak tersedia tetapi kurang akurat untuk jarak yang sangat jauh.
Impor CSV Anda ke bidang lat panjang ke
DECIMAL(10,6)
kolom. 6 digit adalah presisi 10cm, harus banyak untuk kebanyakan kasus penggunaan.Lalu masukkan data Anda yang diimpor
Verifikasi SRID bukan nol!
Validasi urutan parameter panjang lat Anda menggunakan penampil WKT dan
ST_AsEWKT(target_table.geom)
.Kemudian indeks untuk kinerja terbaik
sumber