GEOS API¶
背景¶
GEOS とは?¶
GEOS は Geometry Engine - Open Source の略であり、C++ライブラリであり、 Java Topology Suite から移植されました。GEOS は OpenGIS の Simple Features for SQL 空間記述関数や空間演算子を実装しています。GEOS は現在、OSGeo プロジェクトとなっており、もともとはカナダ・ビクトリアの Refractions Research によって開発・維持されていました。
特徴¶
GeoDjango は GEOS ライブラリの高レベルな Python ラッパーを実装しており、その機能には次のものがあります:
ctypes
を使用して純粋に Python で実装された GEOS ジオメトリルーチンへの BSD ライセンスのインターフェイス。- GeoDjango とは疎結合です。たとえば、
GEOSGeometry
オブジェクトは Django プロジェクト/アプリケーションの外でも使用可能です。つまり、DJANGO_SETTINGS_MODULE
を設定したり、データベースを使用する必要はありません。 - ミュータビリティ (Mutability):
GEOSGeometry
オブジェクトは変更可能です。 - クロスプラットフォームでテスト済みであり、Windows、Linux、Solaris、macOSプラットフォームと互換性があります。
チュートリアル¶
このセクションには、 GEOSGeometry
オブジェクトの簡単な紹介とチュートリアルが含まれています。
ジオメトリを作成する¶
GEOSGeometry
オブジェクトはいくつかの方法で作成できます。最初の方法は、単純に空間入力のオブジェクトをインスタンス化することです。以下は、同じジオメトリを WKT、HEX、WKB、GeoJSON から作成する例です:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry("POINT(5 23)") # WKT
>>> pnt = GEOSGeometry("010100000000000000000014400000000000003740") # HEX
>>> pnt = GEOSGeometry(
... memoryview(
... b"\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@"
... )
... ) # WKB
>>> pnt = GEOSGeometry(
... '{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }'
... ) # GeoJSON
もう一つの方法は、作成したい特定のジオメトリタイプのコンストラクタを使用することです。たとえば、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らしい) であり、要素には標準的な Python 形式を使ってアクセスしたり変更したり、イテレートしたりできます。例えば、Point
の座標をイテレートできます:
>>> pnt = Point(5, 23)
>>> [coord for coord in pnt]
[5.0, 23.0]
ジオメトリオブジェクトの GEOSGeometry.coords
プロパティを使用すると、ジオメトリ座標を Python のタプルで取得できます:
>>> pnt.coords
(5.0, 23.0)
標準の Python インデックス形式を使用して、ジオメトリオブジェクトを取得または設定できます。ただし、返されるものはオブジェクトのジオメトリタイプに依存します。例えば、LineString
に対してインデックスを使用すると、座標の Python タプルが返されます:
>>> 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))
ジオメトリーは set のような演算子をサポートします:
>>> 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_exact()
を使用します。equals()
ではありません。つまり、比較されるジオメトリは、同じ座標、同じ位置、同じ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 -- ジオメトリ入力値 (文字列または
memoryview
) - srid (int) -- 空間参照識別子
- geo_input -- ジオメトリ入力値 (文字列または
これはすべての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 | memoryview |
GeoJSON | str |
GeoJSON形式では、SRIDは crs
メンバーに基づいて設定されます。もし crs
が指定されていない場合、SRIDはデフォルトで4326になります。
-
classmethod
GEOSGeometry.
from_gml
(gml_string)¶ 与えられたGML文字列から
GEOSGeometry
を構築します。
プロパティ¶
-
GEOSGeometry.
coords
¶ ジオメトリの座標をタプルで返します。
-
GEOSGeometry.
dims
¶ ジオメトリの次元を返します:
Point
およびMultiPoint
に対しては0
LineString
およびMultiLineString
に対しては1
Polygon
およびMultiPolygon
に対しては2
です。GeometryCollection
が空の場合は-1
を返します。- 空ではない
GeometryCollection
の要素の最大次元
-
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
¶ 与えられたジオメトリが "simple" であるかどうかを示す真偽値を返します。ジオメトリが "simple" であるのは、自分自身と交差しない場合に限ります (境界点での交差を除く) 。例えば、
LineString
オブジェクトは、自分自身と交差すると "simple" ではありません。したがって、定義上自身と交差しないため、LinearRing
やPolygon
オブジェクトは常に "simple" です。
-
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-Known Text を返します。この表現は PostGIS に固有であり、OGC WKT 標準のスーパーセットです。 [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 シリアライザ も参照してください。
-
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 値は含まれません。代わりに、
ewkb
プロパティを使用してください。
-
GEOSGeometry.
ewkb
¶ このジオメトリの EWKB 表現を Python バッファとして返します。これは、このジオメトリの一部であるすべての SRID 値を含む WKB 仕様の拡張です。
-
GEOSGeometry.
wkt
¶ ジオメトリの Well-Known Text (OGC標準) を返します。
空間述語メソッド (Spatial Predicate Method)¶
以下の空間述語 (predicate) メソッドは、別の GEOSGeometry
インスタンス (other
) をパラメータとして受け取り、真偽値を返します。
-
GEOSGeometry.
contains
(other)¶ other.within(this)
がTrue
を返した場合にTrue
を返します。
-
GEOSGeometry.
covers
(other)¶ このジオメトリが指定したジオメトリをカバーしている場合は
True
を返します。covers
predicate は以下の定義と等価です:- もう一方のジオメトリのすべての点は、このジオメトリの点である。
- 2つのジオメトリの DE-9IM 交差行列は
T*****FF*
,*T****FF*
,***T**FF*
, または****T*FF*
である。
どちらかのジオメトリが空の場合、
False
を返します。この predicate は
GEOSGeometry.contains()
に似ていますが、より包括的です (つまり、より多くの場合にTrue
を返します) 。特に、contains()
とは異なり、ジオメトリの境界と内部の点を区別しません。ほとんどの場合、contains()
よりもcovers()
を優先すべきです。さらに、covers()
は最適化しやすいので、contains()
よりも優れています。
-
GEOSGeometry.
crosses
(other)¶ 2つのジオメトリの DE-9IM 交差行列が
T*T*******
(点と曲線、点と面積、線と面積の場合)0********
(2つの曲線の場合) である場合にTrue
を返します。
-
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.
equals_identical
(other)¶ - New in Django 5.0.
すべての次元において、すべての頂点の構造、順序、および値が同じであることをチェックすることにより、2つのジオメトリが点的に等価である場合に
True
を返します。NaN
値は他のNaN
値と等しいとみなされます。GEOS 3.12が必要です。
-
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
-- アルファベットから 9 文字の文字列と一致する場合にTrue
を返します: {T
,F
,*
,0
} の9文字の文字列。
-
GEOSGeometry.
touches
(other)¶ 2つのジオメトリのDE-9IM交差行列が
FT*******
,F**T*****
またはF***T****
である場合にTrue
を返します。
-
GEOSGeometry.
within
(other)¶ 2つのジオメトリの DE-9IM 交差行列が
T*F**F***
である場合にTrue
を返します。
トポロジー的 (Topological) メソッド¶
-
GEOSGeometry.
buffer
(width, quadsegs=8)¶ このジオメトリからの距離が与えられた
width
以下のすべての点を表すGEOSGeometry
を返す。オプションのquadsegs
キーワードは、1/4円の近似に使用するセグメントの数を設定します (デフォルトは8) 。
-
GEOSGeometry.
buffer_with_style
(width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0)¶ buffer()
と同じですが、バッファのスタイルをカスタマイズできます。end_cap_style
には、round (1
) 、flat (2
) 、square (3
) を指定できます。join_style
には round (1
) 、mitre (2
) 、bevel (3
) のいずれかを指定します。- Mitre レシオ制限 (
mitre_limit
) は、mitre 形式の結合スタイルにのみ影響します。
-
GEOSGeometry.
difference
(other)¶ このジオメトリを構成する点のうち、他の点を構成しない点を表す
GEOSGeometry
を返す。
-
GEOSGeometry.
interpolate
(distance)¶
-
GEOSGeometry.
interpolate_normalized
(distance)¶ 与えられた距離 (float) に対する、その距離上の点 (またはもっとも近い点) を返します。この距離は、
LineString
またはMultiLineString
のジオメトリであり、正規化されたバージョンでは、0 (始点) から 1 (終点) の値を取る float 型として距離の値を取ります。
-
GEOSGeometry.
intersection
(other)¶ このジオメトリと他のジオメトリが共有する点を表す
GEOSGeometry
を返す。
-
GEOSGeometry.
project
(point)¶
-
GEOSGeometry.
project_normalized
(point)¶ ジオメトリ (
LineString
またはMultiLineString
) の原点から、ジオメトリに投影された点 (つまり、指定された点に最も近い線の点) までの距離 (float) を返します。正規化されたバージョンは、0 (原点) と 1 (終点) の間の浮動小数点数として距離を返します。
-
GEOSGeometry.
relate
(other)¶ このジオメトリと他のジオメトリのトポロジカルな関係を表す DE-9IM 交差行列 (文字列) を返します。
-
GEOSGeometry.
simplify
(tolerance=0.0, preserve_topology=False)¶ 新しい
GEOSGeometry
を返します。これは Douglas-Peucker アルゴリズムを用いて、指定した許容誤差まで単純化されます。許容誤差の値が大きいほど、出力される点は少なくなります。公差が指定されない場合、デフォルトは0です。デフォルトでは、この関数はトポロジーを保持しません。例えば、
Polygon
オブジェクトは分割されたり、線に折りたたまれたり、消えたりすることがあります。Polygon
の穴ができたり消えたり、線が交差したりすることがあります。preserve_topology=True
を指定することで、結果は入力と同じ次元と要素数になります。
-
GEOSGeometry.
sym_difference
(other)¶ このジオメトリに含まれる点のうち他のジオメトリに含まれない点と、他のジオメトリに含まれる点のうちこのジオメトリに含まれない点を結合した
GEOSGeometry
を返す。
-
GEOSGeometry.
union
(other)¶ このジオメトリともう一方のジオメトリのすべての点を表す
GEOSGeometry
を返す。
トポロジー的プロパティ¶
-
GEOSGeometry.
boundary
¶ 新しく割り当てられた Geometry オブジェクトとして境界を返します。
-
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の距離計算は線形です。言い換えると、GEOSはSRIDが地理座標系を指定していても球面計算を行いません。
-
GEOSGeometry.
length
¶ このジオメトリの長さを返します (例:
Point
の場合は 0、LineString
の長さ、またはPolygon
の円周)。
-
GEOSGeometry.
prepared
¶ このジオメトリの内容の GEOS
PreparedGeometry
を返します。PreparedGeometry
オブジェクトは、contains、intersects、covers、crosss、disjoint、overlaps、touches、および within の操作に最適化されています。詳細は 準備された (Prepared) ジオメトリ のドキュメントを参照してください。
-
GEOSGeometry.
srs
¶ ジオメトリの SRID に対応する
SpatialReference
オブジェクト、またはNone
を返します。
-
GEOSGeometry.
transform
(ct, clone=False)¶ 与えられた座標変換パラメータ (
ct
) に従ってジオメトリを変換します。座標変換パラメータは、整数の SRID、空間参照の WKT 文字列、PROJ 文字列、SpatialReference
オブジェクト、CoordTransform
オブジェクトのいずれかです。デフォルトでは、ジオメトリはその場で変換され、何も返されません。しかし、clone
キーワードが設定されている場合、ジオメトリは変更されず、変換されたジオメトリのクローンが返されます。注釈
GDALが利用できないか、ジオメトリのSRIDが
None
または0未満の場合にGEOSException
を発生させます。CoordTransform
オブジェクトを使用して呼び出される場合、ジオメトリのSRIDには制約を与えません。
-
GEOSGeometry.
make_valid
()¶ 入力された頂点を失わず、有効な
GEOSGeometry
に変換して返します。既に有効なジオメトリの場合、そのまま返されます。これはMakeValid
データベース関数に類似しています。GEOS 3.8が必要です。
-
GEOSGeometry.
normalize
(clone=False)¶ このジオメトリを正規形に変換します。
clone
キーワードがセットされている場合、ジオメトリは変更されず、代わりにジオメトリの正規化されたクローンが返されます:>>> 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
¶
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))
ポリゴン(多角形)の比較
ポリゴンのオブジェクトを直接 <
や >
と比較することも可能ですが、比較はポリゴンの LineString
を通して行われるため、あまり意味がないことに注意してください (しかし、一貫性があり、素早く比較できます) 。 area
プロパティで常に強制的に比較することもできます:
>>> if poly_1.area > poly_2.area:
... pass
...
ジオメトリのコレクション¶
MultiPoint
¶
MultiLineString
¶
-
class
MultiLineString
(*args, **kwargs)[ソース]¶ MultiLineString
オブジェクトは、LineString
オブジェクトを引数として渡すか、1つの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
¶
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))
準備された (Prepared) ジオメトリ¶
事前に準備された prepared ジオメトリを取得するには、 GEOSGeometry.prepared
プロパティにアクセスします。 PreparedGeometry
インスタンスを取得したら、以下にリストされているその空間述語 (predicate) メソッドを他の GEOSGeometry
オブジェクトで使用できます。prepared ジオメトリを使った操作は、桁違いに高速になることがあります。prepared ジオメトリがより複雑な場合、操作は大いに高速化されます。詳細については、 GEOS wiki page on prepared geometries. を参照してください。
例:
>>> 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
ジオメトリ ファクトリ¶
-
fromfile
(file_h)[ソース]¶ パラメータ: file_h (a Python file
object or a string path to the file) -- 空間データを含む入力ファイル戻り値の型: ファイル内の空間データに対応する GEOSGeometry
例:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile("/home/bob/geom.wkt")
-
fromstr
(string, srid=None)[ソース]¶ パラメータ: 戻り値の型: 文字列内の空間データに対応する
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 オブジェクト¶
Reader オブジェクト¶
Reader I/Oクラスは、 read(geom)
メソッドに渡されたWKBおよび/またはWKT入力から GEOSGeometry
インスタンスを返します。
Writer オブジェクト¶
すべての Writer オブジェクトは write(geom)
メソッドを持っており、与えられたジオメトリの WKB または WKT を返します。さらに、WKBWriter
オブジェクトは、バイトオーダーを変更したり、SRID 値 (言い換えれば、EWKB) を含めるために使用できるプロパティも持っています。
-
class
WKBWriter
(dim=2)[ソース]¶ WKBWriter
はその出力を最もコントロールできます。デフォルトでは、write
メソッドが呼ばれると OGC 準拠の WKB を返します。ただし、追加情報を含むWKB標準のスーパーセットであるEWKBを作成できるプロパティも持っています。引数dim
の詳細についてはWKBWriter.outdim
のドキュメントを参照してください。与えられたジオメトリの 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>
ジオメトリの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'
このプロパティは、ジオメトリ表現の出力次元を変更するために設定できます。つまり、3D ジオメトリの場合は 3 に設定し、Z 値が WKB に含まれるようにします。
Outdim 値 説明 2 デフォルトで、2次元のWKBを出力します。 3 3D の WKB を出力します。 例:
>>> 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が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
属性を参照してください。与えられたジオメトリの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
を参照。
このプロパティは、不要な小数のトリミングを有効または無効にするために使用されます。
>>> 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)'
このプロパティは座標の丸め精度をコントロールします。もし
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 and Canonical Forms, PostGIS documentation at Ch. 4.1.2. |