Viac

Ukladanie povrchu GML do PostGIS


Používam PostGIS 2.0.0 a chcel by som uložiť povrch GML spôsobom, ktorý umožňuje výpočet priesečníkov medzi týmto povrchom a rôznymi bodmi a líniami. V mojom prípade bude mať povrch jednu PolygonPatch bez vnútorných krúžkov a vonkajšieho krúžku, ktorý môže byť LineStringSegment, geodetický, oblúk alebo kruh. Vzdialenosti môžu byť rádovo desiatky až stovky kilometrov. Vidím, že PostGIS máOKRUHaCURVEPOLYGON, ktoré sa javia ako dobrý spôsob ukladania oblúka, až na to, že ich nepodporujegeografiaiba typgeometria. Aký by bol najlepší spôsob uloženia? (V PostGIS a GIS som úplne nový, takže je celkom možné, že mi niečo zjavné chýba.)


ST_GeomFromGML

Svoje funkcie GML môžete uložiť ako údajový typ geometrie PostGIS pomocou funkcie ST_GeomFromGML, ktorá prevedie váš GML na údajový typ geometrie. Pre informáciu: Pre KML, WKT atď. Existujú podobné funkcie.

proste urob niečo ako:

VLOŽTE do hodnôt myTable (mygeomField) (ST_GeomFromGML ('   -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932 '));

Keď to máte v poli geometrie, môžete v PostGISe robiť všetky zábavné križovatky a veci, ktoré chcete robiť

Potom môžete výsledok vyplivnúť späť vo formáte GML pomocou ST_AsGML

ÚPRAVA # 1 Verím, že hľadáte:

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

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

ÚPRAVA # 2

Používam "POSTGIS =" 1.5.2 "(staršia verzia ako vy) a nasledujúce vyhlásenie funguje dobre:

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

Aby ste dosiahli to, čo potrebujete, musíte použiť kombináciu funkcií.

distance_spheroid nepodporuje CIRCULARSTRING, pretože využíva dátové typy geometrie.

Pridajte prosím UPRAVIŤ na vašu pôvodnú otázku s časťou vzorky GML, s ktorou máte problémy, a ja za vás vypíšem vyhlásenia.


Nakoniec som sa vzdal ukladania „presného“ oblúka alebo kruhu. Pri importovaní oblúka GML (ktorý je definovaný 3 bodmi na oblúku) dočasne vytvorím geometriuOKRUH, potom ho preveďte na geografiu, napríklad takto:

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

Pri importovaní GML ArcByCenterPoint (ktorý je definovaný stredovým bodom, polomerom a počiatočným a koncovým uhlom) ho aproximujem priamo premietaním bodov v intervaloch 1 stupňa od počiatočného uhla po koncový uhol. To sa deje na sfére, nie na sféroide, takže to nie je úplne presné, ale existujú vstupenky PostGIS na implementáciu azimutu a bodovej projekcie pre typ zemepisu. To isté pre kruh.