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

Най-ефективният начин за намиране на точки в определен радиус от дадена точка

Създаването на буфер за намиране на точките е определено не-не поради (1) допълнителните разходи за създаване на геометрията, която представлява буфера, и (2) изчислението точка в многоъгълник е много по-малко ефективно от простото изчисляване на разстояние.

Очевидно работите с данни (дължина, ширина), така че трябва да ги преобразувате в подходяща декартова координатна система, която има същата мерна единица като вашето разстояние от 10 000. Ако това разстояние е в метри, тогава можете също да прехвърлите точката от таблицата към geography и изчислете директно върху координатите (дължина, ширина). Тъй като искате да идентифицирате само точките, които са в рамките на определеното разстояние, можете да използвате ST_DWithin() функция с изчисление върху сферата за допълнителна скорост (не правете това, когато сте на много големи географски ширини или на много големи разстояния):

SELECT id, point 
FROM my_table 
WHERE ST_DWithin(point::geography,
                 ST_GeogFromText('POINT(-116.768347 33.911404)'),
                 10000, false);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pgbackrest Възстановяване и възстановяване на Delta

  2. Заявката за актуализиране е твърде бавна на Postgres 9.1

  3. Postgresql - има ли начин да деактивирате показването на оператори INSERT при четене от файл?

  4. грешка при кодиране на postgres в приложението sidekiq

  5. Postgresql, актуализирайте, ако съществува ред с някаква уникална стойност, иначе вмъкнете