J'utilise PostGIS 2.0.0 et j'aimerais stocker une surface GML de manière à permettre le calcul des 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, un Geodesic, un Arc ou un Circle. Les distances peuvent être de l'ordre de quelques dizaines à plusieurs centaines de kilomètres. Je vois que PostGIS a CIRCULARSTRING
et CURVEPOLYGON
, ce qui semble être un bon moyen de stocker un Arc, sauf qu'ils ne sont pas pris en charge par le geography
type, uniquement geometry
. 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.)
9
Réponses:
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. FYI: Il existe des fonctions similaires pour KML, WKT, etc.
faites juste quelque chose comme:
Une fois que vous l'avez dans le champ géométrique, vous pouvez faire tous les intersections amusantes et tout ce que vous voulez faire dans PostGIS
Ensuite, vous pouvez cracher votre résultat au format GML à l'aide de ST_AsGML
EDIT # 1 Je crois que vous recherchez:
http://postgis.net/docs/ST_Distance_Sphere.html
http://postgis.net/docs/ST_Distance_Spheroid.html
EDIT # 2
J'utilise "POSTGIS =" 1.5.2 "(une version plus ancienne que vous) et la déclaration suivante fonctionne très bien:
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 de géométrie.
Veuillez ajouter une MODIFICATION à votre question d'origine avec un échantillon de GML avec lequel vous rencontrez des problèmes et je vais écrire les déclarations pour vous.
la source
En fin de compte, j'ai renoncé à stocker l'arc ou le cercle "exact". Lors de l'importation d'un arc GML (qui est défini par 3 points sur l'arc), je crée temporairement une géométrie
CIRCULARSTRING
, puis la convertis en géographie, comme ceci: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 les points à des intervalles de 1 degré de l'angle de départ à l'angle de fin. Cela se fait sur une sphère, pas sphéroïdale, donc ce n'est pas entièrement précis, mais il existe des tickets PostGIS pour implémenter l' azimut et la projection ponctuelle pour le type géographique. Pareil pour un cercle.
la source