Mais

Armazenamento de superfície GML em PostGIS


Estou usando PostGIS 2.0.0 e gostaria de armazenar uma superfície GML de uma forma que permita o cálculo de 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 Geodésico, um Arco ou um Círculo. As distâncias podem ser da ordem de dezenas a centenas de quilômetros. Vejo que PostGIS temCIRCULARSTRINGeCURVEPOLYGON, o que parece ser uma boa maneira de armazenar um arco, exceto que eles não são suportados pelogeografiatipo, apenasgeometria. Qual seria a melhor maneira de armazenar isso? (Sou bastante novo no PostGIS e no GIS em geral, então é perfeitamente possível que esteja faltando algo óbvio.)


ST_GeomFromGML

Você pode armazenar seus recursos GML como um tipo de dados de geometria PostGIS usando a função ST_GeomFromGML que converterá seu GML para o tipo de dados de geometria. Para sua informação: existem funções semelhantes para KML, WKT e assim por diante.

apenas faça algo como:

INSERT em valores de myTable (mygeomField) (ST_GeomFromGML ('   -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932 '));

Uma vez que você tenha no campo de geometria você pode fazer todas as interseções divertidas e outras coisas que você quer fazer no PostGIS

Então você pode cuspir seu resultado de volta no formato GML usando ST_AsGML

EDITAR # 1 Eu acredito que você está procurando por:

http://postgis.net/docs/ST_Distance_Sphere.html

http://postgis.net/docs/ST_Distance_Spheroid.html

EDITAR # 2

Estou usando "POSTGIS =" 1.5.2 "(versão mais antiga que você) e a seguinte instrução funciona perfeitamente:

selecione ST_GeomFromText ('CIRCULARSTRING (220268 150415,220227 150505,220227 150406)')

Você deve usar uma combinação de funções para obter o que precisa.

distance_spheroid não oferece suporte a CIRCULARSTRING porque leva os tipos de dados de geometria.

Por favor, adicione um EDITAR à sua pergunta original com um exemplo de GML com o qual você está tendo problemas e eu escreverei as declarações para você.


No final, desisti de armazenar o arco ou círculo "exato". Ao importar um arco GML (que é definido por 3 pontos no arco), eu crio temporariamente uma geometriaCIRCULARSTRINGe, em seguida, converta-o para geografia, como este:

ST_RemoveRepeatedPoints (ST_CurveToLine (ST_GeomFromText ('CIRCULARSTRING (…)', 4326))) :: geografia

Ao importar um GML ArcByCenterPoint (que é definido pelo ponto central, raio e ângulos inicial e final), aproximo-o diretamente projetando pontos em intervalos de 1 grau do ângulo inicial ao ângulo final. Isso é feito em uma esfera, não esferóide, então não é totalmente preciso, mas existem tickets PostGIS para implementar azimute e projeção de ponto para o tipo de geografia. O mesmo vale para um círculo.


Assista o vídeo: Construções de barragems domésticas para coleta e armazenamento de água: MÓDULO 2 (Outubro 2021).