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

Bagaimana cara saya menanyakan semua baris dalam radius 5 mil dari koordinat saya?

Anda ingin "semua baris dalam radius 5 mil dari koordinat" , jadi ini bukan persis masalah K-nearest-neighbour (KNN). Terkait, tetapi kasus Anda lebih sederhana. "Temukan 10 baris yang paling dekat dengan koordinat saya" akan menjadi masalah KNN.

Ubah koordinat Anda menjadi geography nilai:

ST_SetSRID(ST_MakePoint(longitude, latitude),4326)::geography

Atau Anda dapat menggunakan geometry yang lebih sederhana Tipe. Pertimbangkan:
4.2.2. Kapan harus menggunakan tipe Data Geografi daripada tipe data Geometri

Kemudian kita memiliki tabel seperti:

CREATE TABLE tbl (
  tbl_id serial PRIMARY KEY
, geog geography NOT NULL
);

Yang Anda butuhkan hanyalah ST_DWithin() - dan indeks spasial untuk membuatnya cepat:

CREATE INDEX tbl_geog_gist ON tbl USING gist(geog);

Pertanyaan:

SELECT *, ST_Distance(c.x, geog) AS distance  -- distance is optional
FROM   tbl t, (SELECT ST_GeographyFromText('SRID=4326;POINT(-72.63 42.06)')) AS c(x)
WHERE  ST_DWithin(c.x, geog, 8045)  -- distance in meter
ORDER  BY distance; -- order is optional, you did not ask for that

Atau Anda dapat menggunakan kolom asli Anda dan membuat indeks fungsional ... Ini dan detail lainnya dalam jawaban yang terkait erat ini di dba.SE:

  • Pesan berdasarkan jarak


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat profil Database PostgreSQL?

  2. Salin tabel dari satu database ke database lain di Postgres

  3. Berikan izin kepada pengguna untuk setiap tabel baru yang dibuat di postgresql

  4. Konvensi penamaan PostgreSQL

  5. Pyodbc - Nama sumber data tidak ditemukan, dan tidak ada driver default yang ditentukan