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

temukan lokasi terdekat dengan garis lintang dan bujur di postgresql

PostGIS

Jangan simpan lat dan long di atas meja seperti itu. Sebagai gantinya, gunakan geometri PostGIS atau jenis geografi .

CREATE EXTENSION postgis;

CREATE TABLE foo (
  geog geography;
);

CREATE INDEX ON foo USING gist(geog);

INSERT INTO foo (geog)
  VALUES (ST_MakePoint(x,y));

Sekarang ketika Anda perlu menanyakannya, Anda dapat menggunakan KNN (<-> ) yang sebenarnya akan melakukan ini pada indeks.

SELECT *
FROM foo
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

Dalam kueri Anda, Anda secara eksplisit memiliki HAVING distance < 5 . Anda juga dapat melakukannya di indeks.

SELECT *
FROM foo
WHERE ST_DWithin(foo.geog, ST_MakePoint(x,y)::geography, distance_in_meters)
ORDER BY foo.geog <-> ST_MakePoint(x,y)::geography;

Ini memastikan bahwa tidak ada yang dikembalikan jika semua titik berada di luar distance_in_meters .

Selanjutnya x dan y adalah bilangan desimal ST_MakePoint(46.06, 14.505)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rails ActiveRecord - cara mengambil catatan antara dua tanggal

  2. Apakah semua kelompok memiliki kekuatan total yang sama untuk subkelompok yang diberikan?

  3. Basis data postgres restful Api express

  4. Gunakan hasil pg_dump sebagai input untuk pg_restore

  5. Dapatkan tanggal hari dalam seminggu dalam rentang tanggal