GMLサーフェスをPostGISに保存する


9

私はPostGIS 2.0.0を使用していますが、GMLサーフェスをさまざまなポイントやラインとの交差を計算できるように格納したいと考えています。私の場合、Surfaceには、LineringSegment、Geodesic、Arc、Circleなどの内部リングと外部リングのない1つのPolygonPatchがあります。距離は、数十から数百マイルのオーダーです。私は、PostGISでは持っていることを見るCIRCULARSTRINGCURVEPOLYGON、彼らはによってサポートされていないことを除いて、アークを格納する良い方法であると思われたgeographyだけで、タイプgeometry。これを保存する最良の方法は何でしょうか?(私はPostGISとGISの一般に非常に新しいので、明らかな何かを見逃している可能性があります。)


GMLをそのままPostgisに保存できます。postgis.refractions.net/documentation/manual-svn/...
Mapperz

ここでのPostGISのジオメトリと地理種類に関するいくつかの説明がpostgis.refractions.net/docs/...
canisrufus

回答:


4

ST_GeomFromGML

GMLをジオメトリデータ型に変換するST_GeomFromGML関数を使用して、GMLフィーチャをPostGISジオメトリデータ型として保存できます。参考:KMLやWKTなどにも同様の関数があります。

次のようなことをしてください:

INSERT into myTable (mygeomField) values (ST_GeomFromGML('
    <gml:LineString srsName="EPSG:4269">
        <gml:coordinates>
            -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932
        </gml:coordinates>
    </gml:LineString>'));

ジオメトリフィールドに配置したら、PostGISでやりたいすべての楽しい交差や操作を実行できます。

次に、ST_AsGMLを使用してGML形式で結果を吐き出すことができます

編集#1 私はあなたが探していると信じています:

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

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

編集#2

私は「POSTGIS = "1.5.2"(あなたより古いバージョン)を使用しており、次のステートメントは問題なく機能します。

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

必要なものを取得するには、関数を組み合わせて使用​​する必要があります。

distance_spheroidは、geometryデータタイプを取り込むため、CIRCULARSTRINGをサポートしていません。

問題があるサンプルGMLの一部を使用して、元の質問にEDITを追加してください。ステートメントを書き出します。


ありがとうございます。ただし、GMLからのインポートは、本当に中心的な問題ではありません。主な問題は、正確な計算を可能にする方法でデータを保存する方法に関するものです。私が理解しているように、ジオメトリタイプは平面に基づいており、地理タイプは曲線をサポートしていないため、そのためにはうまくいきません。
EM0

@EM:EDIT#1をチェック
CaptDragon

ありがとう、それらを試してみましたが、残念ながらCIRCULARSTRINGはサポートされていません。
EM0

@EM:EDIT#2をチェック
CaptDragon

はい、CIRCULARSTRINGを作成するステートメントは機能しますが、そのストリングの距離計算は、「ジオメトリ」タイプであるため、私が理解しているように平面を使用します。とにかく、2つの方法でデータを保存してみます。CIRCULARSTRINGとしての正確な値(ジオメトリ)と、ST_CurveToLineを使用して生成された近似値(地理)です。
EM0

2

結局、「正確な」弧または円の保存をあきらめました。GMLアーク(アーク上の3点で定義される)をインポートする場合、一時的にジオメトリを作成しCIRCULARSTRINGてから、次のようにそれをgeographyに変換します。

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

GML ArcByCenterPoint(中心点、半径、開始角度と終了角度によって定義されます)をインポートするとき、開始角度から終了角度まで1度の間隔で点を投影することにより、これを直接近似します。これは回転楕円体ではなく球体で行われるため、完全には正確ではありませんが、地理タイプに方位角点の投影を実装するためのPostGISチケットがあります。サークルも同じです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.