Знайдіть точки, які лежать у межах набору координат


9

У мене є 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 не працює для мене.


Кращим методом є публікація лише в одному місці. Якщо це місце є невідповідним або не виходить, його можна легко перенести. Я не збираюся вживати жодних дій, оскільки GIS - це питання, де має бути ваше запитання, але я б закликав вас видалити перехресну публікацію на SO.
whuber

1
@whuber .. зроблено.
Анкур

Чи - виберіть GeometryFromText ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) - працює?
Шон

Я не впевнений, що ти маєш на увазі. Я спробував безліч різних варіацій сказаного вами, а вони не спрацювали
Ankur

Який стовпець "точка", на який ви посилаєтесь у ST_MakePoint (point)
underdark

Відповіді:


9
SELECT * FROM myTable WHERE 
ST_Within(the_geom, GeometryFromText ('POLYGON((75 20,80 30,90 22,85 10,75 20))', 4326))

<- замінити координати за потребою


вибачте за дурне запитання, але що таке "the_geom" ... чи я повинен псевдоніму "SELECT * FROM myTable" і чи стане це значення "the_geom"?
Ankur

Вибачте, звичайно це колонка, яку шукають. Я б назвав це db_column чи щось подібне, але досьє постгістів думають інакше ... це має сенс, коли ти знаєш, що це таке.
Анкур

1
Коли я запускаю це, я отримую помилку, яка говорить про те, що GeometryFromText не існує. Я використовую postgis 2.0. Я також спробував st_geomfromtext.
пікардо

@underdark, можливо, я помиляюся, але здається, що дужки відсутні.
Девід Пасторе

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.