GDAL APILink to this heading

GDALGeospatial Data Abstraction Library の略であり、GIS データ機能の真の「スイス・アーミーナイフ」とも言える存在です。GDAL のサブセットには、標準フォーマットでのベクトル地理データの読み書きに特化した OGR Simple Features ライブラリがあります。

GeoDjango は、ベクトル空間データの読み込みと座標変換、ラスタ (画像) データに関する GDAL の機能の最小限のサポートを含む、OGR の機能の一部に対する高レベルの Python インタフェースを提供します。

概要Link to this heading

サンプルデータLink to this heading

ここで説明する GDAL/OGR ツールは、地理空間データの読み込みを支援するように設計されています。もしあなたが使い始めたばかりで、まだ自分で使えるデータを持っていないのなら、GeoDjango のテストにはテストに使えるデータセットがたくさん含まれています。以下からダウンロードできます:

Shell
$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/cities/cities.{shp,prj,shx,dbf}
$ wget https://raw.githubusercontent.com/django/django/main/tests/gis_tests/data/rasters/raster.tif

ベクトルデータソースオブジェクトLink to this heading

DataSourceLink to this heading

DataSource は OGR データソースオブジェクトのラッパーであり、OGR がサポートする様々な地理空間ファイルフォーマットやデータソースから一貫したインターフェースを使用してデータを読み込むことをサポートします。各データソースは DataSource オブジェクトで表現され、1つ以上のデータのレイヤーを含みます。各レイヤーは Layer オブジェクトで表現され、いくつかの地理情報フィーチャ (Feature) 、そのレイヤーに含まれるフィーチャ (feture) の種類 (ポイント、ポリゴンなど) に関する情報、およびそのレイヤー内の各フィーチャに関連付けられた追加フィールド (Field) の名前とデータ型を含みます。

class DataSource(ds_input, encoding='utf-8')Link to this definition

データソース DataSource のコンストラクタに必要なパラメータは1つだけです。しかし、OGRはデータベースを含むより複雑なデータソースもサポートしており、パスの代わりに特別な名前文字列を渡すことでアクセスできます。詳細は OGR Vector Formats のドキュメントを参照してください。 DataSource インスタンスの name プロパティは、使用するデータソースのOGR名を指定します。

オプションの encoding パラメータで、ソース中の文字列の非標準エンコードを指定できます。これは、フィールドの値を読み込む際に DjangoUnicodeDecodeError 例外が発生する場合に便利です。

データソース DataSource を作成したら、 layer_count プロパティにアクセスするか、len() 関数を使用することで、データのレイヤー数を知ることができます。データのレイヤー自体へのアクセスについては、次のセクションを参照してください:

Python console
>>> from django.contrib.gis.gdal import DataSource
>>> ds = DataSource("/path/to/your/cities.shp")
>>> ds.name
'/path/to/your/cities.shp'
>>> ds.layer_count  # This file only contains one layer
1
layer_countLink to this definition

データソース内のレイヤーの数を返します。

nameLink to this definition

データソースの名前を返します。

LayerLink to this heading

class LayerLink to this definition

LayerDataSource オブジェクト内のデータ層をラップするためのものです。Layer オブジェクトを直接作成することはありません。代わりに、それらを DataSource オブジェクトから取得します。これは、本質的には Layer オブジェクトの標準的なPythonコンテナです。例えば、インデックスによって特定のレイヤーにアクセスできます (例: 最初のレイヤーにアクセスするには ds[0]) 、または for ループでコンテナ内のすべてのレイヤーをイテレートできます。Layer 自体が幾何学的な特徴のためのコンテナとして機能します。

通常、特定のレイヤー内のすべてのフィーチャは同じジオメトリタイプを持ちます。レイヤーの geom_type プロパティはフィーチャのタイプを識別する OGRGeomType であり、DataSource 内の各レイヤーに関する基本情報を出力するために使用できます。

Python console
>>> for layer in ds:
...     print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name))
...
Layer "cities": 3 Points

上記で読み込まれた都市データソースからの例の出力は、明らかに1つのレイヤーである "cities" を含み、その中に3つのポイント・フィーチャが含まれています。以下の例は簡略化のため、そのレイヤーを変数 layer に保存していると仮定しています:

Python console
>>> layer = ds[0]
nameLink to this definition

データソース内のこのレイヤーの名前を返します。

Python console
>>> layer.name
'cities'
num_featLink to this definition

レイヤー内の要素数を返す。 len(layer) と同じです:

Python console
>>> layer.num_feat
3
geom_typeLink to this definition

レイヤーのジオメトリタイプを OGRGeomType オブジェクトとして返します:

Python console
>>> layer.geom_type.name
'Point'
num_fieldsLink to this definition

レイヤーのフィールド数、つまりレイヤー内の各フィーチャに関連付けられたデータフィールドの数を返します:

Python console
>>> layer.num_fields
4
fieldsLink to this definition

このレイヤーの各フィールド名のリストを返します:

Python console
>>> layer.fields
['Name', 'Population', 'Density', 'Created']

このレイヤーの各フィールドのデータ型のリストを返します。これらは、以下で説明される Field のサブクラスです:

Python console
>>> [ft.__name__ for ft in layer.field_types]
['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
field_widthsLink to this definition

このレイヤーの各フィールドの最大フィールド幅のリストを返します:

Python console
>>> layer.field_widths
[80, 11, 24, 10]
field_precisionsLink to this definition

このレイヤーの各フィールドの数値精度のリストを返します。これは、数値フィールド以外では意味がありません (ゼロに設定されます):

Python console
>>> layer.field_precisions
[0, 0, 15, 0]
extentLink to this definition

このレイヤーの空間範囲を Envelope オブジェクトとして返します。

Python console
>>> layer.extent.tuple
(-104.609252, 29.763374, -95.23506, 38.971823)
srsLink to this definition

このレイヤーに関連付けられた SpatialReference を返すプロパティ:

Python console
>>> print(layer.srs)
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_1984",6378137,298.257223563]],
    PRIMEM["Greenwich",0],
    UNIT["Degree",0.017453292519943295]]

Layer に空間参照情報が関連付けられていない場合、 None が返されます。

spatial_filterLink to this definition

このレイヤーの空間フィルタを取得または設定するために使用できるプロパティ。空間フィルタは OGRGeometry インスタンス、4タプル、または None でのみ設定できます。None 以外で設定された場合、レイヤーをイテレートするときにはフィルタと交差するフィーチャのみが返されます。

Python console
>>> print(layer.spatial_filter)
None
>>> print(len(layer))
3
>>> [feat.get("Name") for feat in layer]
['Pueblo', 'Lawrence', 'Houston']
>>> ks_extent = (-102.051, 36.99, -94.59, 40.00)  # Extent for state of Kansas
>>> layer.spatial_filter = ks_extent
>>> len(layer)
1
>>> [feat.get("Name") for feat in layer]
['Lawrence']
>>> layer.spatial_filter = None
>>> len(layer)
3
get_fields()Link to this definition

レイヤーの各フィーチャについて、指定されたフィールドの値のリストを返すメソッド:

Python console
>>> layer.get_fields("Name")
['Pueblo', 'Lawrence', 'Houston']
get_geoms(geos=False)Link to this definition

レイヤ内の各フィーチャのジオメトリを含むリストを返すメソッドです。オプションの引数 geosTrue に設定されている場合、ジオメトリは GEOSGeometry オブジェクトに変換されます。そうでない場合は、 OGRGeometry オブジェクトとして返されます:

Python console
>>> [pt.tuple for pt in layer.get_geoms()]
[(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]
test_capability(capability)Link to this definition

指定された機能 (文字列) をサポートしているかどうかを示す真偽値を返します。 有効な機能文字列の例には、 'RandomRead', 'SequentialWrite', 'RandomWrite', 'FastSpatialFilter', 'FastFeatureCount', 'FastGetExtent', 'CreateField', 'Transactions', 'DeleteFeature', 'FastSetNextByIndex' などがあります。

FeatureLink to this heading

class FeatureLink to this definition

Feature は OGR の feture をラップします。Feature オブジェクトを直接作成することはありません。代わりに、 Layer オブジェクトからそれらを取得します。各フィーチャにはジオメトリと追加のプロパティを含むフィールドのセットがあります。フィールドのジオメトリは、その geom プロパティを介してアクセスできます。これは OGRGeometry オブジェクトを返します。Feature はフィールドの標準的な Python コンテナのように動作し、そのフィールドを Field オブジェクトとして返します。フィールドはインデックスまたは名前を指定して直接アクセスすることもでき、あるいは for ループ内でフィーチャのフィールドをイテレートすることもできます。

geomLink to this definition

このフィーチャのジオメトリを OGRGeometry オブジェクトとして返します:

Python console
>>> city.geom.tuple
(-104.609252, 38.255001)
getLink to this definition

このフィーチャーのフィールド (名前で指定) の値を返すメソッドで、 Field ラッパーオブジェクト ではありません :

Python console
>>> city.get("Population")
102121
geom_typeLink to this definition

このフィーチャのジオメトリの種類を、 OGRGeomType オブジェクトとして返します。これは同じレイヤー内のすべてのフィーチャに対して同じであり、フィーチャの元となる Layer オブジェクトの Layer.geom_type プロパティと同等です。

num_fieldsLink to this definition

フィーチャに関連付けられたデータフィールドの数を返します。これは、特定のレイヤー内のすべてのフィーチャに対して同じであり、フィーチャが属する Layer オブジェクトの Layer.num_fields プロパティと同等です。

fieldsLink to this definition

フィーチャに関連付けられたデータのフィールド名のリストを返します。これは与えられたレイヤーの全てのフィーチャで同じであり、フィーチャの元となった Layer オブジェクトの Layer.fields プロパティと等価です。

fidLink to this definition

レイヤー内のフィーチャ識別子を返します:

Python console
>>> city.fid
0
layer_nameLink to this definition

そのフィーチャーの Layer の名前を返します。これは指定されたレイヤーの全てのフィーチャに対して同じです:

Python console
>>> city.layer_name
'cities'
indexLink to this definition

与えられたフィールド名のインデックスを返すメソッド。これは、指定されたレイヤーのすべてのフィーチャで同じになります:

Python console
>>> city.index("Population")
1

FieldLink to this heading

class FieldLink to this definition
nameLink to this definition

このフィールドの名前を返します:

Python console
>>> city["Name"].name
'Name'
typeLink to this definition

このフィールドの OGR 型を整数で返します。 FIELD_CLASSES 辞書は、これらの値を Field のサブクラスにマッピングします:

Python console
>>> city["Density"].type
2
type_nameLink to this definition

このフィールドのデータ型の名前を文字列で返します:

Python console
>>> city["Name"].type_name
'String'
valueLink to this definition

このフィールドの値を返します。Field クラス自体は値を文字列として返しますが、各サブクラスは最適な形式で値を返します:

Python console
>>> city["Population"].value
102121
widthLink to this definition

このフィールドの幅を返します:

Python console
>>> city["Name"].width
80
precisionLink to this definition

このフィールドの数値精度を返します。非数値フィールドでは意味がありません (ゼロに設定されます) 。

Python console
>>> city["Density"].precision
15
as_double()Link to this definition

フィールドの値を double (float) で返します:

Python console
>>> city["Density"].as_double()
874.7
as_int()Link to this definition

フィールドの値を整数で返します:

Python console
>>> city["Population"].as_int()
102121
as_string()Link to this definition

フィールドの値を文字列で返します:

Python console
>>> city["Name"].as_string()
'Pueblo'
as_datetime()Link to this definition

フィールドの値を、日付と時刻のタプルで返します:

Python console
>>> city["Created"].as_datetime()
(c_long(1999), c_long(5), c_long(23), c_long(0), c_long(0), c_long(0), c_long(0))

DriverLink to this heading

class Driver(dr_input)Link to this definition

Driver クラスは、OGR DataSource ドライバをラップするために内部で使用されます。

driver_countLink to this definition

現在登録されているOGRベクタードライバーの数を返します。

OGR ジオメトリLink to this heading

OGRGeometryLink to this heading

OGRGeometry オブジェクトは GEOSGeometry オブジェクトと同様の機能を持ち、OGR の内部ジオメトリ表現の薄いラッパーです。そのため、 DataSource を使用する場合、より効率的にデータにアクセスできます。GEOSとは異なり、OGRGeometry は空間参照系 (spatial reference system) と座標変換をサポートしています。

Python console
>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry("POLYGON((0 0, 5 0, 5 5, 0 5))")
class OGRGeometry(geom_input, srs=None)Link to this definition

このオブジェクトは OGR Geometry クラスのラッパーです。このオブジェクトは、与えられた geom_input パラメータから直接インスタンス化されます。このパラメータには、WKT、HEX、GeoJSON、WKB データを含む buffer、または OGRGeomType オブジェクトを含む文字列を指定できます。これらのオブジェクトは Layer (DataSource の一部) からベクトルデータを読み込む際に、 Feature.geom 属性からも返されます。

classmethod from_gml(gml_string)Link to this definition

与えられたGML文字列から OGRGeometry を構築する。

classmethod from_bbox(bbox)Link to this definition

与えられたバウンディングボックス (4要素タプル) から Polygon を構築します。

__len__()Link to this definition

LineString の点の数、Polygon のリングの数、または GeometryCollection のジオメトリの数を返します。他のジオメトリタイプには適用されません。

__iter__()Link to this definition

LineString の点、Polygon のリング、または GeometryCollection のジオメトリをイテレートします。他のジオメトリタイプには適用されません。

__getitem__()Link to this definition

LineString オブジェクトにおける指定されたインデックスのポイント、Polygon オブジェクトにおける指定されたインデックスの内部リング、または GeometryCollection における指定されたインデックスのジオメトリを返します。他のジオメトリタイプには適用されません。

dimensionLink to this definition

ジオメトリの座標次元数を返します。例えば、点なら0、線なら1、その他も同様です。

Python console
>>> polygon.dimension
2
coord_dimLink to this definition

このジオメトリの座標次元を返すか設定します。たとえば、2次元ジオメトリの場合は 2 となります。

geom_countLink to this definition

このジオメトリの要素数を返します:

Python console
>>> polygon.geom_count
1
point_countLink to this definition

このジオメトリを記述するのに使用されたポイントの数を返します:

Python console
>>> polygon.point_count
4
num_pointsLink to this definition

point_count のエイリアス。

num_coordsLink to this definition

point_count のエイリアス。

geom_typeLink to this definition

このジオメトリのタイプを OGRGeomType オブジェクトとして返します。

geom_nameLink to this definition

このジオメトリの型名を返します:

Python console
>>> polygon.geom_name
'POLYGON'
areaLink to this definition

このジオメトリの面積を返すか、面積を含まないジオメトリの場合は0を返します。

Python console
>>> polygon.area
25.0
envelopeLink to this definition

このジオメトリの外接矩形を Envelope オブジェクトとして返します。

extentLink to this definition

このジオメトリの外接矩形を Envelope オブジェクトではなく、4値タプルとして返します。

Python console
>>> point.extent
(0.0, 0.0, 5.0, 5.0)
srsLink to this definition

このプロパティはこのジオメトリの空間参照系を制御します。空間参照系が割り当てられていない場合は None となります。割り当てられている場合、このプロパティにアクセスすると SpatialReference オブジェクトが返されます。このプロパティは別の SpatialReference オブジェクト、または SpatialReference が受け付ける任意の入力で設定できます。以下に例を示します。

Python console
>>> city.geom.srs.name
'GCS_WGS_1984'
sridLink to this definition

このジオメトリの SpatialReference に対応する空間参照系識別子を返すか設定します。このジオメトリに関連付けられている空間参照系情報がない場合、または SRID を決定できない場合は None を返します。

geosLink to this definition

このジオメトリに対応する GEOSGeometry オブジェクトを返します。

gmlLink to this definition

このジオメトリの GML 形式の文字列表現を返します:

Python console
>>> OGRGeometry("POINT(1 2)").gml
'<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'
hexLink to this definition

このジオメトリのHEX WKB形式での文字列表現を返します:

Python console
>>> OGRGeometry("POINT(1 2)").hex
'0101000000000000000000F03F0000000000000040'
jsonLink to this definition

このジオメトリの文字列表現を JSON 形式で返します:

Python console
>>> OGRGeometry("POINT(1 2)").json
'{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'
kmlLink to this definition

このジオメトリを KML 形式の文字列で返します。

wkb_sizeLink to this definition

このジオメトリの WKB 表現を保持するために必要な WKB バッファのサイズを返します:

Python console
>>> OGRGeometry("POINT(1 2)").wkb_size
21
wkbLink to this definition

このジオメトリのWKB表現を含む buffer を返します。

wktLink to this definition

このジオメトリの文字列表現を WKT 形式で返します。

ewktLink to this definition

このジオメトリの EWKT 表現を返します。

clone()Link to this definition

このジオメトリオブジェクトの新しい OGRGeometry クローンを返します。

close_rings()Link to this definition

このジオメトリ内に閉じていないリングがある場合、このルーチンは始点を終点に追加することで閉じます:

Python console
>>> triangle = OGRGeometry("LINEARRING (0 0,0 1,1 0)")
>>> triangle.close_rings()
>>> triangle.wkt
'LINEARRING (0 0,0 1,1 0,0 0)'
transform(coord_trans, clone=False)Link to this definition

このジオメトリを異なる空間参照系に変換します。CoordTransform オブジェクト、SpatialReference オブジェクト、または SpatialReference が受け付けるその他の入力 (空間参照系の WKT や PROJ 文字列、整数の SRID など) を受け付けます。

デフォルトでは何も返されず、ジオメトリはインプレースで変換されます。しかし、 clone キーワードが True に設定されている場合は、このジオメトリの変換されたクローンが返されます。

intersects(other)Link to this definition

このジオメトリがもう一方のジオメトリと交差している場合は True を返し、そうでない場合は False を返します。

equals(other)Link to this definition

このジオメトリがもう一方のジオメトリと等価であれば True を返し、そうでなければ False を返します。

disjoint(other)Link to this definition

このジオメトリがもう一方のジオメトリと空間的に不連続であれば (つまり交差していなければ) True を返し、そうでなければ False を返します。

touches(other)Link to this definition

このジオメトリがもう一方のジオメトリに接している場合は True を返し、接していない場合は False を返します。

crosses(other)Link to this definition

このジオメトリがもう一方のジオメトリと交差している場合は True を返し、交差していない場合は False を返します。

within(other)Link to this definition

このジオメトリがもう一方のジオメトリに含まれる場合は True を返し、そうでない場合は False を返します。

contains(other)Link to this definition

このジオメトリがもう一方のジオメトリを含んでいる場合は True を返し、そうでない場合は False を返します。

overlaps(other)Link to this definition

このジオメトリがもう一方のジオメトリと重なっている場合は True を返し、重なっていない場合は False を返します。

boundary()Link to this definition

このジオメトリの境界を、新しい OGRGeometry オブジェクトとして返します。

convex_hullLink to this definition

このジオメトリを含む最小の凸ポリゴンを、新しい OGRGeometry オブジェクトとして返します。

difference()Link to this definition

このジオメトリともう一方のジオメトリの差分からなる領域を、新しい OGRGeometry オブジェクトとして返します。

intersection()Link to this definition

このジオメトリともう一方のジオメトリの交点からなる領域を、新しい OGRGeometry オブジェクトとして返します。

sym_difference()Link to this definition

このジオメトリともう一方のジオメトリの対称差からなる領域を、新しい OGRGeometry オブジェクトとして返します。

union()Link to this definition

このジオメトリともう一方のジオメトリの和からなる領域を、新しい OGRGeometry オブジェクトとして返します。

tupleLink to this definition

点ジオメトリの座標をタプルとして、線ジオメトリの座標をタプルのタプルとして返す:

Python console
>>> OGRGeometry("POINT (1 2)").tuple
(1.0, 2.0)
>>> OGRGeometry("LINESTRING (1 2,3 4)").tuple
((1.0, 2.0), (3.0, 4.0))
coordsLink to this definition

tuple のエイリアス。

class PointLink to this definition
xLink to this definition

この点のX座標を返します:

Python console
>>> OGRGeometry("POINT (1 2)").x
1.0
yLink to this definition

この点のY座標を返します:

Python console
>>> OGRGeometry("POINT (1 2)").y
2.0
zLink to this definition

この点の Z 座標を返し、点が Z 座標を持たない場合は None を返します:

Python console
>>> OGRGeometry("POINT (1 2 3)").z
3.0
class LineStringLink to this definition
xLink to this definition

この行のX座標のリストを返します:

Python console
>>> OGRGeometry("LINESTRING (1 2,3 4)").x
[1.0, 3.0]
yLink to this definition

この行のY座標のリストを返します:

Python console
>>> OGRGeometry("LINESTRING (1 2,3 4)").y
[2.0, 4.0]
zLink to this definition

このラインの Z 座標のリストを返すか、Z 座標を持たない場合は None を返します:

Python console
>>> OGRGeometry("LINESTRING (1 2 3,4 5 6)").z
[3.0, 6.0]
class PolygonLink to this definition
shellLink to this definition

このポリゴンのシェルまたは外側のリングを LinearRing ジオメトリとして返します。

exterior_ringLink to this definition

shell のエイリアス。

centroidLink to this definition

このポリゴンの重心を表す Point を返します。

class GeometryCollectionLink to this definition
add(geom)Link to this definition

ジオメトリをこのジオメトリ コレクションに追加します。他のジオメトリタイプには適用できません。

OGRGeomTypeLink to this heading

class OGRGeomType(type_input)Link to this definition

このクラスは、OGR ジオメトリタイプをいくつかの方法で表現できます:

Python console
>>> from django.contrib.gis.gdal import OGRGeomType
>>> gt1 = OGRGeomType(3)  # Using an integer for the type
>>> gt2 = OGRGeomType("Polygon")  # Using a string
>>> gt3 = OGRGeomType("POLYGON")  # It's case-insensitive
>>> print(gt1 == 3, gt1 == "Polygon")  # Equivalence works w/non-OGRGeomType objects
True True
nameLink to this definition

OGR Geometry の型の省略文字列形式を返します:

Python console
>>> gt1.name
'Polygon'
numLink to this definition

OGR ジオメトリタイプに対応する数値を返します:

Python console
>>> gt1.num
3
djangoLink to this definition

この OGR 型を格納するために使用する Django フィールド型 (GeometryField のサブクラス) を返し、適切な Django 型がない場合は None を返します:

Python console
>>> gt1.django
'PolygonField'

EnvelopeLink to this heading

class Envelope(*args)Link to this definition

矩形のバウンディングボックスの最小、最大 X、Y 座標を含む OGR Envelope 構造体を表す。変数の名前は OGR Envelope C 構造体と互換性があります。

min_xLink to this definition

X座標の最小値。

min_yLink to this definition

X座標の最大値。

max_xLink to this definition

Y座標の最小値。

max_yLink to this definition

Y座標の最大値。

urLink to this definition

右上座標を表すタプル。

llLink to this definition

左下座標を表すタプル。

tupleLink to this definition

エンベロープを表すタプル。

wktLink to this definition

WKT 形式でこのエンベロープを表すポリゴンを示す文字列。

expand_to_include(*args)Link to this definition

座標系オブジェクトLink to this heading

SpatialReferenceLink to this heading

class SpatialReference(srs_input)Link to this definition

空間参照系 (spatial reference) オブジェクトは与えられた srs_input に基づいて初期化されます。この srs_input には以下のいずれかが指定されることがあります。

  • OGC Well Known Text (WKT) (文字列)

  • EPSG コード (整数または文字列)

  • PROJ 文字列

  • よく知られている標準の略記文字列 ('WGS84', 'WGS72', 'NAD27', 'NAD83')

例:

Python console
>>> wgs84 = SpatialReference("WGS84")  # shorthand string
>>> wgs84 = SpatialReference(4326)  # EPSG code
>>> wgs84 = SpatialReference("EPSG:4326")  # EPSG string
>>> proj = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs "
>>> wgs84 = SpatialReference(proj)  # PROJ string
>>> wgs84 = SpatialReference(
...     """GEOGCS["WGS 84",
... DATUM["WGS_1984",
...      SPHEROID["WGS 84",6378137,298.257223563,
...          AUTHORITY["EPSG","7030"]],
...      AUTHORITY["EPSG","6326"]],
... PRIMEM["Greenwich",0,
...      AUTHORITY["EPSG","8901"]],
... UNIT["degree",0.01745329251994328,
...      AUTHORITY["EPSG","9122"]],
... AUTHORITY["EPSG","4326"]]"""
... )  # OGC WKT
__getitem__(target)Link to this definition

与えられた文字列属性ノードの値を返します。ノードが存在しない場合は None を返します。(target, child) のようなタプルもパラメータとして受け取ることができます。ここで、child は WKT 内の属性のインデックスです。例えば:

Python console
>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]'
>>> srs = SpatialReference(wkt)  # could also use 'WGS84', or 4326
>>> print(srs["GEOGCS"])
WGS 84
>>> print(srs["DATUM"])
WGS_1984
>>> print(srs["AUTHORITY"])
EPSG
>>> print(srs["AUTHORITY", 1])  # The authority value
4326
>>> print(srs["TOWGS84", 4])  # the fourth value in this wkt
0
>>> print(srs["UNIT|AUTHORITY"])  # For the units authority, have to use the pipe symbol.
EPSG
>>> print(srs["UNIT|AUTHORITY", 1])  # The authority value for the units
9122
attr_value(target, index=0)Link to this definition

指定されたターゲットノードの属性値 (例: 'PROJCS')。index キーワードは返す子ノードのインデックスを指定します。

auth_name(target)Link to this definition

指定された文字列の対象ノードに対するオーソリティ名を返します。

auth_code(target)Link to this definition

与えられた文字列の対象ノードのオーソリティコードを返します。

clone()Link to this definition

この空間参照系 (SpatialReference) オブジェクトのクローンを返します。

identify_epsg()Link to this definition

このメソッドは SpatialReference の WKT を検査し、EPSG 識別子が該当する場合は EPSG オーソリティノードを追加します。

from_esri()Link to this definition

この SpatialReference を ESRI のフォーマットから EPSG に変換します。

to_esri()Link to this definition

この SpatialReference を ESRI のフォーマットに変換します。

validate()Link to this definition

与えられた空間参照系が有効かどうかをチェックし、有効でない場合は例外が発生します。

import_epsg(epsg)Link to this definition

EPSGコードから空間参照系をインポートします。

import_proj(proj)Link to this definition

PROJ文字列から空間参照系をインポートします。

import_user_input(user_input)Link to this definition
import_wkt(wkt)Link to this definition

WKT から空間参照系をインポートします。

import_xml(xml)Link to this definition

XML から空間参照系をインポートします。

nameLink to this definition

この空間参照系の名前を返します。

sridLink to this definition

トップレベルのオーソリティの SRID を返すか、未定義の場合は None を返します。

linear_nameLink to this definition

線形単位の名前を返します。

linear_unitsLink to this definition

線形単位の値を返します。

angular_nameLink to this definition

角度の単位の名前を返します。

angular_unitsLink to this definition

角度の単位の値を返します。

unitsLink to this definition

線形単位を返すか角度単位を返すかを自動的に決定し、単位値と単位名の2タプルを返します。

ellipsoidLink to this definition

この空間参照系の楕円体パラメータのタプル (半長軸、半短軸、逆扁平率) を返します。

semi_majorLink to this definition

この空間参照系に対する楕円体の長軸を返します。

semi_minorLink to this definition

この空間参照系における楕円体の短半径を返します。

inverse_flatteningLink to this definition

この空間参照系の楕円体の逆扁平率を返します。

geographicLink to this definition

この空間参照系が地理座標系 (親ノードが GEOGCS) である場合に True を返します。

localLink to this definition

この空間参照系がローカルである場合 (ルートノードが LOCAL_CS である場合) には True を返します。

projectedLink to this definition

この空間参照系が投影座標系である場合 (ルートノードが PROJCS である場合) に True を返します。

wktLink to this definition

この空間参照系の WKT 表現を返します。

pretty_wktLink to this definition

WKT のきれい ("pretty") な表現を返します。

projLink to this definition

この空間参照系の PROJ 表現を返します。

proj4Link to this definition

SpatialReference.proj のエイリアス。

xmlLink to this definition

この空間参照系の XML 表現を返します。

CoordTransformLink to this heading

class CoordTransform(source, target)Link to this definition

座標系の変換を表します。ソースとターゲットの座標系をそれぞれ表す2つの SpatialReference で初期化されます。これらのオブジェクトは、異なるジオメトリに繰り返し同じ座標変換を行う場合に使用するべきです。

Python console
>>> ct = CoordTransform(SpatialReference("WGS84"), SpatialReference("NAD83"))
>>> for feat in layer:
...     geom = feat.geom  # getting clone of feature geometry
...     geom.transform(ct)  # transforming
...

ラスターデータオブジェクトLink to this heading

GDALRasterLink to this heading

GDALRaster は、GDALがサポートする様々な地理空間ファイル形式やデータソースからデータを読み込むための一貫したインターフェースを使用するGDALラスターソースオブジェクトのラッパーです。各データソースは、1つ以上のデータ層である「bands(バンド)」という名前のデータを含む GDALRaster オブジェクトによって表されます。各バンドは、ジオリファレンスされた画像データを含む GDALBand オブジェクトによって表されます。例えば、RGB画像は、赤、緑、青の各色に対応する3つのバンドで表されます。

class GDALRaster(ds_input, write=False)Link to this definition

GDALRaster のコンストラクターは 2 つのパラメーターを受け取ります。最初のパラメーターはラスターのソースを定義し、2 番目のパラメーターはラスターを書き込みモードで開くかどうかを定義します。新しく作成されたラスターに対しては、2 番目のパラメーターは無視され、常に書き込みモードで新しいラスターが作成されます。

最初のパラメータは、3つの形式を取ることができます。ファイルパスを表す文字列あるいは Path オブジェクト (ファイルシステムまたはGDAL仮想ファイルシステム) 、新しいラスタを定義する値が入った辞書、ラスタファイルを表すバイトオブジェクトです。

入力がファイルパスの場合は、そのパスからラスタがオープンされます。入力が辞書の生データの場合、パラメータ widthheightsrid が必要です。入力がバイトオブジェクトの場合、GDALの仮想ファイルシステムを使用してオープンされます。

辞書入力を使用してラスタを作成する方法の詳細については、 データからラスターを作成する を参照してください。仮想ファイルシステム内でラスタを作成する方法の詳細については、 GDALの仮想ファイルシステムを使う を参照してください。

以下の例では、異なる入力ソースからどのようにラスタを作成できるかを示します (GeoDjango のテストのサンプルデータを使います。 サンプルデータ セクションも参照してください) 。

Python console
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster("/path/to/your/raster.tif", write=False)
>>> rst.name
'/path/to/your/raster.tif'
>>> rst.width, rst.height  # This file has 163 x 174 pixels
(163, 174)
>>> rst = GDALRaster(
...     {  # Creates an in-memory raster
...         "srid": 4326,
...         "width": 4,
...         "height": 4,
...         "datatype": 1,
...         "bands": [
...             {
...                 "data": (2, 3),
...                 "offset": (1, 1),
...                 "size": (2, 2),
...                 "shape": (2, 1),
...                 "nodata_value": 5,
...             }
...         ],
...     }
... )
>>> rst.srs.srid
4326
>>> rst.width, rst.height
(4, 4)
>>> rst.bands[0].data()
array([[5, 5, 5, 5],
       [5, 2, 3, 5],
       [5, 2, 3, 5],
       [5, 5, 5, 5]], dtype=uint8)
>>> rst_file = open("/path/to/your/raster.tif", "rb")
>>> rst_bytes = rst_file.read()
>>> rst = GDALRaster(rst_bytes)
>>> rst.is_vsi_based
True
>>> rst.name  # Stored in a random path in the vsimem filesystem.
'/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'
nameLink to this definition

入力ファイルのパスまたはインスタンス化の際に指定された名前に相当するソースの名前。

Python console
>>> GDALRaster({"width": 10, "height": 10, "name": "myraster", "srid": 4326}).name
'myraster'
driverLink to this definition

入力ファイルを処理するために使用されるGDALドライバの名前です。ファイルから作成された GDALRaster では、ドライバタイプが自動的に検出されます。ゼロからラスターを作成する場合、デフォルトではメモリ内のラスター ('MEM') ですが、必要に応じて変更できます。例えば、 GeoTiff ファイルには GTiff を使用します。ファイルタイプの一覧については、 GDAL Raster Formats リストも参照してください。

インメモリのラスタは次の例のように作成できます:

Python console
>>> GDALRaster({"width": 10, "height": 10, "srid": 4326}).driver.name
'MEM'

ファイルベースの GeoTiff ラスターは、次の例のように作成できます:

Python console
>>> import tempfile
>>> rstfile = tempfile.NamedTemporaryFile(suffix=".tif")
>>> rst = GDALRaster(
...     {
...         "driver": "GTiff",
...         "name": rstfile.name,
...         "srid": 4326,
...         "width": 255,
...         "height": 255,
...         "nr_of_bands": 1,
...     }
... )
>>> rst.name
'/tmp/tmp7x9H4J.tif'           # The exact filename will be different on your computer
>>> rst.driver.name
'GTiff'
widthLink to this definition

ピクセル単位のソースの幅(X軸)。

Python console
>>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).width
10
heightLink to this definition

ピクセル単位のソースの高さ(Y軸)。

Python console
>>> GDALRaster({"width": 10, "height": 20, "srid": 4326}).height
20
srsLink to this definition

ラスターの空間参照系を SpatialReference インスタンスとして返します。SRSは他の SpatialReference に設定したり、 SpatialReference コンストラクタが受け付ける任意の入力を与えることで変更できます。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.srs.srid
4326
>>> rst.srs = 3086
>>> rst.srs.srid
3086
sridLink to this definition

ラスタの空間参照システム識別子(SRID)。このプロパティは srs 属性を通してSRIDを取得または設定するためのショートカットです。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.srid
4326
>>> rst.srid = 3086
>>> rst.srid
3086
>>> rst.srs.srid  # This is equivalent
3086
geotransformLink to this definition

以下のリレーションシップを使用して、ピクセル/ライン座標をジオリファレンス空間にマッピングする6つの係数のタプルとして表現されるアフィン変換行列:

Code
Xgeo = GT(0) + Xpixel * GT(1) + Yline * GT(2)
Ygeo = GT(3) + Xpixel * GT(4) + Yline * GT(5)

同じ値は、origin (インデックス 0 と 3)、scale (インデックス 1 と 5)、および skew (インデックス 2 と 4) プロパティにアクセスすることでも取得できます。

デフォルト値は [0.0, 1.0, 0.0, 0.0, 0.0, -1.0] です。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.geotransform
[0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
originLink to this definition

ソースの空間参照システム内で、ラスターの左上原点の座標を、xy のメンバを持つ点オブジェクトとして表します。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.origin
[0.0, 0.0]
>>> rst.origin.x = 1
>>> rst.origin
[1.0, 0.0]
scaleLink to this definition

ラスタのジオリファレンスに使用されるピクセルの幅と高さ。 xy のメンバーを持つポイントオブジェクトとして表されます。詳細については、geotransform を参照してください。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.scale
[1.0, -1.0]
>>> rst.scale.x = 2
>>> rst.scale
[2.0, -1.0]
skewLink to this definition

ラスターを xy のメンバを持つ点オブジェクトとしてジオリファレンスするために使用されるスキュー係数。ノースアップ画像の場合、これらの係数は両方とも 0 です。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.skew
[0.0, 0.0]
>>> rst.skew.x = 3
>>> rst.skew
[3.0, 0.0]
extentLink to this definition

ラスターソースの範囲 (境界値)。ソースの空間参照システムにおける4タプル (xmin, ymin, xmax, ymax) で表されます。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.extent
(0.0, -20.0, 10.0, 0.0)
>>> rst.origin.x = 100
>>> rst.extent
(100.0, -20.0, 110.0, 0.0)
bandsLink to this definition

ソースの全てのバンドを、GDALBand のインスタンスとしてリストアップします。

Python console
>>> rst = GDALRaster(
...     {
...         "width": 1,
...         "height": 2,
...         "srid": 4326,
...         "bands": [{"data": [0, 1]}, {"data": [2, 3]}],
...     }
... )
>>> len(rst.bands)
2
>>> rst.bands[1].data()
array([[ 2.,  3.]], dtype=float32)
warp(ds_input, resampling='NearestNeighbour', max_error=0.0)Link to this definition

このラスターの変形されたバージョンを返します。

変化系パラメータは ds_input 引数で指定することができる。 ds_input の使用方法はクラスコンストラクタの対応する引数と同様です。 ds_input はターゲットとなるラスターの特性を辞書に格納したものです。指定できる辞書のキーは width, height, SRID, origin, scale, skew, datatype, driver, name (filename) です。

デフォルトでは、warp 関数はほとんどのパラメータを元のソースラスタの値と等しく保ちます。したがって、変更する必要のあるパラメータのみを指定すればよいです。ただし、これにはドライバも含まれるので、ファイルベースのラスタの場合、warp 関数は新しいラスタをディスク上に作成します。

ソースラスタと異なるパラメータは名前のみです。ラスタ名のデフォルト値は、ソースラスタの名前に '_copy' + source_driver_name を追加したものです。ファイルベースのラスタの場合は、ターゲットとなるラスタのファイルパスを指定することを推奨します。

変形に使用するリサンプリングアルゴリズムは resampling 引数で指定します。デフォルトは NearestNeighbor で、他に指定できる値は BilinearCubicCubicSplineLanczosAverageMode です。

max_error 引数は、変換の近似において許容される入力ピクセルでの最大誤差を指定するために使用できます。デフォルト値は正確な計算のために 0.0 です。

GDAL に詳しいユーザーにとって、この関数は gdalwarp コマンドラインユーティリティと同様の機能を持っています。

たとえば、warp 関数は、ラスターを元のピクセルスケールの2倍に集約するために使用できます:

Python console
>>> rst = GDALRaster(
...     {
...         "width": 6,
...         "height": 6,
...         "srid": 3086,
...         "origin": [500000, 400000],
...         "scale": [100, -100],
...         "bands": [{"data": range(36), "nodata_value": 99}],
...     }
... )
>>> target = rst.warp({"scale": [200, -200], "width": 3, "height": 3})
>>> target.bands[0].data()
array([[  7.,   9.,  11.],
       [ 19.,  21.,  23.],
       [ 31.,  33.,  35.]], dtype=float32)
transform(srs, driver=None, name=None, resampling='NearestNeighbour', max_error=0.0)Link to this definition

このラスタを異なる空間参照システム (srs) に変換します。これは SpatialReference オブジェクトであり、または SpatialReference で受け入れられる他の入力 (空間参照 WKT や PROJ 文字列、整数の SRID を含む) でも構いません。

新しい空間参照系で現在のラスタの境界とスケールを計算し、 warp 関数を使用してラスタを変形します。

デフォルトでは、コピー元のラスタのドライバが使用され、ラスタ名はコピー元の名前に '_copy' + source_driver_name を追加したものになります。異なるドライバや名前を指定するには、driver および name 引数を使用します。

デフォルトのリサンプリングアルゴリズムは NearestNeighbour ですが、 resampling 引数を使用して変更できます。デフォルトのリサンプリングに許容される最大誤差は0.0であり、 max_error 引数を使用して変更できます。これらの引数の詳細については、 warp のドキュメントを参照してください。

Python console
>>> rst = GDALRaster(
...     {
...         "width": 6,
...         "height": 6,
...         "srid": 3086,
...         "origin": [500000, 400000],
...         "scale": [100, -100],
...         "bands": [{"data": range(36), "nodata_value": 99}],
...     }
... )
>>> target_srs = SpatialReference(4326)
>>> target = rst.transform(target_srs)
>>> target.origin
[-82.98492744885776, 27.601924753080144]
infoLink to this definition

ラスターの概要を含む文字列を返します。これは gdalinfo コマンドラインユーティリティに相当します。

metadataLink to this definition

このラスタのメタデータ。ネストした辞書として表現されます。第1レベルのキーはメタデータ・ドメインです。第2レベルには、各ドメインのメタデータ項目名と値が含まれます。

メタデータ項目を設定または更新するには、上記の入れ子構造を使用して、対応するメタデータ項目をメソッドに渡します。指定された辞書にあるキーのみが更新され、メタデータの残りの部分は変更されません。

メタデータ項目を削除するには、メタデータの値として None を使用します。

Python console
>>> rst = GDALRaster({"width": 10, "height": 20, "srid": 4326})
>>> rst.metadata
{}
>>> rst.metadata = {"DEFAULT": {"OWNER": "Django", "VERSION": "1.0"}}
>>> rst.metadata
{'DEFAULT': {'OWNER': 'Django', 'VERSION': '1.0'}}
>>> rst.metadata = {"DEFAULT": {"OWNER": None, "VERSION": "2.0"}}
>>> rst.metadata
{'DEFAULT': {'VERSION': '2.0'}}
vsi_bufferLink to this definition

このラスタの bytes 表現。GDAL の仮想ファイルシステムに保存されていないラスタの場合は None を返します。

is_vsi_basedLink to this definition

このラスターがGDALの仮想ファイルシステムに保存されているかどうかを示す真偽値。

GDALBandLink to this heading

class GDALBandLink to this definition

GDALBand のインスタンスは明示的に作成されるのではなく、代わりに GDALRaster オブジェクトから、その bands 属性を介して取得されます。 GDALBand にはラスターの実際のピクセル値が含まれています。

descriptionLink to this definition

バンドの名前または説明 (あれば) 。

widthLink to this definition

ピクセル単位でのバンドの幅 (X軸)。

heightLink to this definition

ピクセル単位のバンドの高さ (Y軸)。

pixel_countLink to this definition

このバンドに含まれるピクセルの総数。これは width * height に等しいです。

statistics(refresh=False, approximate=False)Link to this definition

このバンドのピクセル値の統計量を計算します。戻り値は (minimum, maximum, mean, standard deviation) という構造を持つタプルです。

もし approximate 引数が True に設定されている場合、統計はオーバービューまたは画像タイルのサブセットに基づいて計算されます。

refresh 引数を True に設定すると、統計情報はデータから直接計算され、その結果でキャッシュが更新されます。

永続的なキャッシュ値が見つかった場合、その値が返されます。永続的補助メタデータ (PAM) サービスを使用するラスターフォーマットの場合、統計情報は補助ファイルにキャッシュされる可能性があります。場合によっては、このメタデータがピクセル値と同期していなかったり、 approximate 引数の値を反映しない以前の呼び出しの値が返されたりすることがあります。そのような場合は、 refresh 引数を使用して更新された値を取得し、キャッシュに保存します。

空のバンド (すべてのピクセル値が "no data "である) の場合、すべての統計は None として返されます。

統計情報は、minmaxmean、および std プロパティにアクセスすることで直接取得することもできます。

minLink to this definition

バンドの最小ピクセル値 ("no data" 値を除く) 。

maxLink to this definition

バンドの最大ピクセル値 ("no data" 値を除く) 。

meanLink to this definition

バンドのすべてのピクセル値の平均 ("no data"値を除く) 。

stdLink to this definition

バンドのすべてのピクセル値の標準偏差 ("no data" の値を除く)。

nodata_valueLink to this definition

バンドの "no data" 値は通常、有効なデータではないピクセルを示す特別なマーカー値です。これらのピクセルは一般的に表示されるべきではなく、分析操作にも寄与すべきではありません。

既存の "no data" 値を削除するには、このプロパティを None に設定します。

datatype(as_string=False)Link to this definition

バンドに含まれるデータ型。0 (Unknown) から 14 までの整数定数。 as_stringTrue の場合、データ型は文字列として返されます。指定可能な値については、 datatype の値テーブル の "GDAL ピクセルタイプ" カラムを参照してください。

color_interp(as_string=False)Link to this definition

0 から 16 までの整数値。 as_stringTrue の場合、データ型は文字列として返されます: GCI_Undefined, GCI_GrayIndex, GCI_PaletteIndex, GCI_RedBand, GCI_GreenBand, GCI_BlueBand, GCI_AlphaBand, GCI_HueBand, GCI_SaturationBand, GCI_LightnessBand, GCI_CyanBand, GCI_MagentaBand, GCI_YellowBand, GCI_BlackBand, GCI_YCbCr_YBand, GCI_YCbCr_CbBand, GCI_YCbCr_CrBandGCI_YCbCr_CrBandGCI_Max も表します。どちらも 16 の整数に対応しますが、文字列として返されるのは GCI_YCbCr_CrBand だけです。

data(data=None, offset=None, size=None, shape=None)Link to this definition

GDALBand のピクセル値へのアクセサ。パラメータを指定しない場合は完全なデータ配列を返す。オフセットとブロックサイズをタプルで指定することで、ピクセル配列のサブセットをリクエストできます。

NumPyが利用可能な場合、データはNumPy配列として返されます。パフォーマンス上の理由から、NumPyの利用を強くお勧めします。

data パラメータが指定された場合、データは GDALBand に書き込まれます。入力には、パックされた文字列、バッファ、リスト、配列、NumPyの配列のいずれかを指定できます。入力に含まれるアイテムの数は、通常、バンド内の全ピクセル数に対応するか、 offsetsize パラメータが指定されている場合は、ピクセル値の特定のブロックのピクセル数に対応します。

入力のアイテム数がターゲットピクセルブロックと異なる場合は、 shape パラメータを指定する必要があります。shapeは入力データの幅と高さをピクセル単位で指定するタプルです。その後、選択されたブロックのピクセル値を更新するためにデータが複製されます。これは、たとえば1つの値でバンド全体を塗りつぶすのに便利です。

例:

Python console
>>> rst = GDALRaster(
...     {"width": 4, "height": 4, "srid": 4326, "datatype": 1, "nr_of_bands": 1}
... )
>>> bnd = rst.bands[0]
>>> bnd.data(range(16))
>>> bnd.data()
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]], dtype=int8)
>>> bnd.data(offset=(1, 1), size=(2, 2))
array([[ 5,  6],
       [ 9, 10]], dtype=int8)
>>> bnd.data(data=[-1, -2, -3, -4], offset=(1, 1), size=(2, 2))
>>> bnd.data()
array([[ 0,  1,  2,  3],
       [ 4, -1, -2,  7],
       [ 8, -3, -4, 11],
       [12, 13, 14, 15]], dtype=int8)
>>> bnd.data(data="\x9d\xa8\xb3\xbe", offset=(1, 1), size=(2, 2))
>>> bnd.data()
array([[  0,   1,   2,   3],
       [  4, -99, -88,   7],
       [  8, -77, -66,  11],
       [ 12,  13,  14,  15]], dtype=int8)
>>> bnd.data([1], shape=(1, 1))
>>> bnd.data()
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]], dtype=uint8)
>>> bnd.data(range(4), shape=(1, 4))
array([[0, 0, 0, 0],
       [1, 1, 1, 1],
       [2, 2, 2, 2],
       [3, 3, 3, 3]], dtype=uint8)
metadataLink to this definition

このバンドのメタデータ。機能は GDALRaster.metadata と同じです。

データからラスターを作成するLink to this heading

このセクションでは、ds_input パラメータを使用してゼロからラスタを作成する方法について説明します。

GDALRaster コンストラクタに dict を渡すことで新しいラスタが作成されます。この辞書には、新しいラスタの定義パラメータ (原点、サイズ、空間参照システムなど) が含まれています。さらに、辞書にはピクセルデータや新しいラスタのフォーマットに関する情報も含めることができます。したがって、作成されるラスタは指定したドライバに応じてファイルベースまたはメモリベースとなります。

ラスターデータを辞書や JSON で記述する標準はありません。そのため、 GDALRaster クラスへの辞書入力の定義は Django 固有のものです。これは geojson フォーマットに触発されたものですが、 geojson 標準は今のところベクタフォーマットに限定されています。

GDALRasterGDALBand クラスの対応する属性とメソッドのドキュメントに、ラスタを作成する際に異なるキーを使用する例があります。

ds_input 辞書Link to this heading

ds_input 辞書内でラスターを作成するために必要なキーはわずかで、 widthheight、および srid です。その他のパラメータにはデフォルト値が設定されています(以下の表を参照)。 ds_input 辞書に渡せるキーのリストは、GDALRaster プロパティに密接に関連していますが、完全には一致していません。多くのパラメータはこれらのプロパティに直接マッピングされており、その他のパラメータについては以下で説明します。

以下の表は、ds_input 辞書に設定できるすべてのキーを説明しています。

キー

デフォルト値

使い方

srid

必須

srid 属性にマッピングされます。

width

必須

width 属性にマッピングされます。

height

必須

height 属性にマッピングされます。

driver

MEM

driver 属性にマッピングされます。

name

''

下記参照

origin

0

origin 属性にマッピングされます。

scale

0

scale 属性にマッピングされます。

skew

0

width 属性にマッピングされます。

bands

[]

下記参照

nr_of_bands

0

下記参照

datatype

6

下記参照

papsz_options

{}

下記参照

name

ラスタの名前を表す文字列。ファイルベースのラスタを作成する場合、このパラメータは新しいラスタのファイルパスでなければなりません。名前が /vsimem/ で始まる場合、ラスタはGDALの仮想ファイルシステムに作成されます。

datatype

全バンドのデータ型を表す整数です。デフォルトは 6 (Float32) です。新しいラスターの全てのバンドは同じデータ型である必要があります。値のマッピングは以下の通りです:

GDAL ピクセルタイプ

説明

1

GDT_Byte

8 ビット符号なし整数

2

GDT_UInt16

16 ビット符号なし整数

3

GDT_Int16

16ビット符号付き整数

4

GDT_UInt32

32ビット符号なし整数

5

GDT_Int32

32ビット符号付き整数

6

GDT_Float32

32ビット浮動小数点

7

GDT_Float64

64ビット浮動小数点

12

GDT_UInt64

64ビット符号なし整数 (GDAL 3.5+)

13

GDT_Int64

64ビット符号付き整数 (GDAL 3.5+)

14

GDT_Int8

8ビット符号付き整数 (GDAL 3.7+)

nr_of_bands

ラスターのバンド数を表す整数。作成時にバンドデータを渡さずにラスタを作成することもできます。バンド数が指定されていない場合は、入力 bands の長さから自動的に計算されます。作成後にバンド数を変更することはできません。

bands

バンド入力データを持つ band_input 辞書のリスト。結果のバンドインデックスは、提供されたリストと同じです。バンド入力辞書の定義は以下に示します。バンドデータが提供されない場合、ラスターバンドの値はゼロの配列としてインスタンス化され、"no data" の値は None に設定されます。

papsz_options

ラスターを作成するためのオプションを持つ辞書。入力辞書のキーと値のペアは、ラスターの作成時にドライバーに渡されます。

利用可能なオプションは、ドライバごとのドキュメントに記載されています。

辞書内の値は大文字と小文字を区別しないため、作成時に適切な文字列形式に自動変換されます。

以下の例では、GTiff driver で利用可能なオプションのいくつかを使用しています。結果は、内部タイルスキームを持つ圧縮されたラスターです。内部タイルのブロックサイズは23×23です:

Python console
>>> GDALRaster(
...     {
...         "driver": "GTiff",
...         "name": "/path/to/new/file.tif",
...         "srid": 4326,
...         "width": 255,
...         "height": 255,
...         "nr_of_bands": 1,
...         "papsz_options": {
...             "compress": "packbits",
...             "tiled": "yes",
...             "blockxsize": 23,
...             "blockysize": 23,
...         },
...     }
... )

band_input 辞書Link to this heading

ds_input 辞書内の bands キーは band_input 辞書のリストです。各 band_input 辞書には、新しいラスタのバンドに設定されるピクセル値と "no data" 値が含まれている可能性があります。データ配列は新しいラスタの全サイズを持つことも、より小さくなることもあります。新しいラスタより小さい配列の場合、sizeshape、および offset キーがピクセル値を制御します。これらの対応するキーは、data() メソッドに渡されます。これらの機能は、そのメソッドでバンドデータを設定するのと同じです。以下の表は使用可能なキーを説明しています。

キー

デフォルト値

使い方

nodata_value

None

nodata_value 属性にマッピングされます。

data

nodata_value と同様または 0

data() メソッドに渡されます

size

ラスターの (width, height)

data() メソッドに渡されます

shape

size と同じ

data() メソッドに渡されます

offset

(0, 0)

data() メソッドに渡されます

GDALの仮想ファイルシステムを使うLink to this heading

GDALはファイルシステムに保存されたファイルにアクセスするだけでなく、圧縮、暗号化、またはリモートファイルなど他の種類のファイルにアクセスを抽象化するための仮想ファイルシステムもサポートしています。

メモリベースの仮想ファイルシステムを使用するLink to this heading

GDALには、メモリをファイルとして扱う内部メモリベースのファイルシステムがあります。これを使用して、 GDALRaster オブジェクトをバイナリファイルバッファーに読み込んだり書き込んだりすることができます。

これは、ラスターがリモートストレージからバッファとして取得されたり、ディスクに書き込まれることなくビューから返されたりするようなWebコンテキストで便利です。

bytes オブジェクトが入力として提供されるか、ファイルパスが /vsimem/ で始まる場合、仮想ファイルシステム内に GDALRaster オブジェクトが作成されます。

入力は、ファイルの bytes としての完全なバイナリ表現である必要があります。例えば、:

Python console
# Read a raster as a file object from a remote source.
>>> from urllib.request import urlopen
>>> dat = urlopen("http://example.com/raster.tif").read()
# Instantiate a raster from the bytes object.
>>> rst = GDALRaster(dat)
# The name starts with /vsimem/, indicating that the raster lives in the
# virtual filesystem.
>>> rst.name
'/vsimem/da300bdb-129d-49a8-b336-e410a9428dad'

新しい仮想ファイルベースのラスタをゼロから作成するには、 ds_input 辞書表現を使用し、 /vsimem/ で始まる name 引数を指定します (辞書表現の詳細については、 データからラスターを作成する を参照してください) 。仮想ファイルベースのラスタの場合、 vsi_buffer 属性はラスタの bytes 表現を返します。

ここでは、ラスタを作成して HttpResponse にファイルとして返す方法を紹介します:

Python console
>>> from django.http import HttpResponse
>>> rst = GDALRaster(
...     {
...         "name": "/vsimem/temporarymemfile",
...         "driver": "tif",
...         "width": 6,
...         "height": 6,
...         "srid": 3086,
...         "origin": [500000, 400000],
...         "scale": [100, -100],
...         "bands": [{"data": range(36), "nodata_value": 99}],
...     }
... )
>>> HttpResponse(rast.vsi_buffer, "image/tiff")

他の仮想ファイルシステムの使用Link to this heading

GDAL のローカルビルドによっては、他の仮想ファイルシステムもサポートされているかもしれません。提供されたパスの先頭に適切な /vsi*/ 接頭辞を付けることで使用できます。詳細は GDAL Virtual Filesystems documentation を参照してください。

圧縮されたラスタLink to this heading

ファイルを解凍して結果のラスタをインスタンス化する代わりに、GDAL は /vsizip/, /vsigzip/, /vsitar/ 仮想ファイルシステムを使用して圧縮ファイルに直接アクセスできます:

Python console
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster("/vsizip/path/to/your/file.zip/path/to/raster.tif")
>>> rst = GDALRaster("/vsigzip/path/to/your/file.gz")
>>> rst = GDALRaster("/vsitar/path/to/your/file.tar/path/to/raster.tif")
ネットワーク ラスタLink to this heading

GDALは、それらの機能がビルトインされている限り、オンラインリソースとストレージプロバイダを透過的にサポートできます。

認証なしで公開されたラスターファイルにアクセスするには、/vsicurl/ を使用できます。

Python console
>>> from django.contrib.gis.gdal import GDALRaster
>>> rst = GDALRaster("/vsicurl/https://example.com/raster.tif")
>>> rst.name
'/vsicurl/https://example.com/raster.tif'

商用のストレージプロバイダ (/vsis3/ など) の場合、認証やその他の設定を事前に行っておく必要があります (利用可能なオプションについては GDAL Virtual Filesystems documentation を参照してください) 。

設定Link to this heading

GDAL_LIBRARY_PATHLink to this heading

GDALライブラリの場所を指定する文字列。通常、この設定はGDALライブラリが標準以外の場所にある場合にのみ使用されます (例えば /home/john/lib/libgdal.so など) 。

例外Link to this heading

exception GDALExceptionLink to this definition

GDAL に関連するエラーを示す基本的な GDAL 例外。

exception SRSExceptionLink to this definition

空間参照システムオブジェクトの構築時または使用時にエラーが発生した場合に発生する例外。