PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да намеря всички точки в полигона в postgis?

Можете да използвате

SELECT POINT_LOCATION 
FROM LOCATIONS_TABLE 
WHERE ST_Contains(ST_GEOMFROMTEXT('POLYGON((P1.X P1.Y, P2.X P2.Y, ...))'), LOCATIONS_TABLE.POINT_LOCATION);

Забележка:Многоъгълникът трябва да е затворен (това означава, че последната координата ==първа координата). Вторият параметър POINT_LOCATION трябва да бъде геометричната колона във вашата таблица с точки.

АКТУАЛИЗАЦИЯ:Опитах се да повторя вашите стъпки в моята база данни на pg. Създадох 2 таблици, LOCATIONS_TABLE (id, geom) и POLYGON (id, geom). След това попълних LOCATIONS_TABLE с 2 точки

SRID=4326;POINT(-103.4955 20.723544)
SRID=4326;POINT(-103.496956 20.722446)

След това вмъкнах многоъгълника в таблицата POLYGON

SRID=4326;POLYGON((-103.305496375 20.8527356811533,-103.0810348125 20.6129741620855,-101.6261045 20.5375321062668,-99.8356786875 20.3958770270624,-99.803065375 22.0572706994358,-99.649948125 28.9186361984516,-121.1212769375 8.69559423007209,-103.305496375  (...)

Визуализирах ситуацията в qgis, вижте снимката по-долу:

Както можете да видите, 2-те точки са вътре в многоъгълника. Така че ръчно създадох точка извън многоъгълника. След това можете да използвате следната sql заявка, за да видите дали точките са вътре в многоъгълника:

SELECT ST_Contains(polygon.geom, point.geom) 
FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon

Връща t за 2 точки вътре и false за третата точка.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. План за обяснение на SQL:какво е Materialize?

  2. Postgis / Geodjango:Не може да се определи версията на PostGIS за база данни

  3. Как да принудя Postgres да използва конкретен индекс?

  4. Как да запиша ежедневно класиране за модел в Django?

  5. Използване на параметър като име на колона във функцията Postgres