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)
レイヤー内の各フィーチャのジオメトリを含むリストを返すメソッド。 オプションの引数
geos
がTrue
に設定されている場合、ジオメトリは 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 オブジェクトを含む文字列です。 これらのオブジェクトは、 Layer ( DataSource の一部)からベクターデータを読み取るときに、 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つの形式をとることができます。
入力がファイルパスの場合、ラスターはそこから開かれます。 入力が辞書の生データの場合、パラメーター
width
、height
、および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
で、その他の許可される値はBilinear
、Cubic
、CubicSpline
、Lanczos
、Average
です。 、および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
として返されます。
- min
バンドの最小ピクセル値(「データなし」値を除く)。
- max
バンドの最大ピクセル値(「データなし」の値を除く)。
- mean
バンドのすべてのピクセル値の平均(「データなし」の値を除く)。
- std
バンドのすべてのピクセル値の標準偏差(「データなし」の値を除く)。
- nodata_value
バンドの「データなし」値は、通常、有効なデータではないピクセルをマークするために使用される特別なマーカー値です。 このようなピクセルは通常、表示したり、分析操作に寄与したりしないでください。
既存の「データなし」の値を削除するには、このプロパティを
None
に設定します(GDAL≥2.1が必要です)。
- datatype(as_string=False)
0(不明)から11までの整数定数としてバンドに含まれるデータ型。
as_string
がTrue
の場合、データ型は次の可能な値を持つ文字列として返されます:GDT_Unknown
、GDT_Byte
、GDT_UInt16
、GDT_Int16
、GDT_UInt32
、GDT_Int32
、GDT_Float32
、GDT_Float64
、GDT_CInt16
、GDT_CInt32
、[ X215X] 、およびGDT_CFloat64
。
- color_interp(as_string=False)
0から16までの整数としてのバンドの色の解釈。
as_string
がTrue
の場合、データ型は次の可能な値を持つ文字列として返されます:GCI_Undefined
、GCI_GrayIndex
、GCI_PaletteIndex
、GCI_RedBand
、GCI_GreenBand
、GCI_BlueBand
、GCI_AlphaBand
、GCI_HueBand
、GCI_SaturationBand
、GCI_LightnessBand
、[ X215X] 、GCI_MagentaBand
、GCI_YellowBand
、GCI_BlackBand
、GCI_YCbCr_YBand
、GCI_YCbCr_CbBand
、およびGCI_YCbCr_CrBand
。GCI_YCbCr_CrBand
はGCI_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
パラメーターを使用してラスターを最初から作成する方法について説明します。
dict
が GDALRaster コンストラクターに渡されると、新しいラスターが作成されます。 ディクショナリには、原点、サイズ、空間参照系など、新しいラスターの定義パラメーターが含まれています。 辞書には、ピクセルデータと新しいラスターの形式に関する情報を含めることもできます。 したがって、結果のラスターは、指定されたドライバーに応じて、ファイルベースまたはメモリベースになります。
辞書またはJSONフレーバーでラスターデータを記述するための標準はありません。 したがって、 GDALRaster クラスへの辞書入力の定義は、Djangoに固有です。 geojson 形式に触発されていますが、geojson
標準は現在ベクター形式に制限されています。
ラスターを作成するときにさまざまなキーを使用する例は、 GDALRaster および GDALBand クラスの対応する属性とメソッドのドキュメントに記載されています。
ds_input辞書
ds_input
ディクショナリでラスターを作成するために必要なキーは、width
、height
、および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
ディクショナリには、新しいラスターのバンドに設定されるピクセル値と「データなし」値を含めることができます。 データ配列は、新しいラスターのフルサイズにすることも、それより小さくすることもできます。 フルラスターよりも小さい配列の場合、size
、shape
、および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
- 空間参照系オブジェクトの作成または使用時にエラーが発生した場合に発生する例外。