Suite

Stockage de la surface GML dans PostGIS

Stockage de la surface GML dans PostGIS


J'utilise PostGIS 2.0.0 et j'aimerais stocker une surface GML d'une manière qui permette de calculer les intersections entre cette surface et divers points et lignes. Dans mon cas, la surface aura un PolygonPatch sans anneaux intérieurs et un anneau extérieur qui peut être un LineStringSegment, une Géodésique, un Arc ou un Cercle. Les distances peuvent être de l'ordre de dizaines à centaines de kilomètres. Je vois que PostGIS aCHAÎNE CIRCULAIREetCOURBEPOLYGONE, qui semblent être un bon moyen de stocker un Arc, sauf qu'ils ne sont pas pris en charge par lela géographietapez, seulementgéométrie. Quelle serait la meilleure façon de stocker cela? (Je suis assez nouveau sur PostGIS et SIG en général, il est donc tout à fait possible que je manque quelque chose d'évident.)


ST_GeomFromGML

Vous pouvez stocker vos entités GML en tant que type de données PostGIS Geometry en utilisant la fonction ST_GeomFromGML qui convertira votre GML en type de données Geometry. Pour info : il existe des fonctions similaires pour KML, WKT, etc.

fais juste quelque chose comme :

INSÉRER dans les valeurs de myTable (mygeomField) (ST_GeomFromGML('   -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932 '));

Une fois que vous l'avez dans le domaine de la géométrie, vous pouvez faire toutes les intersections amusantes et tout ce que vous voulez faire dans PostGIS

Ensuite, vous pouvez recracher votre résultat au format GML en utilisant ST_AsGML

MODIFIER #1 Je crois que tu cherches :

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

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

MODIFIER #2

J'utilise "POSTGIS="1.5.2" (version plus ancienne que la vôtre) et la déclaration suivante fonctionne très bien :

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

Vous devez utiliser une combinaison de fonctions pour obtenir ce dont vous avez besoin.

distance_spheroid ne prend pas en charge CIRCULARSTRING car il prend en charge les types de données géométriques.

Veuillez ajouter un ÉDITER à votre question initiale avec un échantillon de GML avec lequel vous rencontrez des problèmes et j'écrirai les déclarations pour vous.


En fin de compte, j'ai renoncé à stocker l'arc ou le cercle "exact". Lors de l'import d'un Arc GML (qui est défini par 3 points sur l'arc) je crée temporairement une géométrieCHAÎNE CIRCULAIRE, puis convertissez-le en géographie, comme ceci :

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

Lors de l'importation d'un GML ArcByCenterPoint (qui est défini par le point central, le rayon et les angles de début et de fin), je l'approche directement en projetant des points à des intervalles de 1 degré de l'angle de départ à l'angle de fin. Cela se fait sur une sphère, pas sur un sphéroïde, ce n'est donc pas tout à fait précis, mais il existe des tickets PostGIS pour implémenter une projection d'azimut et de point pour le type géographique. Idem pour un cercle.