ホームページ  >  記事  >  バックエンド開発  >  Python gdal チュートリアル: ジオメトリと投影

Python gdal チュートリアル: ジオメトリと投影

黄舟
黄舟オリジナル
2016-12-24 16:01:174800ブラウズ

空のジオメトリ オブジェクトを作成します: ogr.Geometry

さまざまなジオメトリの定義に使用されるメソッドは異なります (点、線、ポリゴンなど)

新しい点を作成するには、メソッド AddPoint( , < ; を使用します。 y>、[])。 Z 座標は通常省略され、デフォルト値は 0 です

例:

point = ogr.Geometry(ogr.wkbPoint)

point.AddPoint(10,20)

New line

Use AddPoint(< ; x>, , []) を使用して点を追加します

SetPoint(, , , []) を使用して、点の座標

たとえば、次のコードは点 0 の座標を変更します:

line = ogr.Geometry(ogr.wkbLineString)

line.AddPoint(10,10)

line.AddPoint(20,20) )

line.SetPoint(0,30,30) #(10,10) ->(30,30)

すべての点の数をカウントします

print line.GetPointCount()

x座標を読み取ります点 0 の y 座標

print line.GetX(0)

print line.GetY(0)

新しいポリゴンを作成するには、まず新しいリングを作成してから、そのリングをポリゴン オブジェクトに追加します。

リングの作り方は?まず新しいリング オブジェクトを作成し、それにポイントを 1 つずつ追加します。

ring = ogr.Geometry(ogr.wkbLinearRing)

ring.AddPoint(0,0)

ring.AddPoint(100,0)

ring.AddPoint(100,100)

ring.AddPoint(0,100)

最後に、CloseRings を使用してリングを閉じるか、最後の点の座標を最初の点と同じに設定します。

ring.CloseRings()

ring.AddPoint(0,0)

以下はボックスを作成する例です。これは、2 つのリング層で構成されるポリゴン オブジェクトです。 Outring = OGR.Geometry (OGR.WKBLINEARING)

Outring.addpoint (0,0). ) outring.AddPoint(0,0)

inring = ogr.Geometry(ogr.wkbLinearRing)inring = ogr.Geometry(ogr. wkbLinearRing)

inring.AddPoint(25,25)

inring.AddPoint(75,25)

inring.AddPoint(75,75)

inring.AddPoint(25,75)

inring.CloseRings()

polygon = ogr.Geometry(ogr.wkbPolygon)

polygon.AddGeometry(outring)

polygon .AddGeometry(inring)

最後の 3 つの文はより重要です。つまり、最初にポリゴン オブジェクトを作成してから、外側のリングと内側のリング

次の文は、ポリゴンが持つことができるリングの数を数えるのに役立ちます

print Polygon.GetGeometryCount()

ポリゴンからリングを読み取ります。インデックスの順序は、リングを追加するときの順序と同じです。ポリゴンの作成

outring = Polygon.GetGeometryRef(0)

inring = Polygon.GetGeometryRef(1)

MultiPoint、MultiLineString、MultiPolygon などの複合幾何学的形状マルチジオメトリ

を作成します

AddGeometry を使用して通常の幾何学的形状を複合に追加します幾何学的形状、例:

multipoint = ogr.Geometry(ogr.wkbMultiPoint)

point = ogr.Geometry(ogr.wkbPoint)point = ogr.Geometry(ogr.wkbPoint)

point.AddPoint(10,10)

multipoint.AddGeometry(point)

point.AddPoint(20,20)

multipoint.AddGeometry(point)

MultiGeometryでGeometryを読み取る方法は、Polygonからリングを読み取る方法と同じと言えます。組み込みの MultiGeometry です。

既存のフィーチャ ジオメトリは削除しないでください。Python がクラッシュします。

削除できるのは、スクリプトの実行中に作成されたジオメトリ (手動で作成されたジオメトリ、または他の関数の呼び出しによって自動的に作成されたジオメトリ) のみです。このジオメトリが他のフィーチャの作成に使用されている場合でも、削除できます。

例: Polygon.Destroy()

投影投影については、SpatialReference オブジェクトを使用します

さまざまな投影、GDAL は WKT、PROJ.4、ESPG、USGS、ESRI.prj をサポートしています

レイヤーとジオメトリから読み取ることができます投影を取得します。例:

spatialRef =layer.GetSpatialRef()

spatialRef = geom.GetSpatialReference()

投影情報は通常、.prj ファイルに保存されます。そのようなファイルがない場合、上記の関数は None を返します

新しい投影を作成する:

最初に osr ライブラリをインポートし、次に osr.SpatialReference() を使用して SpatialReference オブジェクトを作成します

次に、次のステートメントを使用して投影情報を SpatialReference オブジェクトにインポートします

•ImportFromWkt(< wkt>)

•ImportFromEPSG( ; ;)

•ImportFromUSGS(, )

•ImportFromXML()

投影をエクスポートするには、次のステートメントを使用しますに文字列としてエクスポートします

•ExportToWkt()

•ExportToPrettyWkt()

•ExportToPro j4()

•ExportToPCI()

•ExportToUSGS()

•ExportToXML()

幾何学的形状の Geometry で投影変換を実行するには、まず 2 つの Projection を初期化してから、CoownedTransformation オブジェクトを作成し、それを変換に使用する必要があります

sourceSR = osr.SpatialReference()

sourceSR.ImportFromEPSG(32612) #UTM 12N WGS84

targetSR = osr.SpatialReference()

targetSR.ImportFromEPSG(4326) #Geo WGS84

coordTrans = osr.CoordineTransformation(sourceSR, targetSR)

geom.Transform(coordTrans)

しかし、このコードは非常に面倒です! Windowsでは動作しません。外国人フォーラムではLinuxは問題ないけどWindowsはもうダメだという議論がある。 。 。

さらに注意すべき点がいくつかあります:

適切なタイミングでジオメトリを編集します。投影変換後はジオメトリを移動しないことが最善です。

データソース内のすべてのジオメトリに対して投影変換を実行するには、それを 1 つずつ実行する必要があります。ループを使用します。

投影を .prj ファイルに書き込むのは、実際には非常に簡単です。まずはMorphToESRI()して文字列に変換し、テキストファイルを開いて書き込みます。例:

targetSR.MorphToESRI()

file = open('test.prj', 'w')

file.write(targetSR.ExportToWkt())

ffile.close()

上記は次のとおりですpython gdal チュートリアル: ジオメトリと投影のコンテンツ その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。