# dokumentasi Django 2.2.9.dev20191202104323

# API Model GeoDjango

Dokumen ini menjelajahi rincian dari API Model GeoDjango. Melalui bagian ini, kami akan menggunakan model geografis berikut dari ZIP code dan Digital Elevation Model seperti contoh kami:

    from django.contrib.gis.db import models

    class Zipcode(models.Model):
        code = models.CharField(max_length=5)
        poly = models.PolygonField()

    class Elevation(models.Model):
        name = models.CharField(max_length=100)
        rast = models.RasterField()

## Jenis Bidang Spasial

Bidang-bidang spasial terdiri dari deretan dari jenis bidang geometri dan satu jenis bidang raster. Setiap jenis-jenis bidang geometri sesuai pada spesifikasi OpenGIS Simple Features [1]. Tidak ada standar untuk data raster.

### `GeometryField`

class `GeometryField`

Kelas dasar untuk bidang geometri.

### `PointField`

class `PointField`

Menyimpan `Point`.

### `LineStringField`

class `LineStringField`

Menyimpan `LineString`.

### `PolygonField`

class `PolygonField`

Menyimpan `Polygon`.

### `MultiPointField`

class `MultiPointField`

Menyimpan `MultiPoint`.

### `MultiLineStringField`

class `MultiLineStringField`

Menyimpan `MultiLineString`.

### `MultiPolygonField`

class `MultiPolygonField`

Menyimpan `MultiPolygon`.

### `GeometryCollectionField`

class `GeometryCollectionField`

Menyimpan `GeometryCollection`.

### `RasterField`

class `RasterField`

Menyimpan `GDALRaster`.

`RasterField` saat ini hanya diterapkan untuk backend PostGIS.

## Pilihan Bidang Spasial

Sebagai tambahan pada Pilihan bidang biasa tersedia untuk bidang model Django, bidang-bidang spasial mempunyai pilihan tambahan berikut. Semua adalah pilihan.

### `srid`

`BaseSpatialField.``srid`

Setel SRID [2] (Spatial Reference System Identity) dari bidang geometri pada nilai diberikan. Awalan pada 4326 (juga dikenal sebagai WGS84, satuan-satuan adalah dalam derajat dari garis bujur dan garis lintang).

#### Memilih sebuah SRID

Memilih sebuah SRID yang sesuai untuk model anda adalah keputusan penting yang pengembang harus dipertimbangkan secara hati-hati. SRID adalah sebuah integer menentukan yang sesuai ke sistem proyeksi yang akan digunakan untuk menterjemahkan data dalam basisdata spasial. [3] Sistem proyeksi memberikan konteks ke kordinat yang menentukan sebuah tempat. meskipun rincian dari geodesy diluar cakupan dari dokumentasi ini, masaalh umum adalah bahwa bumi adalah bulat dan perwakilan dari bumi (misalnya, peta kertas, peta Jaringan) adalah bukan.

Kebanyakan orang akrab dengan menggunakan garis lintang dan bujur untuk mengacu sebuah lokasi pada permukaan bumi. Bagaimanapun, garis lintang dan bujur adalah sudut, bukan jarak. Dengan kata lain, selagi jalur terpendek diantara dua titik pada permukaan datar adalah garis lurus, jalur terpendek diantara dua titik pada permukaan melengkung (seperti bumi) adalah sebuah arc dari great circle. [4] Dengan demikian, perhitungan tambahan diwajibkan untu mendapatkan jarak dalam satuan planar (misalnya, kilometer dan mil). menggunakan sistem kordinat geografis mungkin memperkenalkan kerumitan untuk pengembang kemudian. Sebagai contoh, SpatiaLite tidak mempunyai kemampuan melakukan perhitungan jarak diantara geometri menggunakan sistem kordinat geometri, misalnya membangun sebuah permintaan untuk menemukan semua titik dalam 5 mil dari batasan daerah disimpan sebagai WGS84. [5]

Bagian-bagian dari permukaan bumi mungkin diproyeksikan menjadi dua-dimensi, atau kartesian, bidang. Sistem kordinat proyeksi adalah khususnya meyakinkan untuk aplikasi wilayah-tertentu, misalnya, jika anda mengetahui bahwa basisdata anda hanya mencangkup geometri dalam North Kansas, kemudian anda mungkin mempertimbangkan sistem proyeksi spesifik ke wilayah itu. Terlebih lagi, sistem kordinat proyeksi ditentukan dalam satuan kartesian (seperti meter atau kaki), melonggarkan perhitungan jarak.

Catatan

Jika anda berharap melakukan permintaan jarak berubah-ubah menggunakan geometri bukan-titik dalam WGS84 di PostGIS dan anda ingin penampilan layak, adakan kata kunci `GeometryField.geography` sehingga geography database type digunakan sebagai gantinya.

Sumber daya Tambahan:

- spatialreference.org: Sebuah basisdata ditenagai-Django dari sistem acuan spasial.
- The State Plane Coordinate System: Sebuah situs jaringan mencangkup beragam sistem proyeksi digunakan dalam Amerika Serikat. Banyak ditemui data spasial AS akan menjadi satu dari sistem kordinat ini daripada dalam sistem kordinat geografis seperti WGS84.

### `spatial_index`

`BaseSpatialField.``spatial_index`

Awalan pada `True`. Membuat indeks spasial untuk bidang geometri yang diberikan.

Catatan

Ini berbeda dari pilihan bidang db_index karena indeks spasial dibuat dalam perilaku berbeda dari indeks basisdata biasa. Secara khusus, indeks spasial adalah khusus dibuat menggunakan ragam dari R-tree, selagi indeks basisdata biasa khususnya menggunakan B-tree.

## Pilihan Bidang Geometri

Ada pilihan tambahan tersedia untuk bidang Geometri. Semua pilihan berikut adalah pilihan.

### `dim`

`GeometryField.``dim`

Pilihan ini mungkin digunakan untuk menyesuaikan dimensi kordinat dari bidang geometri. Secara awalan, itu menyetel ke 2, untuk perwakilan geometri dua-dimensi. Untuk backend spasial yang mendukung itu, itu mungkin disetel menjadi 3 untuk dukungan 3-dimensi.

Catatan

At this time 3D support is limited to the PostGIS and SpatiaLite backends.

### `geography`

`GeometryField.``geography`

Jika disetel menjadi `True`, pilihan ini akan membuat sebuah kolom basisdata dari jenis geografi, daripada geometri. Harap mengacu pada bagian geography type dibawah untuk lebih rinci.

Catatan

Dukungan geografi adalah terbatas pada PostGIS dan akan memaksa SRID menjadi 4326.

#### Jenis Geografi

Jenis geografi menyediakan dukungan asli untuk fitur-fitur spasial diwakili dengan kordinat geografis (misalnya, bujur/lintang WGS84). [6] Tidak seperti plane digunakan oleh jenis geometri, jenis geografi menggunakan perwakilan bulat dari datanya. jarak dan tindakan pengukuran dilakukan pada kolom geografis secara otomatis menggunakan perhitungan busur lingkaran hebat dan mengembalikan satuan segaris. Dengan kata lain, ketika `ST_Distance` dipanggil pada dua geografis, sebuah nilai dalam meter dikembalikan (sebagai lawan dari tingkatan jika dipanggil pada kolom geometri dalam WGS84).

Karena perhitungan geografis melibatkan matematika lebih, hanya bagian dari pencarian spasial PostGIS tersedia untuk jenis geografi. Secara praktik, ini berarti bahwa sebagai tambahan pada distance lookups hanya berikut tambahan spatial lookups tersedia untuk kolom geografi:

- `bboverlaps`
- `coveredby`
- `covers`
- `intersects`

Jika anda butuh menggunakan pencarian spasial atau pengumpulan yang tidak mendukung jenis geografi sebagai masukan, anda dapat menggunakan fungsi basisdata `Cast` untuk merubah kolom geografi menjadi jenis geometri dalam permintaan:

    from django.contrib.gis.db.models import PointField
    from django.db.models.functions import Cast

    Zipcode.objects.annotate(
        geom=Cast('geography_field', PointField())
    ).filter(geom__within=poly)

Untuk informasi lebih, dokumentasi PostGIS mengandung bagian membantu pada menentukan when to use geography data type over geometry data type.

Catatan kaki

[1] | OpenGIS Consortium, Inc., Simple Feature Specification For SQL.

[2] | Lihat id. pada Ch. 2.3.8, p. 39 (Nilai Geometri dan Sustem Acuan Spasial).

[3] | Khususnya, integer SRID sesuai pada penciri EPSG (European Petroleum Survey Group). bagaimanapun, itu mungkinjuga berkaitan dengan proyeksi penyesuaian ditentukan dalam tabel sistem acuan spasial basisdata spasial.

[4] | Terry A. Slocum, Robert B. McMaster, Fritz C. Kessler, & Hugh H. Howard, Thematic Cartography and Geographic Visualization (Prentice Hall, edisi ke 2), pada Bab 7.1.3.

[5] | Batasan ini tidak berlaku pada PostGIS.

[6] | Harap mengacu ke dokumentasi PostGIS Geography Type untuk rincian lebih.