GDAL API —Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/contrib/gis/gdal
移動先:案内検索

GDAL API

GDAL は、 Geospatial Data Abstraction Library の略で、GISデータ機能の真の「スイスアーミーナイフ」です。 GDALのサブセットは、 OGR Simple Features Libraryであり、さまざまな標準形式でのベクター地理データの読み取りと書き込みを専門としています。

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

ノート

モジュールの名前はgdalですが、現時点では、GeoDjangoはOGRおよびGDALのラスター機能の一部の機能のみをサポートしています。


概要

サンプルデータ

ここで説明するGDAL / OGRツールは、地理空間データの読み取りに役立つように設計されています。これらのツールのほとんどを使用するには、使用するデータが必要です。 始めたばかりで、使用する独自のデータがまだない場合、GeoDjangoテストには、テストに使用できる多数のデータセットが含まれています。 ここからダウンロードできます:

$ 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

ベクトルデータソースオブジェクト

DataSource

DataSource は、一貫性のあるインターフェイスを使用して、OGRがサポートするさまざまな地理空間ファイル形式およびデータソースからのデータの読み取りをサポートするOGRデータソースオブジェクトのラッパーです。 各データソースは、1つ以上のデータレイヤーを含む DataSource オブジェクトで表されます。 Layer オブジェクトで表される各レイヤーには、いくつかの地理的特徴( Feature )、そのレイヤーに含まれる特徴のタイプに関する情報(例: ポイント、ポリゴンなど)、およびそのレイヤーの各フィーチャに関連付けられる可能性のあるデータの追加フィールド(フィールド)の名前とタイプ。

class DataSource(ds_input, encoding='utf-8')

DataSourceのコンストラクターには、読み取りたいファイルのパスという1つのパラメーターのみが必要です。 ただし、OGRは、パスの代わりに特別な名前の文字列を渡すことでアクセスできる、データベースなど、さまざまなより複雑なデータソースもサポートしています。 詳細については、 OGR Vector Formats のドキュメントを参照してください。 DataSourceインスタンスの name プロパティは、使用している基になるデータソースのOGR名を示します。

オプションのencodingパラメーターを使用すると、ソース内の文字列の非標準エンコーディングを指定できます。 これは通常、フィールド値の読み取り中にDjangoUnicodeDecodeError例外を取得する場合に役立ちます。

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

>>> 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_count

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

name

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

バージョン3.2で変更: pathlib.Path ds_inputのサポートが追加されました。


Layer

class Layer

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

通常、特定のレイヤーのすべてのフィーチャは同じジオメトリタイプを持っています。 レイヤーの geom_type プロパティは、フィーチャタイプを識別する OGRGeomType です。 これを使用して、 DataSource の各レイヤーに関するいくつかの基本情報を印刷できます。

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

出力例は、上にロードされた都市データソースからのものであり、明らかに"cities"と呼ばれる1つのレイヤーが含まれており、3つのポイントフィーチャが含まれています。 簡単にするために、以下の例では、そのレイヤーを変数layerに格納していることを前提としています。

>>> layer = ds[0]
name

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

>>> layer.name
'cities'
num_feat

レイヤー内のフィーチャの数を返します。 len(layer)と同じ:

>>> layer.num_feat
3
geom_type

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

>>> layer.geom_type.name
'Point'
num_fields

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

>>> layer.num_fields
4
fields

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

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

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

>>> [ft.__name__ for ft in layer.field_types]
['OFTString', 'OFTReal', 'OFTReal', 'OFTDate']
field_widths

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

>>> layer.field_widths
[80, 11, 24, 10]
field_precisions

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

>>> layer.field_precisions
[0, 0, 15, 0]
extent

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

>>> layer.extent.tuple
(-104.609252, 29.763374, -95.23506, 38.971823)
srs

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

>>> 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_filter

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

>>> 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()

レイヤー内の各機能の特定のフィールドの値のリストを返すメソッド:

>>> layer.get_fields('Name')
['Pueblo', 'Lawrence', 'Houston']
get_geoms(geos=False)

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

>>> [pt.tuple for pt in layer.get_geoms()]
[(-104.609252, 38.255001), (-95.23506, 38.971823), (-95.363151, 29.763374)]
test_capability(capability)

このレイヤーが指定された機能(文字列)をサポートするかどうかを示すブール値を返します。 有効な機能文字列の例には、'RandomRead''SequentialWrite''RandomWrite''FastSpatialFilter''FastFeatureCount''FastGetExtent'、[ X112X] 、'Transactions''DeleteFeature'、および'FastSetNextByIndex'


Feature

class Feature

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

geom

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

>>> city.geom.tuple
(-104.609252, 38.255001)
get

この機能の指定されたフィールド(名前で指定)の値を返すメソッド。ではなく Fieldラッパーオブジェクト:

>>> city.get('Population')
102121
geom_type

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

num_fields

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

fields

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

fid

レイヤー内の機能識別子を返します。

>>> city.fid
0
layer_name

機能の元となったレイヤーの名前を返します。 これは、特定のレイヤーのすべての機能で同じになります。

>>> city.layer_name
'cities'
index

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

>>> city.index('Population')
1


Field

class Field
name

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

>>> city['Name'].name
'Name'
type

このフィールドのOGRタイプを整数として返します。 FIELD_CLASSESディクショナリは、これらの値をFieldのサブクラスにマップします。

>>> city['Density'].type
2
type_name

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

>>> city['Name'].type_name
'String'
value

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

>>> city['Population'].value
102121
width

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

>>> city['Name'].width
80
precision

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

>>> city['Density'].precision
15
as_double()

フィールドの値をdouble(浮動小数点)として返します。

>>> city['Density'].as_double()
874.7
as_int()

フィールドの値を整数として返します。

>>> city['Population'].as_int()
102121
as_string()

フィールドの値を文字列として返します。

>>> city['Name'].as_string()
'Pueblo'
as_datetime()

フィールドの値を日付と時刻のコンポーネントのタプルとして返します。

>>> 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))


Driver

class Driver(dr_input)

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

driver_count

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


OGRジオメトリ

OGRGeometry

OGRGeometry オブジェクトは、 GEOSGeometry オブジェクトと同様の機能を共有し、OGRの内部ジオメトリ表現の薄いラッパーです。 したがって、 DataSource を使用すると、データへのより効率的なアクセスが可能になります。 対応するGEOSとは異なり、 OGRGeometry は、空間参照系と座標変換をサポートしています。

>>> from django.contrib.gis.gdal import OGRGeometry
>>> polygon = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5))')
class OGRGeometry(geom_input, srs=None)

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

classmethod from_gml(gml_string)

指定されたGML文字列から OGRGeometry を構築します。

classmethod from_bbox(bbox)

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

__len__()

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

__iter__()

LineString のポイント、 Polygon のリング、または GeometryCollection のジオメトリを反復処理します。 他のジオメトリタイプには適用されません。

__getitem__()

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

dimension

ジオメトリの調整された次元の数を返します。 ポイントの場合は0、ラインの場合は1など。

>> polygon.dimension
2
coord_dim

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

geom_count

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

>>> polygon.geom_count
1
point_count

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

>>> polygon.point_count
4
num_points

point_count のエイリアス。

num_coords

point_count のエイリアス。

geom_type

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

geom_name

このジオメトリのタイプの名前を返します。

>>> polygon.geom_name
'POLYGON'
area

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

>>> polygon.area
25.0
envelope

このジオメトリのエンベロープを Envelope オブジェクトとして返します。

extent

このジオメトリのエンベロープを、 Envelope オブジェクトとしてではなく、4タプルとして返します。

>>> point.extent
(0.0, 0.0, 5.0, 5.0)
srs

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

>>> city.geom.srs.name
'GCS_WGS_1984'
srid

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

geos

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

gml

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

>>> OGRGeometry('POINT(1 2)').gml
'<gml:Point><gml:coordinates>1,2</gml:coordinates></gml:Point>'
hex

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

>>> OGRGeometry('POINT(1 2)').hex
'0101000000000000000000F03F0000000000000040'
json

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

>>> OGRGeometry('POINT(1 2)').json
'{ "type": "Point", "coordinates": [ 1.000000, 2.000000 ] }'
kml

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

wkb_size

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

>>> OGRGeometry('POINT(1 2)').wkb_size
21
wkb

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

wkt

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

ewkt

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

clone()

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

close_rings()

このジオメトリ内に閉じられていないリングがある場合、このルーチンは開始点を最後に追加することによって閉じます。

>>> 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)

このジオメトリを別の空間参照系に変換します。 CoordTransform オブジェクト、 SpatialReference オブジェクト、または SpatialReference によって受け入れられるその他の入力(空間参照WKTおよびPROJ文字列、または整数SRIDを含む)を受け取ることができます。

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

intersects(other)

このジオメトリが他のジオメトリと交差する場合はTrueを返し、それ以外の場合はFalseを返します。

equals(other)

このジオメトリが他のジオメトリと同等の場合はTrueを返し、それ以外の場合はFalseを返します。

disjoint(other)

このジオメトリが空間的に互いに素である場合(つまり、Trueを返します) 交差しません)他の場合、それ以外の場合はFalseを返します。

touches(other)

このジオメトリが他のジオメトリに接触している場合はTrueを返し、そうでない場合はFalseを返します。

crosses(other)

このジオメトリが他のジオメトリと交差する場合はTrueを返し、それ以外の場合はFalseを返します。

within(other)

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

contains(other)

このジオメトリに他のジオメトリが含まれている場合はTrueを返し、それ以外の場合はFalseを返します。

overlaps(other)

このジオメトリが他のジオメトリと重なる場合はTrueを返し、そうでない場合はFalseを返します。

boundary()

新しい OGRGeometry オブジェクトとしてのこのジオメトリの境界。

convex_hull

新しい OGRGeometry オブジェクトとして、このジオメトリを含む最小の凸多角形。

difference()

このジオメトリと他のジオメトリの違いで構成される領域を、新しい OGRGeometry オブジェクトとして返します。

intersection()

このジオメトリと他のジオメトリの交点で構成される領域を、新しい OGRGeometry オブジェクトとして返します。

sym_difference()

このジオメトリと他のジオメトリの対称差で構成される領域を、新しい OGRGeometry オブジェクトとして返します。

union()

このジオメトリと他のジオメトリの和集合で構成される領域を、新しい OGRGeometry オブジェクトとして返します。

tuple

ポイントジオメトリの座標をタプルとして返し、ラインジオメトリの座標をタプルのタプルとして返します。

>>> OGRGeometry('POINT (1 2)').tuple
(1.0, 2.0)
>>> OGRGeometry('LINESTRING (1 2,3 4)').tuple
((1.0, 2.0), (3.0, 4.0))
coords

タプルのエイリアス。

class Point
x

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

>>> OGRGeometry('POINT (1 2)').x
1.0
y

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

>>> OGRGeometry('POINT (1 2)').y
2.0
z

このポイントのZ座標を返します。ポイントにZ座標がない場合は、Noneを返します。

>>> OGRGeometry('POINT (1 2 3)').z
3.0
class LineString
x

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

>>> OGRGeometry('LINESTRING (1 2,3 4)').x
[1.0, 3.0]
y

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

>>> OGRGeometry('LINESTRING (1 2,3 4)').y
[2.0, 4.0]
z

この行のZ座標のリストを返します。行にZ座標がない場合は、Noneを返します。

>>> OGRGeometry('LINESTRING (1 2 3,4 5 6)').z
[3.0, 6.0]
class Polygon
shell

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

exterior_ring

shell のエイリアス。

centroid

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

class GeometryCollection
add(geom)

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


OGRGeomType

class OGRGeomType(type_input)

このクラスでは、次のいずれかの方法でOGRジオメトリタイプを表現できます。

>>> 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
name

OGRジオメトリタイプの短縮文字列形式を返します。

>>> gt1.name
'Polygon'
num

OGRジオメトリタイプに対応する番号を返します。

>>> gt1.num
3
django

このOGRタイプの保存に使用するDjangoフィールドタイプ(GeometryFieldのサブクラス)を返します。適切なDjangoタイプがない場合はNoneを返します。

>>> gt1.django
'PolygonField'


Envelope

class Envelope(*args)

長方形の境界ボックスの最小および最大のX、Y座標を含むOGRエンベロープ構造を表します。 変数の名前は、OGRエンベロープC構造体と互換性があります。

min_x

最小X座標の値。

min_y

最大X座標の値。

max_x

最小Y座標の値。

max_y

最大Y座標の値。

ur

タプルとしての右上の座標。

ll

タプルとしての左下の座標。

tuple

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

wkt

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

expand_to_include(*args)


座標系オブジェクト

SpatialReference

class SpatialReference(srs_input)

空間参照オブジェクトは、指定されたsrs_inputで初期化されます。これは、次のいずれかになります。

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

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

  • PROJ文字列

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

例:

>>> 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)

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

>>> 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)

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

auth_name(target)

指定された文字列ターゲットノードの権限名を返します。

auth_code(target)

指定された文字列ターゲットノードの権限コードを返します。

clone()

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

identify_epsg()

このメソッドは、このSpatialReferenceのWKTを検査し、EPSG識別子が適用可能なEPSG権限ノードを追加します。

from_esri()

このSpatialReferenceをESRIの形式からEPSGにモーフィングします

to_esri()

このSpatialReferenceをESRIの形式にモーフィングします。

validate()

指定された空間参照が有効かどうかを確認します。有効でない場合は、例外が発生します。

import_epsg(epsg)

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

import_proj(proj)

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

import_user_input(user_input)
import_wkt(wkt)

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

import_xml(xml)

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

name

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

srid

トップレベルの権限のSRIDを返します。未定義の場合は、Noneを返します。

linear_name

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

linear_units

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

angular_name

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

angular_units

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

units

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

ellipsoid

この空間参照の楕円体パラメーターのタプルを返します:(半長軸、半短軸、および逆平坦化)。

semi_major

この空間参照の楕円体の半主軸を返します。

semi_minor

この空間参照の楕円体の短半径を返します。

inverse_flattening

この空間参照の楕円体の逆平坦化を返します。

geographic

この空間参照が地理的である場合(ルートノードはGEOGCS)、Trueを返します。

local

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

projected

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

wkt

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

pretty_wkt

WKTの「きれいな」表現を返します。

proj

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

proj4

SpatialReference.proj のエイリアス。

xml

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


CoordTransform

class CoordTransform(source, target)

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

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

ラスターデータオブジェクト

GDALRaster

GDALRaster は、GDALラスターソースオブジェクトのラッパーであり、一貫したインターフェイスを使用して、GDALでサポートされているさまざまな地理空間ファイル形式およびデータソースからのデータの読み取りをサポートします。 各データソースは、bandsという名前のデータの1つ以上のレイヤーを含む GDALRaster オブジェクトによって表されます。 GDALBand オブジェクトで表される各バンドには、地理参照された画像データが含まれています。 たとえば、RGB画像は3つのバンドとして表されます。1つは赤、もう1つは緑、もう1つは青です。

ノート

ラスターデータの場合、ラスターインスタンスとそのデータソースの間に違いはありません。 Geometryオブジェクトとは異なり、 GDALRaster オブジェクトは常にデータソースです。 一時的なラスターは、対応するドライバーを使用してメモリ内でインスタンス化できますが、ファイルベースのラスターソースと同じクラスになります。


class GDALRaster(ds_input, write=False)

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

最初のパラメーターは、ファイルパスを表す文字列、新しいラスターを定義する値を持つ辞書、またはラスターファイルを表すバイトオブジェクトの3つの形式をとることができます。

入力がファイルパスの場合、ラスターはそこから開かれます。 入力が辞書の生データの場合、パラメーターwidthheight、およびsridが必要です。 入力がbytesオブジェクトの場合、GDAL仮想ファイルシステムを使用して開かれます。

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

次の例は、さまざまな入力ソースからラスターを作成する方法を示しています(GeoDjangoテストのサンプルデータを使用します。サンプルデータセクションも参照してください)。

>>> 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'
name

入力ファイルのパスに相当するソースの名前、またはインスタンス化時に提供される名前。

>>> GDALRaster({'width': 10, 'height': 10, 'name': 'myraster', 'srid': 4326}).name
'myraster'
driver

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

インメモリラスターは、次の例で作成されます。

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

ファイルベースのGeoTiffラスターは、次の例で作成されます。

>>> 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'
width

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

>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).width
10
height

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

>>> GDALRaster({'width': 10, 'height': 20, 'srid': 4326}).height
20
srs

SpatialReference インスタンスとしてのラスターの空間参照系。 SRSは、他の SpatialReference に設定するか、 SpatialReference コンストラクターによって受け入れられる入力を提供することで変更できます。

>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326})
>>> rst.srs.srid
4326
>>> rst.srs = 3086
>>> rst.srs.srid
3086
srid

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

>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326})
>>> rst.srid
4326
>>> rst.srid = 3086
>>> rst.srid
3086
>>> rst.srs.srid  # This is equivalent
3086
geotransform

次の関係を使用してピクセル/ライン座標を地理参照空間にマッピングする6つの係数のタプルとして、ソースを地理参照するために使用されるアフィン変換行列。

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

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

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

>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326})
>>> rst.geotransform
[0.0, 1.0, 0.0, 0.0, 0.0, -1.0]
origin

xおよびyメンバーを持つポイントオブジェクトとしての、ソースの空間参照系におけるラスターの左上の原点の座標。

>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326})
>>> rst.origin
[0.0, 0.0]
>>> rst.origin.x = 1
>>> rst.origin
[1.0, 0.0]
scale

xおよびyメンバーを持つポイントオブジェクトとして、ラスターを地理参照するために使用されるピクセルの幅と高さ。 詳細については、 geotransform を参照してください。

>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326})
>>> rst.scale
[1.0, -1.0]
>>> rst.scale.x = 2
>>> rst.scale
[2.0, -1.0]
skew

xおよびyメンバーを持つポイントオブジェクトとして、ラスターを地理参照するために使用されるスキュー係数。 ノースアップ画像の場合、これらの係数は両方とも0です。

>>> rst = GDALRaster({'width': 10, 'height': 20, 'srid': 4326})
>>> rst.skew
[0.0, 0.0]
>>> rst.skew.x = 3
>>> rst.skew
[3.0, 0.0]
extent

ソースの空間参照系の4タプル(xmin, ymin, xmax, ymax)としてのラスターソースの範囲(境界値)。

>>> 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)
bands

GDALBand インスタンスとして、ソースのすべてのバンドのリスト。

>>> 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)

このラスターのワープバージョンを返します。

ワーピングパラメータは、ds_input引数を使用して指定できます。 ds_inputの使用は、クラスコンストラクターの対応する引数に類似しています。 ターゲットラスターの特性を備えた辞書です。 許可される辞書キー値は、幅、高さ、SRID、原点、スケール、スキュー、データ型、ドライバー、および名前(ファイル名)です。

デフォルトでは、ワープ関数はほとんどのパラメーターを元のソースラスターの値と同じに保つため、変更する必要のあるパラメーターのみを指定する必要があります。 これにはドライバーが含まれているため、ファイルベースのラスターの場合、ワープ関数はディスク上に新しいラスターを作成することに注意してください。

ソースラスターとは異なる方法で設定される唯一のパラメーターは名前です。 ラスター名のデフォルト値は、'_copy' + source_driver_nameが付加されたソースラスターの名前です。 ファイルベースのラスターの場合、ターゲットラスターのファイルパスを指定することをお勧めします。

ワーピングに使用されるリサンプリングアルゴリズムは、resampling引数で指定できます。 デフォルトはNearestNeighborで、その他の許可される値はBilinearCubicCubicSplineLanczosAverageです。 、およびMode

max_error引数を使用して、変換の近似で許可される入力ピクセルで測定された最大エラーを指定できます。 正確な計算の場合、デフォルトは0.0です。

GDALに精通しているユーザーの場合、この関数にはgdalwarpコマンドラインユーティリティと同様の機能があります。

たとえば、ワープ関数を使用して、ラスターを元のピクセルスケールの2倍に集約できます。

>>> 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)

このラスターを別の空間参照系(srs)に変換します。これは、 SpatialReference オブジェクト、または SpatialReference によって受け入れられるその他の入力(空間参照WKTおよびPROJ文字列、または整数SRID)。

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

デフォルトでは、ソースラスターのドライバーが使用され、ラスターの名前は'_copy' + source_driver_nameが付加された元の名前です。 driverおよびname引数を使用して、別のドライバーまたは名前を指定できます。

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

>>> 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]

バージョン3.2で変更: SpatialReference srsのサポートが追加されました

info

ラスターの要約を含む文字列を返します。 これは、 gdalinfo コマンドラインユーティリティと同等です。

metadata

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

メタデータアイテムを設定または更新するには、上記のネストされた構造を使用して、対応するメタデータアイテムをメソッドに渡します。 指定された辞書にあるキーのみが更新されます。 残りのメタデータは変更されません。

メタデータアイテムを削除するには、メタデータ値としてNoneを使用します。

>>> 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_buffer

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

is_vsi_based

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


GDALBand

class GDALBand

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

description

バンドの名前または説明(ある場合)。

width

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

height

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

pixel_count

このバンドのピクセルの総数。 width * heightと同じです。

statistics(refresh=False, approximate=False)

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

approximate引数がTrueに設定されている場合、統計は概要または画像タイルのサブセットに基づいて計算される場合があります。

refresh引数がTrueに設定されている場合、統計はデータから直接計算され、キャッシュは結果で更新されます。

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

空のバンド(すべてのピクセル値が「データなし」)の場合、すべての統計はNoneとして返されます。

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

min

バンドの最小ピクセル値(「データなし」値を除く)。

max

バンドの最大ピクセル値(「データなし」の値を除く)。

mean

バンドのすべてのピクセル値の平均(「データなし」の値を除く)。

std

バンドのすべてのピクセル値の標準偏差(「データなし」の値を除く)。

nodata_value

バンドの「データなし」値は、通常、有効なデータではないピクセルをマークするために使用される特別なマーカー値です。 このようなピクセルは通常、表示したり、分析操作に寄与したりしないでください。

既存の「データなし」の値を削除するには、このプロパティをNoneに設定します(GDAL≥2.1が必要です)。

datatype(as_string=False)

0(不明)から11までの整数定数としてバンドに含まれるデータ型。 as_stringTrueの場合、データ型は次の可能な値を持つ文字列として返されます:GDT_UnknownGDT_ByteGDT_UInt16GDT_Int16GDT_UInt32GDT_Int32GDT_Float32GDT_Float64GDT_CInt16GDT_CInt32、[ X215X] 、およびGDT_CFloat64

color_interp(as_string=False)

0から16までの整数としてのバンドの色の解釈。 as_stringTrueの場合、データ型は次の可能な値を持つ文字列として返されます:GCI_UndefinedGCI_GrayIndexGCI_PaletteIndexGCI_RedBandGCI_GreenBandGCI_BlueBandGCI_AlphaBandGCI_HueBandGCI_SaturationBandGCI_LightnessBand、[ X215X] 、GCI_MagentaBandGCI_YellowBandGCI_BlackBandGCI_YCbCr_YBandGCI_YCbCr_CbBand、およびGCI_YCbCr_CrBandGCI_YCbCr_CrBandGCI_Maxも表します。これは、どちらも整数16に対応しているためですが、文字列として返されるのはGCI_YCbCr_CrBandのみです。

data(data=None, offset=None, size=None, shape=None)

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

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

dataパラメータが指定されている場合、データはGDALBandに書き込まれます。 入力は、パックされた文字列、バッファ、リスト、配列、およびNumPy配列のいずれかのタイプにすることができます。 入力内のアイテムの数は、通常、バンド内のピクセルの総数に対応するか、offsetおよびsizeパラメーターが次の場合はピクセル値の特定のブロックのピクセル数に対応する必要があります。提供された。

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

例えば:

>>> 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)
metadata

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


データからラスターを作成する

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

dictGDALRaster コンストラクターに渡されると、新しいラスターが作成されます。 ディクショナリには、原点、サイズ、空間参照系など、新しいラスターの定義パラメーターが含まれています。 辞書には、ピクセルデータと新しいラスターの形式に関する情報を含めることもできます。 したがって、結果のラスターは、指定されたドライバーに応じて、ファイルベースまたはメモリベースになります。

辞書またはJSONフレーバーでラスターデータを記述するための標準はありません。 したがって、 GDALRaster クラスへの辞書入力の定義は、Djangoに固有です。 geojson 形式に触発されていますが、geojson標準は現在ベクター形式に制限されています。

ラスターを作成するときにさまざまなキーを使用する例は、 GDALRaster および GDALBand クラスの対応する属性とメソッドのドキュメントに記載されています。

ds_input辞書

ds_inputディクショナリでラスターを作成するために必要なキーは、widthheight、およびsridのみです。 他のすべてのパラメーターにはデフォルト値があります(以下の表を参照)。 ds_inputディクショナリで渡すことができるキーのリストは密接に関連していますが、 GDALRaster プロパティと同一ではありません。 パラメータの多くは、これらのプロパティに直接マップされています。 その他については以下で説明します。

次の表に、ds_inputディクショナリで設定できるすべてのキーを示します。

ディフォルト 使用法
srid 必要 srid 属性にマップされます
width 必要 width 属性にマップされます
height 必要 height 属性にマップされます
driver MEM ドライバー属性にマップされます
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ビット浮動小数点

nr_of_bands
ラスターのバンド数を表す整数。 ラスターは、作成時にバンドデータを渡さずに作成できます。 バンド数が指定されていない場合は、bands入力の長さから自動的に計算されます。 作成後にバンド数を変更することはできません。
bands
バンド入力データを含むband_input辞書のリスト。 結果のバンドインデックスは、提供されているリストと同じです。 バンド入力辞書の定義を以下に示します。 バンドデータが提供されていない場合、ラスターバンド値はゼロの配列としてインスタンス化され、「データなし」の値はNoneに設定されます。
papsz_options

ラスター作成オプション付きの辞書。 入力ディクショナリのキーと値のペアは、ラスターの作成時にドライバーに渡されます。

使用可能なオプションはドライバー固有であり、各ドライバーのドキュメントに記載されています。

辞書の値では大文字と小文字は区別されず、作成時に正しい文字列形式に自動的に変換されます。

次の例では、 GTiffドライバーで使用可能なオプションの一部を使用しています。 結果は、内部タイリングスキームを備えた圧縮された符号付きバイトラスターです。 内部タイルのブロックサイズは23x23です。

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


band_input辞書

ds_input辞書のbandsキーは、band_input辞書のリストです。 各band_inputディクショナリには、新しいラスターのバンドに設定されるピクセル値と「データなし」値を含めることができます。 データ配列は、新しいラスターのフルサイズにすることも、それより小さくすることもできます。 フルラスターよりも小さい配列の場合、sizeshape、およびoffsetキーがピクセル値を制御します。 対応するキーは data()メソッドに渡されます。 それらの機能は、その方法でバンドデータを設定するのと同じです。 次の表に、使用できるキーを示します。

ディフォルト 使用法
nodata_value None nodata_value 属性にマップされます
data nodata_valueまたは0と同じ data()メソッドに渡されます
size ラスターの(with, height) data()メソッドに渡されます
shape サイズと同じ data()メソッドに渡されます
offset (0, 0) data()メソッドに渡されます


GDALの仮想ファイルシステムの使用

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

これは、ラスターがリモートストレージからバッファーとして取得されたり、ディスクに書き込まれずにビューから返されたりする可能性があるWebコンテキストで役立ちます。

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

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

# 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 でファイルとして返す方法は次のとおりです。

>>> 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')

設定

GDAL_LIBRARY_PATH

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


例外

exception GDALException
GDAL関連のエラーを示す基本GDAL例外。
exception SRSException
空間参照系オブジェクトの作成または使用時にエラーが発生した場合に発生する例外。