PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como encontrar todos os pontos dentro do polígono no postgis?


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

Nota:O polígono deve ser fechado (isso significa que a última coordenada ==primeira coordenada). O segundo parâmetro POINT_LOCATION deve ser a coluna de geometria em sua tabela de pontos.

ATUALIZAÇÃO:Tentei reproduzir seus passos no meu banco de dados pg. Criei 2 tabelas, LOCATIONS_TABLE (id, geom) e POLYGON (id, geom). Depois disso eu preenchi o LOCATIONS_TABLE com os 2 pontos
SRID=4326;POINT(-103.4955 20.723544)
SRID=4326;POINT(-103.496956 20.722446)

Depois disso eu inseri o polígono na tabela 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  (...)

Visualizei a situação no qgis, veja a imagem abaixo:

Como você pode ver, os 2 pontos estão dentro do polígono. Então eu criei manualmente um ponto fora do polígono. Depois disso, você pode usar a seguinte consulta sql, para ver se os pontos estão dentro do polígono:
SELECT ST_Contains(polygon.geom, point.geom) 
FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon

Ele retorna t para os 2 pontos internos e falso para o terceiro ponto.