PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да направя заявка за всички редове в радиус от 5 мили от моите координати?

Искате „всички редове в радиус от 5 мили от координата“ , така че това не точно проблем с K-най-близкия съсед (KNN). Свързано, но вашият случай е по-прост. „Намерете 10-те реда, най-близки до координатите ми“ би било проблем с KNN.

Преобразувайте координатите си в geography стойности:

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

Като алтернатива можете да използвате по-простата geometry Тип. Помислете за:
4.2.2. Кога да се използва тип данни за география над тип данни за геометрия

След това имаме таблица като:

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

Всичко, от което се нуждаете, е ST_DWithin() - и пространствен индекс за да го направите бързо:

CREATE INDEX tbl_geog_gist ON tbl USING gist(geog);

Запитване:

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

Или можете да използвате оригиналните си колони и да създадете функционален индекс ...Това и други подробности в този тясно свързан отговор на dba.SE:

  • Подреждане по разстояние


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. функции на масив с големи числа

  2. Postgresql:Как да намерите pg_hba.conf файл с Mac OS X

  3. Django cache.set() причинява грешка при дублиран ключ

  4. Има ли начин за зареждане на текстови данни в база данни в PostgreSQL?

  5. Как да вляза и да се удостоверя в Postgresql след нова инсталация?