API Model GeoDjangoLink to this heading
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 SpasialLink to this heading
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.
GeometryFieldLink to this heading
- class GeometryFieldLink to this definition
Kelas dasar untuk bidang geometri.
PointFieldLink to this heading
- class PointFieldLink to this definition
Menyimpan Point.
LineStringFieldLink to this heading
- class LineStringFieldLink to this definition
Menyimpan LineString.
PolygonFieldLink to this heading
- class PolygonFieldLink to this definition
Menyimpan Polygon.
MultiPointFieldLink to this heading
- class MultiPointFieldLink to this definition
Menyimpan MultiPoint.
MultiLineStringFieldLink to this heading
- class MultiLineStringFieldLink to this definition
Menyimpan MultiLineString.
MultiPolygonFieldLink to this heading
- class MultiPolygonFieldLink to this definition
Menyimpan MultiPolygon.
GeometryCollectionFieldLink to this heading
- class GeometryCollectionFieldLink to this definition
Menyimpan GeometryCollection.
RasterFieldLink to this heading
- class RasterFieldLink to this definition
Menyimpan GDALRaster.
RasterField saat ini hanya diterapkan untuk backend PostGIS.
Pilihan Bidang SpasialLink to this heading
Sebagai tambahan pada Pilihan bidang biasa tersedia untuk bidang model Django, bidang-bidang spasial mempunyai pilihan tambahan berikut. Semua adalah pilihan.
sridLink to this heading
- BaseSpatialField.sridLink to this definition
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 SRIDLink to this heading
Choosing an appropriate SRID for your model is an important decision that the developer should consider carefully. The SRID is an integer specifier that corresponds to the projection system that will be used to interpret the data in the spatial database. [3] Projection systems give the context to the coordinates that specify a location. Although the details of geodesy are beyond the scope of this documentation, the general problem is that the earth is spherical and representations of the earth (e.g., paper maps, web maps) are not.
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.
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_indexLink to this heading
- BaseSpatialField.spatial_indexLink to this definition
Awalan pada True. Membuat indeks spasial untuk bidang geometri yang diberikan.
Pilihan Bidang GeometriLink to this heading
Ada pilihan tambahan tersedia untuk bidang Geometri. Semua pilihan berikut adalah pilihan.
dimLink to this heading
- GeometryField.dimLink to this definition
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.
geographyLink to this heading
- GeometryField.geographyLink to this definition
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.
Jenis GeografiLink to this heading
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:
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