GEOS API
バックグラウンド
GEOSとは何ですか?
GEOS は、 Geometry Engine-Open Source の略で、 Java Topology Suite から移植されたC ++ライブラリです。 GEOSは、SQL 空間述語関数と空間演算子のOpenGIS SimpleFeaturesを実装しています。 現在OSGeoプロジェクトであるGEOSは、当初、カナダのビクトリア州の Refractions Research によって開発および保守されていました。
特徴
GeoDjangoは、GEOSライブラリ用の高レベルのPythonラッパーを実装しており、その機能は次のとおりです。
ctypes
を使用して純粋にPythonで実装されたGEOSジオメトリルーチンへのBSDライセンスのインターフェース。- GeoDjangoに緩く結合されています。 たとえば、 GEOSGeometry オブジェクトは、Djangoプロジェクト/アプリケーションの外部で使用できます。 つまり、
DJANGO_SETTINGS_MODULE
を設定したりデータベースを使用したりする必要はありません。 - 可変性: GEOSGeometry オブジェクトは変更される可能性があります。
- クロスプラットフォームでテスト済み。 Windows、Linux、Solaris、およびmacOSプラットフォームと互換性があります。
チュートリアル
このセクションには、 GEOSGeometry オブジェクトの使用に関する簡単な紹介とチュートリアルが含まれています。
ジオメトリの作成
GEOSGeometry オブジェクトは、いくつかの方法で作成できます。 1つ目は、空間入力でオブジェクトを単純にインスタンス化することです。以下は、WKT、HEX、WKB、およびGeoJSONから同じジオメトリを作成する例です。
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry('POINT(5 23)') # WKT
>>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
>>> pnt = GEOSGeometry(buffer('\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@'))
>>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON
もう1つのオプションは、作成する特定のジオメトリタイプのコンストラクターを使用することです。 たとえば、 Point オブジェクトは、X座標とY座標をコンストラクターに渡すことで作成できます。
>>> from django.contrib.gis.geos import Point
>>> pnt = Point(5, 23)
これらのコンストラクターはすべて、キーワード引数srid
を取ります。 例えば:
>>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
>>> print(GEOSGeometry('POINT (0 0)', srid=4326))
SRID=4326;POINT (0 0)
>>> print(LineString((0, 0), (1, 1), srid=4326))
SRID=4326;LINESTRING (0 0, 1 1)
>>> print(Point(0, 0, srid=32140))
SRID=32140;POINT (0 0)
最後に、ファイルから GEOSGeometry オブジェクトを返す fromfile()ファクトリメソッドがあります。
>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile('/path/to/pnt.wkt')
>>> pnt = fromfile(open('/path/to/pnt.wkt'))
ジオメトリはPythonicです
GEOSGeometry オブジェクトは「Pythonic」です。つまり、標準のPython規則を使用して、コンポーネントにアクセス、変更、および反復することができます。 たとえば、ポイントの座標を反復処理できます。
>>> pnt = Point(5, 23)
>>> [coord for coord in pnt]
[5.0, 23.0]
どのジオメトリオブジェクトでも、 GEOSGeometry.coords プロパティを使用して、Pythonタプルとしてジオメトリ座標を取得できます。
>>> pnt.coords
(5.0, 23.0)
標準のPythonインデックス作成手法を使用して、ジオメトリコンポーネントを取得/設定できます。 ただし、返される内容は、オブジェクトのジオメトリタイプによって異なります。 たとえば、 LineString でインデックスを作成すると、座標タプルが返されます。
>>> from django.contrib.gis.geos import LineString
>>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0))
>>> line[0]
(0.0, 0.0)
>>> line[-2]
(50.0, 0.0)
Polygon でインデックスを作成すると、インデックスに対応するリング( LinearRing オブジェクト)が返されます。
>>> from django.contrib.gis.geos import Polygon
>>> poly = Polygon( ((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)) )
>>> poly[0]
<LinearRing object at 0x1044395b0>
>>> poly[0][-2] # second-to-last coordinate of external ring
(50.0, 0.0)
さらに、Pythonリストのように、ジオメトリの座標/コンポーネントを追加または変更できます。
>>> line[0] = (1.0, 1.0)
>>> line.pop()
(0.0, 0.0)
>>> line.append((1.0, 1.0))
>>> line.coords
((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))
ジオメトリはセットのような演算子をサポートします:
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (2, 2))
>>> ls2 = LineString((1, 1), (3, 3))
>>> print(ls1 | ls2) # equivalent to `ls1.union(ls2)`
MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3))
>>> print(ls1 & ls2) # equivalent to `ls1.intersection(ls2)`
LINESTRING (1 1, 2 2)
>>> print(ls1 - ls2) # equivalent to `ls1.difference(ls2)`
LINESTRING(0 0, 1 1)
>>> print(ls1 ^ ls2) # equivalent to `ls1.sym_difference(ls2)`
MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))
等式演算子は空間的等式をチェックしません
GEOSGeometry 等式演算子は、 equals()ではなく、 equals_exact()を使用します。 比較されるジオメトリは、同じSRIDを持つ同じ位置に同じ座標を持つ必要があります。
>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((1, 1), (0, 0))
>>> ls3 = LineString((1, 1), (0, 0), srid=4326)
>>> ls1.equals(ls2)
True
>>> ls1 == ls2
False
>>> ls3 == ls2 # different SRIDs
False
ジオメトリオブジェクト
GEOSGeometry
- class GEOSGeometry(geo_input, srid=None)
- ;; パラメーター
- ;;* geo_input –ジオメトリ入力値(文字列またはバッファ)
- srid ( int )–空間参照識別子
これは、すべてのGEOSジオメトリオブジェクトの基本クラスです。 指定されたgeo_input
引数で初期化され、適切なジオメトリサブクラスを想定します(たとえば、GEOSGeometry('POINT(1 1)')
は Point オブジェクトを作成します)。
srid
パラメータが指定されている場合、geo_input
にSRIDがない場合、作成されたジオメトリのSRIDとして設定されます。 geo_input
およびsrid
パラメーターを介して異なるSRIDが提供される場合、ValueError
が発生します。
>>> from django.contrib.gis.geos import GEOSGeometry
>>> GEOSGeometry('POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=4326;POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=1;POINT EMPTY', srid=4326)
Traceback (most recent call last):
...
ValueError: Input geometry already has SRID: 1.
次の入力形式とそれに対応するPythonタイプが受け入れられます。
フォーマット | 入力方式 |
---|---|
WKT / EWKT | str
|
HEX / HEXEWKB | str
|
WKB / EWKB | buffer
|
GeoJSON | str
|
GeoJSON形式の場合、SRIDはcrs
メンバーに基づいて設定されます。 crs
が指定されていない場合、SRIDのデフォルトは4326です。
- classmethod GEOSGeometry.from_gml(gml_string)
- 指定されたGML文字列から GEOSGeometry を構築します。
プロパティ
- GEOSGeometry.coords
- ジオメトリの座標をタプルとして返します。
- GEOSGeometry.dims
- ジオメトリの寸法を返します。
- ポイントおよびマルチポイントの場合は
0
- LineString および MultiLineString の
1
- ポリゴンおよびマルチポリゴンの
2
- 空の GeometryCollection の場合は
-1
- 空でない GeometryCollection の要素の最大寸法
- ポイントおよびマルチポイントの場合は
- GEOSGeometry.empty
- ジオメトリ内のポイントのセットが空であるかどうかを返します。
- GEOSGeometry.geom_type
ジオメトリのタイプに対応する文字列を返します。 例えば:
>>> pnt = GEOSGeometry('POINT(5 23)') >>> pnt.geom_type 'Point'
- GEOSGeometry.geom_typeid
GEOSジオメトリタイプの識別番号を返します。 次の表に、各ジオメトリタイプの値を示します。
ジオメトリ
ID
0
1
2
3
4
5
6
7
- GEOSGeometry.num_coords
- ジオメトリ内の座標の数を返します。
- GEOSGeometry.num_geom
- このジオメトリのジオメトリの数を返します。 つまり、ジオメトリコレクション以外では1を返します。
- GEOSGeometry.hasz
- ジオメトリが3次元であるかどうかを示すブール値を返します。
- GEOSGeometry.ring
- ジオメトリが
LinearRing
であるかどうかを示すブール値を返します。
- GEOSGeometry.simple
- ジオメトリが「単純」であるかどうかを示すブール値を返します。 ジオメトリは、それ自体と交差しない場合にのみ単純です(境界点を除く)。 たとえば、 LineString オブジェクトは、それ自体と交差する場合、単純ではありません。 したがって、 LinearRing オブジェクトと Polygon オブジェクトは、定義上、交差できないため、常に単純です。
- GEOSGeometry.valid
- ジオメトリが有効かどうかを示すブール値を返します。
- GEOSGeometry.valid_reason
- ジオメトリが無効である理由を説明する文字列を返します。
- GEOSGeometry.srid
ジオメトリに関連付けられたSRIDを取得または設定するために使用できるプロパティ。 例えば:
>>> pnt = Point(5, 23) >>> print(pnt.srid) None >>> pnt.srid = 4326 >>> pnt.srid 4326
出力プロパティ
このセクションのプロパティは、 GEOSGeometry オブジェクトを別のオブジェクトにエクスポートします。 この出力は、文字列、バッファ、または別のオブジェクトの形式である可能性があります。
- GEOSGeometry.ewkt
ジオメトリの「拡張された」Well-KnownTextを返します。 この表現はPostGISに固有であり、OGCWKT標準のスーパーセットです。 1 基本的に、SRIDはWKT表現の前に付加されます(例:
SRID=4326;POINT(5 23)
)。ノート
このプロパティからの出力には、PostGISがEWKT表現でサポートする3dm、3dz、および4d情報は含まれていません。
- GEOSGeometry.hex
- このジオメトリのWKBを16進形式で返します。 SRID値はOGC仕様の一部ではないため、この表現には含まれないことに注意してください(代わりに GEOSGeometry.hexewkb プロパティを使用してください)。
- GEOSGeometry.hexewkb
- このジオメトリのEWKBを16進形式で返します。 これは、このジオメトリの一部であるSRID値を含むWKB仕様の拡張です。
- GEOSGeometry.json
- ジオメトリのGeoJSON表現を返します。 結果は完全なGeoJSON構造ではなく、GeoJSON構造の
geometry
キーコンテンツのみであることに注意してください。 GeoJSON Serializer も参照してください。
- GEOSGeometry.geojson
- GEOSGeometry.json のエイリアス。
- GEOSGeometry.kml
- ジオメトリの KML (Keyhole Markup Language)表現を返します。 これは、SRIDが4326(WGS84)のジオメトリにのみ使用する必要がありますが、この制限は適用されません。
- GEOSGeometry.ogr
- GEOSジオメトリに対応する OGRGeometry オブジェクトを返します。
- GEOSGeometry.wkb
- このジオメトリのWKB(Well-Known Binary)表現をPythonバッファーとして返します。 SRID値は含まれていません。代わりに、 GEOSGeometry.ewkb プロパティを使用してください。
- GEOSGeometry.ewkb
- このジオメトリのEWKB表現をPythonバッファとして返します。 これは、このジオメトリの一部であるSRID値を含むWKB仕様の拡張です。
- GEOSGeometry.wkt
- ジオメトリのWell-KnownText(OGC標準)を返します。
空間述語メソッド
以下のすべての空間述語メソッドは、別の GEOSGeometry インスタンス(other
)をパラメーターとして受け取り、ブール値を返します。
- GEOSGeometry.contains(other)
- other.within(this)が
True
を返す場合、True
を返します。
- GEOSGeometry.covers(other)
このジオメトリが指定されたジオメトリをカバーしている場合、
True
を返します。covers
述語には、次の同等の定義があります。他のジオメトリのすべてのポイントは、このジオメトリのポイントです。
2つのジオメトリのDE-9IM交差マトリックスは、
T*****FF*
、*T****FF*
、***T**FF*
、または****T*FF*
です。
いずれかのジオメトリが空の場合、
False
を返します。この述語は GEOSGeometry.contains()に似ていますが、より包括的です(つまり、 その他の場合は
True
を返します)。 特に、 contains()とは異なり、境界内のポイントとジオメトリの内部のポイントを区別しません。 ほとんどの場合、 contains()よりもcovers()
を優先する必要があります。 追加の利点として、covers()
は最適化の影響を受けやすいため、 contains()よりもパフォーマンスが優れているはずです。
- GEOSGeometry.crosses(other)
- 2つのジオメトリのDE-9IM交差行列が
T*T******
(点と曲線、点と領域、または線と領域の場合) [X160Xの場合、True
を返します。 ](2つの曲線の場合)。
- GEOSGeometry.disjoint(other)
- 2つのジオメトリのDE-9IM交差行列が
FF*FF****
の場合、True
を返します。
- GEOSGeometry.equals(other)
- 2つのジオメトリのDE-9IM交差行列が
T*F**FFF*
の場合、True
を返します。
- GEOSGeometry.equals_exact(other, tolerance=0)
- 指定された許容誤差まで、2つの形状が完全に等しい場合にtrueを返します。
tolerance
の値は、比較の許容誤差を表す浮動小数点数である必要があります。たとえば、poly1.equals_exact(poly2, 0.001)
は、等式を単位の1000分の1以内と比較します。
- GEOSGeometry.intersects(other)
- GEOSGeometry.disjoint()が
False
の場合、True
を返します。
- GEOSGeometry.overlaps(other)
- 2つのジオメトリのDE-9IM交差行列が
T*T***T**
(2つのポイントまたは2つのサーフェスの場合)1*T***T**
(2つのカーブの場合)の場合にtrueを返します。
- GEOSGeometry.relate_pattern(other, pattern)
- このジオメトリと他のジオメトリのDE-9IM交差行列の要素が指定された
pattern
と一致する場合、True
を返します–アルファベットからの9文字の文字列:{T
、F
、*
、0
}。
- GEOSGeometry.touches(other)
- 2つのジオメトリのDE-9IM交差行列が
FT*******
、F**T*****
、またはF***T****
の場合、True
を返します。
- GEOSGeometry.within(other)
- 2つのジオメトリのDE-9IM交差行列が
T*F**F***
の場合、True
を返します。
トポロジー的方法
- GEOSGeometry.buffer(width, quadsegs=8)
- このジオメトリからの距離が指定された
width
以下であるすべてのポイントを表す GEOSGeometry を返します。 オプションのquadsegs
キーワードは、4分の1円を概算するために使用されるセグメントの数を設定します(デフォルトは8)。
- GEOSGeometry.buffer_with_style(width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0)
- buffer()と同じですが、バッファーのスタイルをカスタマイズできます。
end_cap_style
は、円形(1
)、フラット(2
)、または正方形(3
)にすることができます。join_style
は、円形(1
)、マイター(2
)、または斜角(3
)にすることができます。- マイター比の制限(
mitre_limit
)は、マイター結合スタイルにのみ影響します。
- GEOSGeometry.difference(other)
- 他を構成しないこのジオメトリを構成するポイントを表す GEOSGeometry を返します。
- GEOSGeometry.interpolate(distance)
- GEOSGeometry.interpolate_normalized(distance)
距離(float)を指定すると、その距離のジオメトリ( LineString または MultiLineString )内のポイント(または最も近いポイント)を返します。 正規化されたバージョンは、0(原点)と1(終点)の間の浮動小数点として距離を取ります。
- GEOSGeometry.intersection(other)
- このジオメトリと他のジオメトリが共有するポイントを表す GEOSGeometry を返します。
- GEOSGeometry.project(point)
- GEOSGeometry.project_normalized(point)
ジオメトリの原点( LineString または MultiLineString )からジオメトリに投影されたポイント(つまり、指定されたものに最も近いラインのポイントまで)までの距離(フロート)を返します。点)。 正規化されたバージョンは、0(原点)と1(終点)の間の浮動小数点数として距離を返します。
- GEOSGeometry.relate(other)
- このジオメトリと他のジオメトリの間のトポロジ関係を表すDE-9IM交差行列(文字列)を返します。
- GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)
Douglas-Peuckerアルゴリズムを使用して指定された許容誤差に簡略化された、新しい GEOSGeometry を返します。 許容値が高いほど、出力のポイントが少なくなります。 許容値が指定されていない場合、デフォルトで0になります。
デフォルトでは、この関数はトポロジーを保持しません。 たとえば、 Polygon オブジェクトは、分割したり、線に折りたたんだり、非表示にしたりできます。 ポリゴンの穴は作成または非表示にでき、線が交差する場合があります。
preserve_topology=True
を指定すると、結果は入力と同じ次元とコンポーネント数になります。 ただし、これは大幅に遅くなります。
- GEOSGeometry.sym_difference(other)
- GEOSGeometry を返し、このジオメトリ内の他のポイントと、このジオメトリ内にない他のポイントを組み合わせます。
- GEOSGeometry.union(other)
- このジオメトリと他のジオメトリのすべてのポイントを表す GEOSGeometry を返します。
トポロジー特性
- GEOSGeometry.boundary
- 境界を新しく割り当てられたGeometryオブジェクトとして返します。
- GEOSGeometry.centroid
- ジオメトリの幾何学的中心を表す Point オブジェクトを返します。 ポイントは、ジオメトリの内部にあるとは限りません。
- GEOSGeometry.convex_hull
- ジオメトリ内のすべてのポイントを含む最小の Polygon を返します。
- GEOSGeometry.envelope
- このジオメトリの境界エンベロープを表す Polygon を返します。 入力ジオメトリがポイントの場合、 Point を返すこともできることに注意してください。
- GEOSGeometry.point_on_surface
- このジオメトリの内部にあることが保証されている Point を計算して返します。
- GEOSGeometry.unary_union
このジオメトリのすべての要素の和集合を計算します。
結果は次の契約に従います。
LineString のセットを結合すると、線画を完全にうなずいて解消する効果があります。
Polygon のセットを結合すると、常に Polygon または MultiPolygon ジオメトリが返されます( GEOSGeometry.union()とは異なり、ジオメトリが返される場合があります)。トポロジの崩壊が発生した場合の低次元の)。
その他のプロパティとメソッド
- GEOSGeometry.area
- このプロパティは、ジオメトリの面積を返します。
- GEOSGeometry.extent
- このプロパティは、このジオメトリの範囲を
(xmin, ymin, xmax, ymax)
で構成される4タプルとして返します。
- GEOSGeometry.clone()
- このメソッドは、オリジナルのクローンである GEOSGeometry を返します。
- GEOSGeometry.distance(geom)
このジオメトリの最も近いポイントと指定された
geom
(別の GEOSGeometry オブジェクト)の間の距離を返します。ノート
GEOSの距離計算は線形です。つまり、SRIDが地理座標系を指定している場合でも、GEOSは球形の計算を実行しません。
- GEOSGeometry.length
- このジオメトリの長さを返します(たとえば、 Point の場合は0、 LineString の長さ、または Polygon の円周)。
- GEOSGeometry.prepared
- このジオメトリのコンテンツのGEOS
PreparedGeometry
を返します。PreparedGeometry
オブジェクトは、包含、交差、カバー、交差、分離、オーバーラップ、タッチ、および操作内で最適化されています。 詳細については、 Prepared Geometries のドキュメントを参照してください。
- GEOSGeometry.srs
- ジオメトリのSRIDまたは
None
に対応する SpatialReference オブジェクトを返します。
- GEOSGeometry.transform(ct, clone=False)
指定された座標変換パラメーター(
ct
)に従ってジオメトリを変換します。これは、整数SRID、空間参照WKT文字列、PROJ.4文字列、 SpatialReference オブジェクト、または[ X214X] CoordTransform オブジェクト。 デフォルトでは、ジオメトリはインプレースで変換され、何も返されません。 ただし、clone
キーワードが設定されている場合、ジオメトリは変更されず、代わりにジオメトリの変換されたクローンが返されます。ノート
GDALが使用できない場合、またはジオメトリのSRIDが
None
または0未満の場合、 GEOSException を発生させます。 CoordTransform オブジェクトで呼び出された場合、ジオメトリのSRIDに制約は課されません。
- GEOSGeometry.normalize()
このジオメトリを標準形式に変換します。
>>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1)) >>> print(g) MULTIPOINT (0 0, 2 2, 1 1) >>> g.normalize() >>> print(g) MULTIPOINT (2 2, 1 1, 0 0)
Point
- class Point(x=None, y=None, z=None, srid=None)
Point
オブジェクトは、ポイントのコンポーネント座標を表す引数を使用して、または単一のシーケンス座標でインスタンス化されます。 たとえば、以下は同等です。>>> pnt = Point(5, 23) >>> pnt = Point([5, 23])
空の
Point
オブジェクトは、引数を渡さないか、空のシーケンスを渡すことでインスタンス化できます。 以下は同等です。>>> pnt = Point() >>> pnt = Point([])
LineString
- class LineString(*args, **kwargs)
LineString
オブジェクトは、一連の座標または Point オブジェクトのいずれかである引数を使用してインスタンス化されます。 たとえば、以下は同等です。>>> ls = LineString((0, 0), (1, 1)) >>> ls = LineString(Point(0, 0), Point(1, 1))
さらに、
LineString
オブジェクトは、座標または Point オブジェクトの単一シーケンスを渡すことによって作成することもできます。>>> ls = LineString( ((0, 0), (1, 1)) ) >>> ls = LineString( [Point(0, 0), Point(1, 1)] )
空の
LineString
オブジェクトは、引数を渡さないか、空のシーケンスを渡すことでインスタンス化できます。 以下は同等です。>>> ls = LineString() >>> ls = LineString([])
- closed
この
LineString
が閉じているかどうかを返します。
LinearRing
- class LinearRing(*args, **kwargs)
LinearRing
オブジェクトは、 LineString オブジェクトとまったく同じ方法で作成されますが、座標はクローズである必要があります。つまり、最初の座標は、最後の座標。 例えば:>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))
(0, 0)
が最初と最後の座標であることに注意してください。これらが等しくない場合、エラーが発生します。
Polygon
- class Polygon(*args, **kwargs)
Polygon
オブジェクトは、ポリゴンのリングを表すパラメータを渡すことでインスタンス化できます。 パラメータは、 LinearRing インスタンス、または LinearRing の構築に使用できるシーケンスのいずれかである必要があります。>>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0)) >>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4)) >>> poly = Polygon(ext_coords, int_coords) >>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
- classmethod from_bbox(bbox)
指定されたバウンディングボックスからポリゴンオブジェクトを返します。これは、
(xmin, ymin, xmax, ymax)
で構成される4タプルです。
- num_interior_rings
このジオメトリの内部リングの数を返します。
ポリゴンの比較
Polygon
オブジェクトを<
または>
と直接比較することは可能ですが、比較はPolygonの LineString を介して行われるため、それは意味しません。多く(ただし、一貫性があり、迅速です)。 area プロパティを使用して、いつでも強制的に比較できます。
>>> if poly_1.area > poly_2.area:
>>> pass
ジオメトリコレクション
MultiPoint
- class MultiPoint(*args, **kwargs)
MultiPoint
オブジェクトは、 Point オブジェクトを引数として渡すか、 Point オブジェクトの単一シーケンスを渡すことでインスタンス化できます。>>> mp = MultiPoint(Point(0, 0), Point(1, 1)) >>> mp = MultiPoint( (Point(0, 0), Point(1, 1)) )
MultiLineString
- class MultiLineString(*args, **kwargs)
MultiLineString
オブジェクトは、 LineString オブジェクトを引数として渡すか、 LineString オブジェクトの単一シーケンスを渡すことでインスタンス化できます。>>> ls1 = LineString((0, 0), (1, 1)) >>> ls2 = LineString((2, 2), (3, 3)) >>> mls = MultiLineString(ls1, ls2) >>> mls = MultiLineString([ls1, ls2])
- merged
この
MultiLineString
内のすべてのコンポーネントのラインマージを表す LineString を返します。
- closed
すべての要素が閉じている場合にのみ、
True
を返します。 GEOS3.5が必要です。
MultiPolygon
- class MultiPolygon(*args, **kwargs)
MultiPolygon
オブジェクトは、 Polygon オブジェクトを引数として渡すか、 Polygon オブジェクトの単一シーケンスを渡すことでインスタンス化できます。>>> p1 = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> p2 = Polygon( ((1, 1), (1, 2), (2, 2), (1, 1)) ) >>> mp = MultiPolygon(p1, p2) >>> mp = MultiPolygon([p1, p2])
GeometryCollection
- class GeometryCollection(*args, **kwargs)
GeometryCollection
オブジェクトは、他の GEOSGeometry を引数として渡すか、 GEOSGeometry オブジェクトの単一シーケンスを渡すことでインスタンス化できます。>>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) ) >>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly) >>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))
準備されたジオメトリ
準備されたジオメトリを取得するには、 GEOSGeometry.prepared プロパティにアクセスします。 PreparedGeometry
インスタンスを作成すると、以下に示すその空間述語メソッドを他のGEOSGeometry
オブジェクトで使用できます。 準備されたジオメトリを使用した操作は、桁違いに高速になる可能性があります。準備されたジオメトリが複雑になるほど、操作の速度が向上します。 詳細については、準備されたジオメトリに関する GEOSwikiページを参照してください。
例えば:
>>> from django.contrib.gis.geos import Point, Polygon
>>> poly = Polygon.from_bbox((0, 0, 5, 5))
>>> prep_poly = poly.prepared
>>> prep_poly.contains(Point(2.5, 2.5))
True
PreparedGeometry
- class PreparedGeometry
PreparedGeometry
のすべてのメソッドは、other
引数を取ります。これは、 GEOSGeometry インスタンスである必要があります。- contains(other)
- contains_properly(other)
- covers(other)
- crosses(other)
- disjoint(other)
- intersects(other)
- overlaps(other)
- touches(other)
- within(other)
幾何学工場
- fromfile(file_h)
- パラメーター
file_h (Python
file
オブジェクトまたはファイルへの文字列パス)–空間データを含む入力ファイル- リターンタイプ
ファイル内の空間データに対応する GEOSGeometry
例:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile('/home/bob/geom.wkt')
- fromstr(string, srid=None)
- パラメーター
string ( str )–空間データを含む文字列
srid ( int )–空間参照識別子
- リターンタイプ
文字列内の空間データに対応する GEOSGeometry
fromstr(string, srid)
は、 GEOSGeometry(string、srid)と同等です。例:
>>> from django.contrib.gis.geos import fromstr >>> pnt = fromstr('POINT(-90.5 29.5)', srid=4326)
I / Oオブジェクト
リーダーオブジェクト
リーダーI / Oクラスは、read(geom)
メソッドに指定されたWKBおよび/またはWKT入力から GEOSGeometry インスタンスを返します。
- class WKBReader
例:
>>> from django.contrib.gis.geos import WKBReader >>> wkb_r = WKBReader() >>> wkb_r.read('0101000000000000000000F03F000000000000F03F') <Point object at 0x103a88910>
- class WKTReader
例:
>>> from django.contrib.gis.geos import WKTReader >>> wkt_r = WKTReader() >>> wkt_r.read('POINT(1 1)') <Point object at 0x103a88b50>
ライターオブジェクト
すべてのライターオブジェクトには、指定されたジオメトリのWKBまたはWKTのいずれかを返すwrite(geom)
メソッドがあります。 さらに、 WKBWriter オブジェクトには、バイト順序を変更したり、SRID値(つまり、EWKB)を含めたりするために使用できるプロパティもあります。
- class WKBWriter(dim=2)
WKBWriter
は、その出力を最大限に制御します。 デフォルトでは、write
メソッドが呼び出されると、OGC準拠のWKBが返されます。 ただし、追加情報を含むWKB標準のスーパーセットであるEWKBの作成を可能にするプロパティがあります。dim
引数の詳細については、 WKBWriter.outdim のドキュメントを参照してください。- write(geom)
指定されたジオメトリのWKBをPython
buffer
オブジェクトとして返します。 例:>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write(pnt) <read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
- write_hex(geom)
ジオメトリのWKBを16進数で返します。 例:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> pnt = Point(1, 1) >>> wkb_w = WKBWriter() >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F'
- byteorder
このプロパティは、ジオメトリ表現のバイト順序を変更するために設定できます。
バイトオーダー値
説明
0
ビッグエンディアン(例、RISCシステムとの互換性)
1
リトルエンディアン(例:x86システムと互換性あり)
例:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1) >>> wkb_w.write_hex(pnt) '0101000000000000000000F03F000000000000F03F' >>> wkb_w.byteorder = 0 '00000000013FF00000000000003FF0000000000000'
- outdim
このプロパティは、ジオメトリ表現の出力寸法を変更するために設定できます。 つまり、3Dジオメトリがある場合は、3に設定して、Z値がWKBに含まれるようにします。
アウトディム値
説明
2
デフォルトの出力2DWKB。
3
3DWKBを出力します。
例:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> wkb_w.outdim 2 >>> pnt = Point(1, 1, 1) >>> wkb_w.write_hex(pnt) # By default, no Z value included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.outdim = 3 # Tell writer to include Z values >>> wkb_w.write_hex(pnt) '0101000080000000000000F03F000000000000F03F000000000000F03F'
- srid
このプロパティをブール値で設定して、ジオメトリのSRIDをWKB表現に含める必要があるかどうかを示します。 例:
>>> from django.contrib.gis.geos import Point, WKBWriter >>> wkb_w = WKBWriter() >>> pnt = Point(1, 1, srid=4326) >>> wkb_w.write_hex(pnt) # By default, no SRID included: '0101000000000000000000F03F000000000000F03F' >>> wkb_w.srid = True # Tell writer to include SRID >>> wkb_w.write_hex(pnt) '0101000020E6100000000000000000F03F000000000000F03F'
- class WKTWriter(dim=2, trim=False, precision=None)
このクラスを使用すると、ジオメトリのWKT表現を出力できます。 コンストラクター引数の詳細については、 WKBWriter.outdim 、 trim 、および precision 属性を参照してください。
- write(geom)
指定されたジオメトリのWKTを返します。 例:
>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1, 1) >>> wkt_w = WKTWriter() >>> wkt_w.write(pnt) 'POINT (1.0000000000000000 1.0000000000000000)'
- outdim
WKBWriter.outdim を参照してください。
- trim
このプロパティは、不要な小数のトリミングを有効または無効にするために使用されます。
>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1, 1) >>> wkt_w = WKTWriter() >>> wkt_w.trim False >>> wkt_w.write(pnt) 'POINT (1.0000000000000000 1.0000000000000000)' >>> wkt_w.trim = True >>> wkt_w.write(pnt) 'POINT (1 1)'
- precision
このプロパティは、座標の丸め精度を制御します。
None
に設定すると、丸めは無効になります。>>> from django.contrib.gis.geos import Point, WKTWriter >>> pnt = Point(1.44, 1.66) >>> wkt_w = WKTWriter() >>> print(wkt_w.precision) None >>> wkt_w.write(pnt) 'POINT (1.4399999999999999 1.6599999999999999)' >>> wkt_w.precision = 0 >>> wkt_w.write(pnt) 'POINT (1 2)' >>> wkt_w.precision = 1 >>> wkt_w.write(pnt) 'POINT (1.4 1.7)'
脚注
- 1
- 見る PostGIS EWKB、EWKTおよび標準形, PostGIS documentation at Ch. 4.1.2.
設定
GEOS_LIBRARY_PATH
GEOSCライブラリの場所を指定する文字列。 通常、この設定は、GEOS Cライブラリが非標準の場所(/home/bob/lib/libgeos_c.so
など)にある場合にのみ使用されます。
ノート
設定は、 C 共有ライブラリへのフルパスである必要があります。 つまり、libgeos.so
ではなく、libgeos_c.so
を使用します。
例外
- exception GEOSException
- 基本GEOS例外は、GEOS関連のエラーを示します。