У мене є PostGIS db, і я хочу знайти точки, які лежать у певному регіоні (обмежувальне поле). У мене є два набори координат, з яких я можу отримати всі чотири прямокутні точки, які утворюють поле (якщо потрібно). Мій стовпець, про який йде мова, має назву "точка", і він також є типом точки.
- Чи все-таки потрібно вказати чотири набори координат (lat / long) та отримати всі точки, що лежать у полі.
- Або вкажіть дві точки і дозвольте БД обробити кути прямокутника і повернути точки всередині
Про всяк випадок мені не зрозуміло, чого я хочу досягти. Еквівалент "vanilla" sql, якби я мав lat і довге поле замість точки, було б:
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 не працює для мене.