У меня есть база данных PostGIS, и я хочу найти точки, которые лежат в некотором регионе (ограничивающий прямоугольник). У меня есть два набора координат, из которых я могу получить все четыре точки прямоугольника, которые образуют прямоугольник (при необходимости). Мой столбец данных называется «точка», и он также имеет тип точки.
- Есть ли в любом случае указать четыре набора координат (широта / долгота) и получить все точки, которые лежат в рамке.
- Или укажите две точки и позвольте DB отработать углы прямоугольника и вернуть точки в пределах
На всякий случай, мне неясно, чего я хочу достичь. Эквивалент с 'vanilla' sql, если бы вместо точки было поле lat и long:
SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax
ОБНОВЛЕНО РЕДАКТИРОВАТЬ:
Я пытаюсь решить проблему Подземья. Сначала у меня не было конструктора ST_MakePoint (теперь у меня есть), и я все еще получаю очень похожую ошибку (только на другом персонаже).
SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))
и я получаю эту ошибку:
ERROR: function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********
ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39
РЕДАКТИРОВАТЬ:
В краткосрочной перспективе я могу решить это с:
SELECT * FROM triples WHERE box '((point1),(point2))' @> point
Но мне придется разобраться, почему ни одна из функций PostGIS не работает для меня.