地理データベース機能
このページに記載されている関数を使用すると、ユーザーは、Djangoの注釈、集計、またはフィルターで使用される地理データベース関数にアクセスできます。
例:
>>> from django.contrib.gis.db.models.functions import Length
>>> Track.objects.annotate(length=Length('line')).filter(length__gt=100)
すべてのバックエンドがすべての機能をサポートしているわけではないため、各機能のドキュメントを参照して、データベースバックエンドが使用する機能をサポートしているかどうかを確認してください。 サポートされていないバックエンドで地理関数を呼び出すと、NotImplementedError
例外が発生します。
関数の要約:
Area
- class Area(expression, **extra)
可用性:MariaDB、 MySQL 、Oracle、 PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、フィールドの面積を Area メジャーとして返します。
LWGEOMを使用しないMySQLおよびSpatiaLiteは、地理的SRSでの面積計算をサポートしていません。
AsGeoJSON
- class AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra)
可用性:MariaDB(≥10.2.4)、 MySQL (≥5.7.5)、 PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリの GeoJSON 表現を返します。 結果は完全なGeoJSON構造ではなく、GeoJSON構造のgeometry
キーコンテンツのみであることに注意してください。 GeoJSON Serializer も参照してください。
例:
>>> City.objects.annotate(json=AsGeoJSON('point')).get(name='Chicago').json
{"type":"Point","coordinates":[-87.65018,41.85039]}
キーワード引数 | 説明 |
---|---|
bbox
|
返されるGeoJSONにバウンディングボックスを含める場合は、これをTrue に設定します。
|
crs
|
返されるGeoJSONに座標参照系を含める場合は、これをTrue に設定します。 MySQLでは無視されます。
|
precision
|
GeoJSON表現の座標の有効桁数を指定するために使用できます。デフォルト値は8です。 |
AsGML
- class AsGML(expression, version=2, precision=8, **extra)
可用性:Oracle、 PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリの Geographic Markup Language(GML)表現を返します。
例:
>>> qs = Zipcode.objects.annotate(gml=AsGML('poly'))
>>> print(qs[0].gml)
<gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ...
-147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon>
キーワード引数 | 説明 |
---|---|
precision
|
GML表現の座標の有効桁数を指定します。デフォルト値は8です。 Oracleでは無視されます。 |
version
|
使用するGMLバージョンを指定します:2(デフォルト)または3。 |
AsKML
- class AsKML(expression, precision=8, **extra)
可用性: PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリの Keyhole Markup Language(KML)表現を返します。
例:
>>> qs = Zipcode.objects.annotate(kml=AsKML('poly'))
>>> print(qs[0].kml)
<Polygon><outerBoundaryIs><LinearRing><coordinates>-103.04135,36.217596,0 ...
-103.04135,36.217596,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
キーワード引数 | 説明 |
---|---|
precision
|
このキーワードは、KML表現の座標の有効桁数を指定するために使用できます。デフォルト値は8です。 |
AsSVG
- class AsSVG(expression, relative=False, precision=8, **extra)
可用性: PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリの Scalable Vector Graphics(SVG)表現を返します。
キーワード引数 | 説明 |
---|---|
relative
|
True に設定すると、パスデータは相対移動の観点から実装されます。 デフォルトはFalse です。これは、代わりに絶対移動が使用されることを意味します。
|
precision
|
このキーワードは、SVG表現の座標の有効桁数を指定するために使用できます。デフォルト値は8です。 |
Azimuth
- class Azimuth(point_a, point_b, **extra)
可用性: PostGIS 、SpatiaLite(LWGEOM)
指定されたポイントジオメトリで定義されたセグメントの方位角をラジアンで返します。2つのポイントが一致する場合はNone
を返します。 方位角は北から参照される角度であり、時計回りに正です。north= 0
; 東= π/2
; 南= π
; 西= 3π/2
。
BoundingCircle
- class BoundingCircle(expression, num_seg=48, **extra)
単一の地理フィールドまたは式を受け入れ、ジオメトリを完全に含むことができる最小の円ポリゴンを返します。
num_seg
パラメーターはPostGISでのみ使用されます。
Centroid
- class Centroid(expression, **extra)
可用性:MariaDB、 MySQL 、 PostGIS 、Oracle、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリのcentroid
値を返します。
Difference
- class Difference(expr1, expr2, **extra)
可用性:MariaDB、 MySQL 、 PostGIS 、Oracle、SpatiaLite
2つの地理フィールドまたは式を受け入れ、ジオメトリの違いを返します。これは、ジオメトリBと交差しないジオメトリAの部分です。
Distance
- class Distance(expr1, expr2, spheroid=None, **extra)
可用性:MariaDB、 MySQL 、 PostGIS 、Oracle、SpatiaLite
2つの地理フィールドまたは式を受け入れ、それらの間の距離を Distance オブジェクトとして返します。 MySQLでは、座標が測地系の場合、生の浮動小数点値が返されます。
測地座標での距離計算をサポートするバックエンドでは、ジオメトリのSRID値に応じて適切なバックエンド関数が自動的に選択されます(例: PostGISの ST_DistanceSphere )。
デフォルトのWGS84(4326)SRIDの場合のように、距離が測地(角度)座標で計算される場合、spheroid
キーワード引数を設定して、計算が単純な球に基づくべきかどうかを決定できます(正確でリソースをあまり消費しない)または回転楕円体(より正確でリソースを大量に消費する)。
次の例では、ホバート市からAustraliaCity
クエリセット内の他のすべての PointField までの距離が計算されます。
>>> from django.contrib.gis.db.models.functions import Distance
>>> pnt = AustraliaCity.objects.get(name='Hobart').point
>>> for city in AustraliaCity.objects.annotate(distance=Distance('point', pnt)):
... print(city.name, city.distance)
Wollongong 990071.220408 m
Shellharbour 972804.613941 m
Thirroul 1002334.36351 m
...
ノート
distance
属性は Distance オブジェクトであるため、選択した単位で値を簡単に表すことができます。 たとえば、city.distance.mi
はマイル単位の距離値であり、city.distance.km
はキロメートル単位の距離値です。 使用方法の詳細およびサポートされているユニットのリストについては、測定オブジェクトを参照してください。
Envelope
- class Envelope(expression, **extra)
可用性:MariaDB、 MySQL 、 Oracle 、 PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリの境界ボックスを表すジオメトリを返します。
バージョン2.2で変更: Oracleサポートが追加されました。
ForcePolygonCW
- class ForcePolygonCW(expression, **extra)
可用性: PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、すべての外部リングが時計回りに方向付けられ、すべての内部リングが反時計回りに方向付けられているポリゴン/マルチポリゴンの修正バージョンを返します。 非ポリゴンジオメトリは変更されずに返されます。
GeoHash
- class GeoHash(expression, precision=None, **extra)
可用性: MySQL (≥5.7.5)、 PostGIS 、SpatiaLite(LWGEOM)
単一の地理フィールドまたは式を受け入れ、ジオメトリの GeoHash 表現を返します。
precision
キーワード引数は、結果の文字数を制御します。
GeometryDistance
- class GeometryDistance(expr1, expr2, **extra)
バージョン3.0の新機能。
可用性: PostGIS
2つの地理フィールドまたは式を受け入れ、それらの間の距離を返します。 order_by()句で使用すると、インデックス支援の最近傍結果セットが提供されます。
Intersection
- class Intersection(expr1, expr2, **extra)
可用性:MariaDB、 MySQL 、 PostGIS 、Oracle、SpatiaLite
2つの地理フィールドまたは式を受け入れ、それらの間の幾何学的交差を返します。
IsValid
- class IsValid(expr)
可用性: MySQL (≥5.7.5)、 PostGIS 、Oracle、SpatiaLite(LWGEOM)
地理的なフィールドまたは式を受け入れ、値が適切に形成されているかどうかをテストします。 値が有効なジオメトリの場合はTrue
を返し、そうでない場合はFalse
を返します。
Length
- class Length(expression, spheroid=True, **extra)
可用性:MariaDB、 MySQL 、Oracle、 PostGIS 、SpatiaLite
単一の地理的ラインストリングまたはマルチラインストリングフィールドまたは式を受け入れ、その長さを距離メジャーとして返します。
PostGISとSpatiaLiteで、座標が測地(角度)の場合、計算を単純な球(精度が低く、リソースをあまり消費しない)に基づくか、回転楕円体(より正確で、リソースを大量に消費する)に基づくかを指定できます。 spheroid
キーワード引数。
MySQLは、地理的なSRSでの長さの計算をサポートしていません。
LineLocatePoint
- class LineLocatePoint(linestring, point, **extra)
可用性: PostGIS 、SpatiaLite
linestring
上の指定されたpoint
に最も近い点の位置を表す0から1までの浮動小数点数を、2D線の長さの分数として返します。
MakeValid
- class MakeValid(expr)
可用性: PostGIS 、SpatiaLite(LWGEOM)
地理フィールドまたは式を受け入れ、入力頂点を失うことなく値を有効なジオメトリに変換しようとします。 すでに有効なジオメトリは、変更なしで返されます。 単純なポリゴンはマルチポリゴンになり、結果は入力よりも低次元になる可能性があります。
MemSize
- class MemSize(expression, **extra)
可用性: PostGIS
単一の地理フィールドまたは式を受け入れ、ジオメトリフィールドが使用するメモリサイズ(バイト数)を返します。
NumGeometries
- class NumGeometries(expression, **extra)
可用性:MariaDB、 MySQL 、 PostGIS 、Oracle、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリフィールドがコレクションの場合はジオメトリの数を返します(たとえば、GEOMETRYCOLLECTION
またはMULTI*
フィールド)。 単一のジオメトリの場合は1を返します。
MySQLでは、単一のジオメトリに対してNone
を返します。
NumPoints
- class NumPoints(expression, **extra)
可用性:MariaDB、 MySQL 、 PostGIS 、Oracle、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリ内のポイントの数を返します。
MySQLでは、LINESTRING
以外のジオメトリに対してNone
を返します。
Perimeter
- class Perimeter(expression, **extra)
可用性: PostGIS 、Oracle、SpatiaLite
単一の地理フィールドまたは式を受け入れ、ジオメトリフィールドの周囲を Distance オブジェクトとして返します。
PointOnSurface
- class PointOnSurface(expression, **extra)
可用性: PostGIS 、MariaDB、Oracle、SpatiaLite
単一の地理的フィールドまたは式を受け入れ、フィールドの表面にあることが保証されているPoint
ジオメトリを返します。 それ以外の場合は、None
を返します。
Reverse
- class Reverse(expression, **extra)
可用性: PostGIS 、Oracle、SpatiaLite
単一の地理フィールドまたは式を受け入れ、座標が逆のジオメトリを返します。
Scale
- class Scale(expression, x, y, z=0.0, **extra)
可用性: PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、x
、y
、およびオプションでz
パラメーターを乗算することにより、スケーリングされた座標を持つジオメトリを返します。
SnapToGrid
- class SnapToGrid(expression, *args, **extra)
可用性: PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、すべてのポイントが指定されたグリッドにスナップされたジオメトリを返します。 ジオメトリがグリッドにスナップされる方法は、指定された数値(float、integer、またはlong)引数の数によって異なります。
引数の数 | 説明 |
---|---|
1 | XグリッドとYグリッドの両方をスナップする単一のサイズ。 |
2 | グリッドをスナップするXおよびYサイズ。 |
4 | X、Yサイズおよび対応するX、Y原点。 |
SymDifference
- class SymDifference(expr1, expr2, **extra)
可用性:MariaDB、 MySQL 、 PostGIS 、Oracle、SpatiaLite
2つの地理フィールドまたは式を受け入れ、指定されたパラメーター間の幾何学的対称差(交差のない和集合)を返します。
Transform
- class Transform(expression, srid, **extra)
可用性: PostGIS 、Oracle、SpatiaLite
地理フィールドまたは式とSRID整数コードを受け入れ、変換されたジオメトリをsrid
パラメーターで指定された空間参照系に返します。
ノート
整数SRIDが対応する空間参照系は、使用する空間データベースによって異なります。 言い換えれば、Oracleで使用されるSRID番号は、PostGISで使用されるものと必ずしも同じではありません。
Translate
- class Translate(expression, x, y, z=0.0, **extra)
可用性: PostGIS 、SpatiaLite
単一の地理フィールドまたは式を受け入れ、座標がx
、y
、およびオプションでz
数値パラメーターによってオフセットされたジオメトリを返します。