GEOS API —Djangoドキュメント

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

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 –ジオメトリ入力値(文字列またはバッファ)
  • sridint )–空間参照識別子

これは、すべての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
ジオメトリの寸法を返します。
GEOSGeometry.empty
ジオメトリ内のポイントのセットが空であるかどうかを返します。
GEOSGeometry.geom_type

ジオメトリのタイプに対応する文字列を返します。 例えば:

>>> pnt = GEOSGeometry('POINT(5 23)')
>>> pnt.geom_type
'Point'
GEOSGeometry.geom_typeid

GEOSジオメトリタイプの識別番号を返します。 次の表に、各ジオメトリタイプの値を示します。

ジオメトリ

ID

Point

0

LineString

1

LinearRing

2

Polygon

3

MultiPoint

4

MultiLineString

5

MultiPolygon

6

GeometryCollection

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文字の文字列:{TF*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.project()の逆。

GEOSGeometry.intersection(other)
このジオメトリと他のジオメトリが共有するポイントを表す GEOSGeometry を返します。
GEOSGeometry.project(point)
GEOSGeometry.project_normalized(point)

ジオメトリの原点( LineString または MultiLineString )からジオメトリに投影されたポイント(つまり、指定されたものに最も近いラインのポイントまで)までの距離(フロート)を返します。点)。 正規化されたバージョンは、0(原点)と1(終点)の間の浮動小数点数として距離を返します。

GEOSGeometry.interpolate()の逆。

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文字列、 SpatialReference オブジェクト、またはの場合があります。 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)が最初と最後の座標であることに注意してください。これらが等しくない場合、エラーが発生します。

is_counterclockwise

バージョン3.1の新機能。

このLinearRingが反時計回りであるかどうかを返します。


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を返します。


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)
パラメーター
  • stringstr )–空間データを含む文字列

  • sridint )–空間参照識別子

リターンタイプ

文字列内の空間データに対応する 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.outdimtrim 、および 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関連のエラーを示します。