Выбор PostGIS по широте / долготе

18

У меня есть minLat, minLong, maxLat и maxLong из коробки, нарисованной на карте. Прямо сейчас мой запрос на получение всех точек в поле выглядит так:

SELECT *
FROM geomTable
WHERE (longitude BETWEEN minLon AND maxLon)
AND (latitude BETWEEN minLat AND maxLat)

Я хочу использовать столбец геометрии вместо столбцов lat / long, чтобы получить результаты. Я пробовал этот запрос:

SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(minLon, minLat, maxLon, maxLat, 4326);

из этого сообщения: выберите ограничивающий прямоугольник с помощью postgis, но он не возвращает результатов.

У кого-нибудь есть пример того, как выбрать все точки внутри поля, созданного min и max lat / longs, используя геометрию в postgis?

bl8rchk
источник
Какую версию PostGIS вы используете?
Mapperz
Мой PostGIS - Версия 2.0.1
bl8rchk
2
оба столбца geom находятся в одном и том же SRID?
nickves
Я думаю, что я могу быть далеко от моего подхода ... У меня есть только один столбец geom. Это SRID 2223
bl8rchk
@ bl8rchk что такое таблица geomTableи поле mytable.geom?
theartofbeing

Ответы:

16

Ваши данные не в широте / долготе, поэтому вам нужно поместить ваш ящик в координатное пространство ваших данных:

SELECT *
FROM mytable
WHERE 
  mytable.geom && 
  ST_Transform(ST_MakeEnvelope(minLon, minLat, maxLon, maxLat, 4326), 2223);
Пол Рэмси
источник