地理データベース関数—Djangoドキュメント

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

地理データベース機能

このページに記載されている関数を使用すると、ユーザーは、Djangoの注釈、集計、またはフィルターで使用される地理データベース関数にアクセスできます。

例:

>>> from django.contrib.gis.db.models.functions import Length
>>> Track.objects.annotate(length=Length('line')).filter(length__gt=100)

すべてのバックエンドがすべての機能をサポートしているわけではないため、各機能のドキュメントを参照して、データベースバックエンドが使用する機能をサポートしているかどうかを確認してください。 サポートされていないバックエンドで地理関数を呼び出すと、NotImplementedError例外が発生します。

関数の要約:

計測 関係 オペレーション 編集者 出力フォーマット その他
Area Azimuth Difference ForcePolygonCW AsGeoJSON IsValid
Distance BoundingCircle Intersection MakeValid AsGML MemSize
GeometryDistance Centroid SymDifference Reverse AsKML NumGeometries
Length Envelope Union Scale AsSVG NumPoints
Perimeter LineLocatePoint SnapToGrid AsWKB
PointOnSurface Transform AsWKT
Translate GeoHash

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)、Oracle、 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に設定します。 Oracleでは無視されます。
crs 返されるGeoJSONに座標参照系を含める場合は、これをTrueに設定します。 MySQLとOracleでは無視されます。
precision GeoJSON表現の座標の有効桁数を指定するために使用できます。デフォルト値は8です。 Oracleでは無視されます。

バージョン3.1で変更: Oracleサポートが追加されました。


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です。

バージョン3.1で変更:文書化されていないversionパラメーターが削除されました。


AsSVG

class AsSVG(expression, relative=False, precision=8, **extra)

可用性PostGIS 、SpatiaLite

単一の地理フィールドまたは式を受け入れ、ジオメトリの Scalable Vector Graphics(SVG)表現を返します。

キーワード引数 説明
relative Trueに設定すると、パスデータは相対移動の観点から実装されます。 デフォルトはFalseです。これは、代わりに絶対移動が使用されることを意味します。
precision このキーワードは、SVG表現の座標の有効桁数を指定するために使用できます。デフォルト値は8です。


AsWKB

class AsWKB(expression, **extra)

バージョン3.1の新機能。


可用性:MariaDB、 MySQL 、Oracle、 PostGIS 、SpatiaLite

単一の地理フィールドまたは式を受け入れ、ジオメトリの既知のバイナリ(WKB)表現を返します。

例:

>>> bytes(City.objects.annotate(wkb=AsWKB('point')).get(name='Chelyabinsk').wkb)
b'\x01\x01\x00\x00\x00]3\xf9f\x9b\x91K@\x00X\x1d9\xd2\xb9N@'

AsWKT

class AsWKT(expression, **extra)

バージョン3.1の新機能。


可用性:MariaDB、 MySQL 、Oracle、 PostGIS 、SpatiaLite

単一の地理フィールドまたは式を受け入れ、ジオメトリの Well-known text(WKT)表現を返します。

例:

>>> City.objects.annotate(wkt=AsWKT('point')).get(name='Chelyabinsk').wkt
'POINT (55.137555 61.451728)'

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)

可用性PostGISOracle

単一の地理フィールドまたは式を受け入れ、ジオメトリを完全に含むことができる最小の円ポリゴンを返します。

num_segパラメーターはPostGISでのみ使用されます。


Centroid

class Centroid(expression, **extra)

可用性:MariaDB、 MySQLPostGIS 、Oracle、SpatiaLite

単一の地理フィールドまたは式を受け入れ、ジオメトリのcentroid値を返します。


Difference

class Difference(expr1, expr2, **extra)

可用性:MariaDB、 MySQLPostGIS 、Oracle、SpatiaLite

2つの地理フィールドまたは式を受け入れ、ジオメトリの違いを返します。これは、ジオメトリBと交差しないジオメトリAの部分です。


Distance

class Distance(expr1, expr2, spheroid=None, **extra)

可用性:MariaDB、 MySQLPostGIS 、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、 MySQLOraclePostGIS 、SpatiaLite

単一の地理フィールドまたは式を受け入れ、ジオメトリの境界ボックスを表すジオメトリを返します。


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)

可用性PostGIS

2つの地理フィールドまたは式を受け入れ、それらの間の距離を返します。 order_by()句で使用すると、インデックス支援の最近傍結果セットが提供されます。


Intersection

class Intersection(expr1, expr2, **extra)

可用性:MariaDB、 MySQLPostGIS 、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、 MySQLPostGIS 、Oracle、SpatiaLite

単一の地理フィールドまたは式を受け入れ、ジオメトリフィールドがコレクションの場合はジオメトリの数を返します(たとえば、GEOMETRYCOLLECTIONまたはMULTI*フィールド)。 単一のジオメトリの場合は1を返します。

MySQLでは、単一のジオメトリに対してNoneを返します。


NumPoints

class NumPoints(expression, **extra)

可用性:MariaDB、 MySQLPostGIS 、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

単一の地理フィールドまたは式を受け入れ、xy、およびオプションで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、 MySQLPostGIS 、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

単一の地理フィールドまたは式を受け入れ、座標がxy、およびオプションでz数値パラメーターによってオフセットされたジオメトリを返します。


Union

class Union(expr1, expr2, **extra)

可用性:MariaDB、 MySQLPostGIS 、Oracle、SpatiaLite

2つの地理フィールドまたは式を受け入れ、両方のジオメトリの和集合を返します。