PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgis SQL untuk tetangga terdekat

Pertama, Jika Anda menggunakan lintang, bujur, Anda perlu menggunakan 4326.

UPDATE season SET geom = ST_PointFromText ('POINT(' || longitude || ' ' || latitude || ')' , 4326 ) ;

Kemudian Anda membuat indeks pada bidang geom

CREATE INDEX [indexname] ON [tablename] USING GIST ( [geometryfield] ); 

Kemudian Anda mendapatkan tetangga kNN:

SELECT *,ST_Distance(geom,'SRID=4326;POINT(newLon newLat)'::geometry) 
FROM yourDbTable
ORDER BY
yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
LIMIT 10;

Kueri ini akan memanfaatkan fungsionalitas kNN dari indeks inti (http://workshops. boundlessgeo.com/postgis-intro/knn.html ).

Tetap saja jarak yang dikembalikan akan dalam derajat, bukan meter (proyeksi 4326 menggunakan derajat).

Untuk memperbaikinya:

SELECT *,ST_Distance(geography(geom),ST_GeographyFromText('POINT(newLon newLat)') 
FROM yourDbTable
ORDER BY
yourDbTable.geom <->'SRID=4326;POINT(newLon newLat)'::geometry
LIMIT 10;

Saat Anda menghitung ST_distance, gunakan tipe geografi. Jarak selalu ada dalam meter:

http://workshops.boundlessgeo.com/postgis-intro/geography.html

Semua fungsi ini mungkin memerlukan versi Postgis terbaru (2.0+). Saya tidak yakin.

Periksa ini untuk referensi https:// gis.stackexchange.com/questions/91765/improve-speed-of-postgis-nearest-neighbor-query/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rumus Koefisien Korelasi Pearson dalam SQL

  2. Perintah pengembalian baris SQL

  3. Kesalahan PostgreSQL 'Tidak dapat terhubung ke server:Tidak ada file atau direktori seperti itu'

  4. rake db:buat kesalahan penyandian dengan postgresql

  5. Kesalahan Menginstal Psycopg2 di MacOS 10.9.5