GML から GeoDjango オブジェクトを簡単作成:3 つの代替方法とサンプルコード
django.contrib.gis.gdal.OGRGeometry.from_gml()
関数は、GML (Geography Markup Language) 文字列を OGRGeometry オブジェクトに変換するために使用されます。 OGRGeometry オブジェクトは、空間データを表す Django のオブジェクトです。
使い方
この関数は次のように使用できます。
from django.contrib.gis.gdal import OGRGeometry
gml_string = '<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>10 20 20 40 40 20 20 10</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>'
geometry = OGRGeometry.from_gml(gml_string)
この例では、gml_string
変数は GML 文字列を格納します。 OGRGeometry.from_gml()
関数は、この文字列を OGRGeometry オブジェクトに変換し、geometry
変数に格納します。
引数
この関数は次の引数を取ります。
gml_string
: GML 文字列
戻り値
この関数は OGRGeometry オブジェクトを返します。
例
次の例は、GML 文字列を OGRGeometry オブジェクトに変換し、そのオブジェクトのプロパティにアクセスする方法を示します。
from django.contrib.gis.gdal import OGRGeometry
gml_string = '<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>10 20 20 40 40 20 20 10</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>'
geometry = OGRGeometry.from_gml(gml_string)
print(geometry.geom_type) # 'POLYGON' を出力
print(geometry.srs.name) # 'EPSG:4326' を出力
print(geometry.area) # 400.0 を出力
geometry.area
プロパティは、ジオメトリの面積を返します。geometry.srs
プロパティは、ジオメトリの空間参照系 (SRS) を返します。geometry.geom_type
プロパティは、ジオメトリのタイプ (例: 'POINT'、'LINESTRING'、'POLYGON') を返します。
GML 文字列からポリゴンを作成
from django.contrib.gis.gdal import OGRGeometry
gml_string = '<gml:Polygon srsName="EPSG:4326"><gml:exterior><gml:LinearRing><gml:posList>10 20 20 40 40 20 20 10</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon>'
geometry = OGRGeometry.from_gml(gml_string)
print(geometry.geom_type) # 'POLYGON' を出力
print(geometry.srs.name) # 'EPSG:4326' を出力
print(geometry.area) # 400.0 を出力
ファイルから GML を読み込み、ポリゴンを作成
from django.contrib.gis.gdal import OGRGeometry
with open('my_gml_file.gml', 'r') as f:
gml_string = f.read()
geometry = OGRGeometry.from_gml(gml_string)
print(geometry.geom_type) # 'POLYGON' を出力
print(geometry.srs.name) # 'EPSG:4326' を出力
print(geometry.area) # 400.0 を出力
このコードは、my_gml_file.gml
という名前のファイルから GML 文字列を読み込み、その文字列を OGRGeometry オブジェクトに変換します。
from django.contrib.gis.geos import from_json
geojson_string = '{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[10, 20], [20, 40], [40, 20], [20, 10], [10, 20]]]}, "properties": {"name": "My Polygon"}}'
geometry = from_json(geojson_string)
print(geometry.geom_type) # 'POLYGON' を出力
print(geometry.srs.name) # None を出力
print(geometry.area) # 400.0 を出力
このコードは、GeoJSON 文字列を GeoDjango の from_json()
関数を使用してジオメトリに変換します。 GeoJSON は、空間データを表現するために広く使用されている別のフォーマットです。
- コードを実行する前に、
django.contrib.gis
アプリがインストールされていることを確認してください。 - 上記のコードは、Django バージョン 5.0 を対象としています。他のバージョンを使用している場合は、API が異なる場合があります。
gis.gdal.OGRGeometry.from_gml()
関数は、GML 文字列を OGRGeometry オブジェクトに変換するために使用されます。 しかし、この関数はいくつかの制限があります。
- 複雑な GML 構造を処理するのが難しい場合がある
- GML 2.0 のみサポート
これらの制限を回避するために、gis.gdal.OGRGeometry.from_wkt()
関数と django.contrib.gis.geos.from_ewkt()
関数を使用することができます。
gis.gdal.OGRGeometry.from_wkt() 関数
gis.gdal.OGRGeometry.from_wkt()
関数は、WKT (Well-known Text) 文字列を OGRGeometry オブジェクトに変換するために使用されます。 WKT は、GML よりも簡潔で軽量な空間データ表現形式です。
from django.contrib.gis.gdal import OGRGeometry
wkt_string = 'POLYGON ((10 20, 20 40, 40 20, 20 10, 10 20))'
geometry = OGRGeometry.from_wkt(wkt_string)
print(geometry.geom_type) # 'POLYGON' を出力
print(geometry.srs.name) # None を出力
print(geometry.area) # 400.0 を出力
django.contrib.gis.geos.from_ewkt() 関数
django.contrib.gis.geos.from_ewkt()
関数は、EWKT (Extended WKT) 文字列を GeoDjango の Geometry オブジェクトに変換するために使用されます。 EWKT は、WKT の拡張版であり、空間参照系 (SRS) に関する情報を追加することができます。
from django.contrib.gis.geos import from_ewkt
ewkt_string = 'SRID=4326;POLYGON ((10 20, 20 40, 40 20, 20 10, 10 20))'
geometry = from_ewkt(ewkt_string)
print(geometry.geom_type) # 'POLYGON' を出力
print(geometry.srs.name) # 'EPSG:4326' を出力
print(geometry.area) # 400.0 を出力
- GeoPandas を使用する
- OGR ライブラリを直接使用する
- コードを実行する前に、
django.contrib.gis
アプリがインストールされていることを確認してください。 - 上記のコードは、Django バージョン 5.0 を対象としています。他のバージョンを使用している場合は、API が異なる場合があります。