Encontre pontos dentro de um conjunto de coordenadas

9

Eu tenho um PostGIS db e quero encontrar os pontos que estão dentro de alguma região (uma caixa delimitadora). Eu tenho dois conjuntos de coordenadas, dos quais posso obter todos os quatro pontos retangulares que formam a caixa (se necessário). Minha coluna de dados em questão é denominada 'point' e também é do tipo point.

  • Existe uma maneira de especificar quatro conjuntos de coordenadas (lat / long) e obter todos os pontos que estão dentro da caixa.
  • Ou especifique dois pontos e deixe o DB calcular os cantos do retângulo e retorne os pontos dentro de

Apenas no caso de eu não estar sendo claro quanto ao que quero alcançar. O equivalente ao 'vanilla' sql se eu tivesse um campo longo e um latão em vez de um ponto seria:

SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax

EDIÇÃO ATUALIZADA:

Estou tentando a solução do underdark. No começo, eu não tinha o construtor ST_MakePoint (agora tenho) e ainda recebo um erro muito semelhante (apenas em um caractere diferente).

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

e estou recebendo este erro:

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

EDITAR:

No curto prazo, posso resolvê-lo com:

SELECT * FROM triples WHERE box '((point1),(point2))' @> point

Mas terei que descobrir por que nenhuma das funções do PostGIS não está funcionando para mim.

Ankur
fonte
O método preferido é postar apenas em um local. Se esse local for inapropriado ou não funcionar, pode ser facilmente migrado. Não tomarei nenhuma ação, porque o GIS é onde sua pergunta deve estar, mas peço que você exclua a postagem cruzada no SO.
whuber
11
@ whuber .. feito.
Ankur
- seleciona GeometryFromText ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) - funciona?
21411 Sean
Eu não estou certo do que você quer dizer. Eu tentei uma variedade de diferentes variações do que você disse e eles não funcionou
Ankur
Qual é a coluna "point" referenciada em ST_MakePoint (point)
underdark

Respostas:

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

<- substitua as coordenadas conforme necessário

underdark
fonte
desculpe a pergunta estúpida, mas o que é 'the_geom' ... Eu deveria alias * SELECT FROM consulta myTable e que esse valor se tornar 'the_geom'
Ankur
Desculpe, é claro que é a coluna que está sendo pesquisada. Eu chamaria isso de db_column ou algo assim, mas os documentos do postgis pensam o contrário ... faz sentido quando você sabe o que é.
Ankur
11
Quando executo isso, estou recebendo um erro dizendo que GeometryFromText não existe. Estou usando o postgis 2.0. Eu também tentei st_geomfromtext.
picardo
@underdark talvez eu esteja errado, mas parece que falta um parêntese.
Davide Pastore