Используйте ST_DWithin для запроса пар геометрических точек в пределах 400 миль в таблице PostgreSQL - PullRequest
2 голосов
/ 17 июня 2020

У меня есть таблица с именем h2combines в Postgres, в которой есть два поля геометрии точек: geom1 и geom2, а также некоторые другие поля. Я хочу выбрать все записи, что geom1 и gemo2 имеют 400 миль. Я пробовал это:

SELECT * from h2combines WHERE ST_DWithin(geom1, geom2, 643738);  

Однако он вернул все строки. Кажется, я что-то неправильно понимаю. Спасибо!

1 Ответ

5 голосов
/ 17 июня 2020

Добро пожаловать в SO.

Чтобы получить расстояние в метрах / милях, вам нужно преобразовать геометрию в geography, например,

SELECT * FROM h2combines 
WHERE ST_DWithin(geom1::geography, geom2::geography, 643737.6);

Имейте в виду, что вычисления с использованием GEOMETRY и GEOGRAPHY сделаны по-разному, как и их результаты. GEOGRAPHY вычисляет координаты по сферической поверхности (что может быть намного медленнее, чем GEOMETRY) и использует метры в качестве единицы измерения, а GEOMETRY использует плоскую проекцию и использует единицы SRS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...