# Dokumentasi Django 5.2.8

# Fungsi Basisdata Geografis

Fungsi-fungsi terdokumentasi pada halaman ini mengizinkan pengguna mengakses fungsi basisdata geografis untuk digunakan dalam keterangan, pengumpulan, atau penyaringan dalam Django.

Example:

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

Tidak semua backend mendukung semua fungsi, jadi mengacu pada dokumentasi dari setiap fungsi untuk melihat jika backend basisdata anda mendukung anda ingin gunakan. Jika anda memanggil fungsi geografis pada backend yang tidak mendukung itu, anda akan mendapatkan pengecualian `NotImplementedError`.

## Measurements

### `Area`

class Area(expression, **extra)

Availability: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan kawasan bidang sebagai sebuah ukuran `Area`.

MySQL and SpatiaLite without LWGEOM/RTTOPO don't support area calculations on geographic SRSes.

### `Distance`

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

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima dua bidang geografis atau pernyataan dan mengembalikan jarak diantara mereka, seperti sebuah obyek `Distance`, nilai float mentah dikembalikan ketika kordinat adalah geodetik.

Pada backend yang mendukung perhitungan jarak pada kordinat geodetik, fungsi backend sesuai otomatis dipilih tergantung pada nilai SRID dari geometri (misalnya ST_DistanceSphere pada PostGIS).

Ketika jarak dihitung dengan kordinat (bersiku-siku) geodetic, seperti halnya dengan awalan SRID WGS84 (4326), anda dapat menyetel argumen kata kunci `spheroid` untuk memutuskan jika perhitungan harus berdasarkan pada bulatan sederhana (kurang akurat, kurang sumber daya-intensif) atau pada sebuah berbentuk bola (lebih akurat, lebih sumber daya-intensif)

In the following example, the distance from the city of Hobart to every other `PointField` in the `AustraliaCity` queryset is calculated:

    >>> 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
    ...

Catatan

Because the `distance` attribute is a `Distance` object, you can easily express the value in the units of your choice. For example, `city.distance.mi` is the distance value in miles and `city.distance.km` is the distance value in kilometers. See Obyek Pengukuran for usage details and the list of Satuan Didukung.

### `GeometryDistance`

class GeometryDistance(expr1, expr2, **extra)

Ketersediaan: PostGIS

Accepts two geographic fields or expressions and returns the distance between them. When used in an `order_by()` clause, it provides index-assisted nearest-neighbor result sets.

### `Length`

class Length(expression, spheroid=True, **extra)

Ketersediaan: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Menerima bidang linestring geografis tunggal atau banyak linestring atau pernyataan dan mengembalikan panjangnya sebagai ukuran `Distance`.

Pada PostGIS dan SpatiaLite, ketika kordinat adalah geodetik (siku), anda dapat menentukan jika perhitungan harus berdasarkan pada bidang sederhana (kurang akurat, kurang sumber-daya-intensif) atau pada sebuah bidang (lebih akurat, lebih sumber-daya-intensif) dengan argumen kata kunci `spheroid`.

MySQL tidak mendukung dukungan perhitungan panjang pada geografis SRS.

### `Perimeter`

class Perimeter(expression, **extra)

Tersedia: PostGIS, Oracle, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan lingakran dari bidang geometri sebagai sebuah obyek `Distance`.

## Hubungan

### `Azimuth`

class Azimuth(point_a, point_b, **extra)

Ketersediaan: PostGIS, SpatiaLite (LWGEOM/RTTOPO)

Mengembalikan azimut dalam radian dari segmen ditentukan oleh titik geometri yang diberikan, atau `None` jila dia titik bertemu. Azimut adalah sudut diacukan dari utara dan positif jarumg jam: utara = `0`; timur= `π/2`; selatan = `π`; barat = `3π/2`.

### `BoundingCircle`

class BoundingCircle(expression, num_seg=48, **extra)

Ketersediaan: PostGIS, Oracle, SpatiaLite 5.1+

menerima bidang geografis tunggal atau pernyataan dan mengembalikan lingkaran poligon terkecil yang dapat sepenuhnya mengandung geometri.

Parameter `num_seg` hanya digunakan pada PostGIS.

### `Centroid`

class Centroid(expression, **extra)

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima bidang geografis tunggal atau mengembalikan nilai `centroid` dari geometri.

### `ClosestPoint`

class ClosestPoint(expr1, expr2, **extra)

Ketersediaan: PostGIS, SpatiaLite

Accepts two geographic fields or expressions and returns the 2-dimensional point on geometry A that is closest to geometry B.

### `Envelope`

class Envelope(expression, **extra)

Ketersediaan: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan geometri mewakili kotak batasan dari geometri.

### `LineLocatePoint`

class LineLocatePoint(linestring, point, **extra)

Ketersediaan: PostGIS, SpatiaLite

Mengembalikan sebuah float diantara 0 dan 1 mewakili tempat dari titik terdekat di `linestring` pada `point` yang diberikan, sebagai sebuah pecahan dari panjang garis 2D.

### `PointOnSurface`

class PointOnSurface(expression, **extra)

Ketersediaan: PostGIS, MariaDB, Oracle, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan `Point` geometri dijamin berbohong pada permukaan dari bidang; sebaliknya mengembalikan `None`.

## Operasi

### `Difference`

class Difference(expr1, expr2, **extra)

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima dua bidang geografis atau pernyataan dan mengembalikan perbedaan geometri, yaitu bagian dari geometri A yang tidak berinteraksi dengan geometri B.

### `Intersection`

class Intersection(expr1, expr2, **extra)

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima dua bidang geografi dan pernyataan dan mengembalikan persimpangan geometri diantara mereka.

### `SymDifference`

class SymDifference(expr1, expr2, **extra)

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima dua bidang geografis atau pernyataan dan mengembalikan perbedaan simetrik geografis (penyatuan tanpa persimpangan) diantara parameter diberikan.

### `Union`

class Union(expr1, expr2, **extra)

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima dua bidang geografi atau pernyataan dan mengembalikan gabungan dari kedua geometri.

## Penyunting

### `ForcePolygonCW`

class ForcePolygonCW(expression, **extra)

Ketersediaan: PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan versi terubah dari poligon/banyak poligon dimana semua lingkaran eksterior diorientasikan searah jarum jam dan semua lingkaran interior berorientasikan berlawanan jarum jam. Geometri bukan-geometri dikembalikan tidak berubah.

### `MakeValid`

class MakeValid(expr)

Ketersediaan: PostGIS, SpatiaLite (LWGEOM/RTTOPO)

Menerima bidang geografis tunggal atau pernyataan dan berusaha merubah nilai menjadi geometri sah tanpakehilangan masukan simpul apapun. Geometri yang sudah sah dikembalikan tanpa perubahan. Poligon sederhana mungkin menjadi poligon banyak dan hasil mungkin berupa dimensi rendah daripada masukan.

### `Reverse`

class Reverse(expression, **extra)

Tersedia: PostGIS, Oracle, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan geometri dengan kordinat terbalik.

### `Rotate`

New in Django 6.0.

class Rotate(expression, angle, origin=None, **extra)

Availability: PostGIS

Rotates a geometry by a specified `angle` around the origin. Optionally, the rotation can be performed around a point, defined by the `origin` parameter.

### `Scale`

class Scale(expression, x, y, z=0.0, **extra)

Tersedia: PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan geometri dengan kordinat ditingkatkan dengan mengalikan mereka dengan parameter `x`, `y`, dan pilihannya `z`.

### `SnapToGrid`

class SnapToGrid(expression, *args, **extra)

Tersedia: PostGIS, SpatiaLite

Accepts a single geographic field or expression and returns a geometry with all points snapped to the given grid. How the geometry is snapped to the grid depends on how many numeric (either float, integer, or long) arguments are given.

Jumlah Argumen | Deskripsi
--- | ---
1 | A single size to snap both the X and Y grids to.
2 | X and Y sizes to snap the grid to.
4 | Ukuran X, Y dan berhubungan asli X,Y.

### `Transform`

class Transform(expression, srid, **extra)

Tersedia: PostGIS, Oracle, SpatiaLite

Menerima sebuah bidang geografis atau pernyataan dan kode integer SRID, dan mengembalikan geometri diubah ke sistem acuan spasial ditentukan oleh parameter `srid`.

Catatan

What spatial reference system an integer SRID corresponds to may depend on the spatial database used. In other words, the SRID numbers used for Oracle are not necessarily the same as those used by PostGIS.

### `Translate`

class Translate(expression, x, y, z=0.0, **extra)

Tersedia: PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan geometri dengan kordinat penyeimbangnya oleh parameter angka `x`, `y`, dan pilihannya `z`.

## Input format

### `FromWKB`

class FromWKB(expression, srid=0, **extra)

Ketersediaan: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Creates geometry from Well-known binary (WKB) representation. The optional `srid` argument allows to specify the SRID of the resulting geometry. `srid` is ignored on Oracle.

### `FromWKT`

class FromWKT(expression, srid=0, **extra)

Ketersediaan: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Creates geometry from Well-known text (WKT) representation. The optional `srid` argument allows to specify the SRID of the resulting geometry. `srid` is ignored on Oracle.

## Bentuk keluaran

### `AsGeoJSON`

class AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra)

Ketersediaan: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Accepts a single geographic field or expression and returns a GeoJSON representation of the geometry. Note that the result is not a complete GeoJSON structure but only the `geometry` key content of a GeoJSON structure. See also Penserial GeoJSON.

Example:

    >>> City.objects.annotate(json=AsGeoJSON("point")).get(name="Chicago").json
    {"type":"Point","coordinates":[-87.65018,41.85039]}

Argumen Katakunci | Deskripsi
--- | ---
`bbox` | Set this to `True` if you want the bounding box to be included in the returned GeoJSON. Ignored on Oracle.
`crs` | Set this to `True` if you want the coordinate reference system to be included in the returned GeoJSON. Ignored on MySQL and Oracle.
`ketelitian` | It may be used to specify the number of significant digits for the coordinates in the GeoJSON representation -- the default value is 8. Ignored on Oracle.

### `AsGML`

class AsGML(expression, version=2, precision=8, **extra)

Tersedia: Oracle, PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan perwakilan Geographic Markup Language (GML) dari geometri.

Example:

    >>> 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>

Argumen Katakunci | Deskripsi
--- | ---
`ketelitian` | Menentukan sejumlah angka penting untuk kordinat dalam perwakilan GML -- nilai awalan adalah 8. Abaikan pada Oracle.
`versi` | Menentukan versi GML untuk menggunakan: 2 (awalan) atau 3.

### `AsKML`

class AsKML(expression, precision=8, **extra)

Tersedia: PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan perwakilan Keyhole Markup Language (KML) dari geometri.

Example:

    >>> 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>

Argumen Katakunci | Deskripsi
--- | ---
`ketelitian` | Katakunci ini mungkin digunakan untuk menentukan sejumlah angka penting untuk kordinat dalam perwakilan KML -- nilai awalan adalah 8.

### `AsSVG`

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

Tersedia: PostGIS, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan sebuah perwakilan Scalable Vector Graphics (SVG) dari geometri.

Argumen Katakunci | Deskripsi
--- | ---
`relative` | Jika disetel ke `True`, jalur data akan diterapkan dalam ketentuan dari pergerakan relatif. Awalan menjadi ``False11, berarti bahwa perpindahan mutlak digunakan sebagai gantinya.
`ketelitian` | Katakunci mungkin digunakan untuk menentukan sejumlah angka penting untuk kordinat dalam perwakilan SVG -- nilai awalan adalah 8.

### `AsWKB`

class AsWKB(expression, **extra)

Ketersediaan: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Accepts a single geographic field or expression and returns a Well-known binary (WKB) representation of the geometry.

Example:

    >>> 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)

Ketersediaan: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Accepts a single geographic field or expression and returns a Well-known text (WKT) representation of the geometry.

Example:

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

### `GeoHash`

class GeoHash(expression, precision=None, **extra)

Availability: MariaDB, MySQL, PostGIS, SpatiaLite (LWGEOM/RTTOPO)

Menerima bidang geografi tunggal atau pernyataan dan mengembalikan perwakilan GeoHash dari geometri.

Argumen kata kunci `precision` mengendalikan sejumlah karakter dalam hasilnya.

Changed in Django 6.0:

MariaDB 12.0.1+ support was added.

## Bermacam-macam

### `IsEmpty`

class IsEmpty(expr)

Ketersediaan: PostGIS

Accepts a geographic field or expression and tests if the value is an empty geometry. Returns `True` if its value is empty and `False` otherwise.

### `IsValid`

class IsValid(expr)

Availability: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima sebuah bidang geografi atau pernyataan dan percobaan jika nilai berbentuk bagus. Mengembalikan `True` jika nilainya adalah geometri sah dan `False` sebaliknya.

Changed in Django 6.0:

MariaDB 12.0.1+ support was added.

### `GeometryType`

New in Django 6.0.

class GeometryType(expr)

Availability: PostGIS, Oracle 23c+, MariaDB, MySQL, SpatiaLite

Accepts a geographic field or expression and returns its geometry type.

### `MemSize`

class MemSize(expression, **extra)

Tersedia: PostGIS

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan ukuran memori (sejumlah byte) yang bidang geometri ambil.

### `NumGeometries`

class NumGeometries(expression, **extra)

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan sejumlah geometri jika bidang geometri adalah kumpulan (misalnya, bidang `GEOMETRYCOLLECTION` atau `MULTI*`). mengembalikan 1 untuk geometri tunggal.

Pada MySQL, mengembalikan `None` untuk geometri tunggal.

### `NumPoints`

class NumPoints(expression, **extra)

Ketersediaan: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Menerima bidang geografis tunggal atau pernyataan dan mengembalikan sejumlah titik dalam sebuah geometri.

Pada MySQL, mengembalikan `None` untuk geometri bukan-`LINESTRING` apapun.