Estou usando o PostGIS 2.0.0 e gostaria de armazenar uma superfície GML de uma maneira que permita calcular interseções entre essa superfície e vários pontos e linhas. No meu caso, o Surface terá um PolygonPatch sem anéis internos e um anel externo que pode ser um LineStringSegment, um Geodesic, um arco ou um círculo. As distâncias podem ser da ordem de dezenas a centenas de quilômetros. Vejo que o PostGIS possui CIRCULARSTRING
e CURVEPOLYGON
, o que parece ser uma boa maneira de armazenar um arco, exceto que eles não são suportados apenas pelo geography
tipo geometry
. Qual seria a melhor maneira de armazenar isso? (Eu sou muito novo no PostGIS e GIS em geral, então é perfeitamente possível que eu esteja perdendo algo óbvio.)
9
Respostas:
ST_GeomFromGML
Você pode armazenar seus recursos GML como um tipo de dados PostGIS Geometry usando a função ST_GeomFromGML, que converterá seu GML no tipo de dados geometry. FYI: Existem funções semelhantes para KML, WKT e assim por diante.
basta fazer algo como:
Depois de tê-lo no campo de geometria, você pode fazer toda a diversão que se cruza e o que você deseja fazer no PostGIS
Em seguida, você pode cuspir seu resultado novamente no formato GML usando ST_AsGML
EDIT # 1 Eu acredito que você está procurando:
http://postgis.net/docs/ST_Distance_Sphere.html
http://postgis.net/docs/ST_Distance_Spheroid.html
EDIT # 2
Estou usando "POSTGIS =" 1.5.2 "(versão mais antiga que você) e a seguinte instrução funciona perfeitamente:
Você precisa usar uma combinação de funções para obter o que precisa.
distance_spheroid não suporta CIRCULARSTRING porque recebe os tipos de dados geométricos.
Adicione uma edição à sua pergunta original com uma amostra de GML com a qual você está tendo problemas e eu escreverei as instruções para você.
fonte
No final, desisti de armazenar o arco ou círculo "exato". Ao importar um arco GML (que é definido por 3 pontos no arco), crio temporariamente uma geometria
CIRCULARSTRING
e depois a converto em geografia, da seguinte maneira:Ao importar um GML ArcByCenterPoint (que é definido pelo ponto central, raio e ângulos de início e fim), eu o aproximo diretamente projetando pontos em intervalos de 1 grau, do ângulo inicial ao ângulo final. Isso é feito em uma esfera, não em um esferóide, por isso não é totalmente preciso, mas existem tickets PostGIS para implementar azimute e projeção de pontos para o tipo de geografia. O mesmo para um círculo.
fonte