Estou trabalhando em um sistema que armazena informações de latitude / longitude de endereços em uma tabela PostGIS. Para armazenar Lat / Long no tipo de dados de geometria, estou usando a função ST_GeometryFromText.
Por exemplo, a seguinte chamada de função obtém o valor geométrico na posição Long / Lat especificada:
myPointGeo = ST_GeometryFromText('POINT(40.758871 -73.985114)');
Da mesma forma, converto um polígono em representação geométrica da seguinte maneira:
myPolygonGeo = ST_GeometryFromText('POLYGON ((40.7566484549725 -73.9878561496734, 40.7556894646734 -73.9853026866913, 40.7545841705587 -73.9860537052154, 40.7548036054111 -73.9881458282471, 40.7559820394514 -73.9887895584106, 40.7566484549725 -73.9878561496734 ))')
Quero descobrir se a posição lat / long acima reside dentro deste polígono ou não. Para isso, estou usando a função ST_Within. Mas, embora 'myPointGeo' realmente resida no polígono, ST_Within está retornando false. Estou usando ST_Within desta maneira:
St_Within(myPointGeo,myPolygonGeo)
O que eu estou fazendo errado aqui? Devo usar alguma outra função para esse fim?
Respostas:
Eu acho que ST_Intersects funcionaria melhor, retorna um verdadeiro ou falso se duas geometrias se cruzam ou não. Então, você gostaria de fazer algo como:
ou você pode fazer:
fonte