Acuan API QuerySet GISLink to this heading
Pencarian SpasialLink to this heading
Pencarian spasial dalam bagian ini tersedia untuk GeometryField dan RasterField.
Untuk pengenalan, lihat the spatial lookups introduction. Untuk sebuah tinjauan dari apa pencarian cocok dengan backend spasial tertentu, mengacu pada spatial lookup compatibility table.
Pencarian dengan rasterLink to this heading
Semua contoh dalam acuan dibawah diberikan untuk bidang-bidang dan masukan geometri, tetapi pencarian dapat menggunakan cara sama dengan raster pada kedua sisi. Kapanpun pencarian tidak mendukung amsukan raster, masukan otomatis dirubah ke geometri dimana dibutuhkan menggunakan fungsi ST_Polygon. Lihat juga introduction to raster lookups.
Penghubung basisdata digunakan oleh pencarian dapat dibagi menjadi tiga kategori:
Raster asli mendukung
N: penghubung menerima raster secara asli pada kedua sisi dari pencarian, dan masukan raster dapat dicampur dengan masukan geometri.Dukungan raster timbal balik
B: penghubung mendukung hanya raster jika kedua sisi dari pencarian menerima masukan raster. Data raster otomatis dirubah menjadi geometri untuk pencarian campuran.Dukungan perubahan geometri
C. Pencarian tidak memiliku dukungan raster asli, semua data raster otomatis dirubah ke geometri.
Contoh-contoh dibawah menunjukkan SQL setara untuk pencarian dalam jenis berbeda dari dukungan raster. Pola sama berlaku pada semua pencarian spasial.
Kasus |
Cari |
Setara SQL |
|---|---|---|
N, B |
|
|
N, B |
|
|
B, C |
|
|
B, C |
|
|
B, C |
|
|
B, C |
|
|
C |
|
|
C |
|
|
C |
|
|
C |
|
|
Pencarian spasial dengan raster hanya didukung untuk backend PostGIS (dinamai sebagai PGRaster dalam bagian ini).
bbcontainsLink to this heading
Tersedia: PostGIS, MySQL, SpatiaLite, PGRaster (Asli)
Coba jika geometri atau kotak pembatas bidang raster sepenuhnya mengandung pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__bbcontains=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
SpatiaLite |
|
bboverlapsLink to this heading
Tersedia: PostGIS, MySQL, SpatiaLite, PGRaster (Asli)
Coba jika kotak pembatas bidang geometri tumpang tindih pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__bboverlaps=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
SpatiaLite |
|
containedLink to this heading
Tersedia: PostGIS, MySQL, SpatiaLite, PGRaster (Asli)
Coba jika kotak pembatas bidang geometri sepenuhnya terkandung oleh pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__contained=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
SpatiaLite |
|
containsLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)
Dicoba jika bidang geometri secara spasial mengandung pencarian geometri.
Contoh:
Zipcode.objects.filter(poly__contains=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
MySQL |
|
SpatiaLite |
|
contains_properlyLink to this heading
Tersedia: PostGIS, PGRaster (Timbal balik)
Mengembalikan true jika pencarian geometri memotong interior dari bidang geometri, tetapi bukan batas (atau eksterior).
Contoh:
Zipcode.objects.filter(poly__contains_properly=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
coveredbyLink to this heading
Tersedia: PostGIS, Oracle, PGRaster (Bilateral), SpatiaLite
Uji jika tidak ada titik dalam bidang geometri diluar pencarian geometri. [3]
Contoh:
Zipcode.objects.filter(poly__coveredby=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
SpatiaLite |
|
coversLink to this heading
Tersedia: PostGIS, Oracle, PGRaster (Bilateral), SpatiaLite
Uji jika tidak ada titik dalam pencarian geometri diluar bidang geometri. [3]
Contoh:
Zipcode.objects.filter(poly__covers=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
SpatiaLite |
|
crossesLink to this heading
Tersedia: PostGIS, SpatiaLite, PGRaster (Perubahan)
Uji jika bidang geometri secara spasial menyebrangi pencarian geometri.
Contoh:
Zipcode.objects.filter(poly__crosses=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
SpatiaLite |
|
disjointLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)
Coba jika bidang geometri secara spasial diuraikan dari pencarian geometri.
Contoh:
Zipcode.objects.filter(poly__disjoint=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
MySQL |
|
SpatiaLite |
|
equalsLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Perubahan)
Coba jika bidang geometri secara spasial setara pada pencarian geometri.
Contoh:
Zipcode.objects.filter(poly__equals=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
MySQL |
|
SpatiaLite |
|
exact, same_asLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)
Coba jika bidang geometri adalah "equal" pada pencarian geometri. Pada Oracle dam SpatiaLite itu mencoba kesetaraan spasial, selagi pada MySQL dan PostGIS itu mencoba kesetaraan dari kotak-kotak pembatas.
Contoh:
Zipcode.objects.filter(poly=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
MySQL |
|
SpatiaLite |
|
intersectsLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)
Coba jika bidang geometri secara spasial memotong pencarian geometri.
Contoh:
Zipcode.objects.filter(poly__intersects=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
MySQL |
|
SpatiaLite |
|
isvalidLink to this heading
Ketersediaan: MySQL (≥ 5.7.5), PostGIS, Oracle, SpatiaLite
Coba jika geometri adalah sah.
Contoh:
Zipcode.objects.filter(poly__isvalid=True)
Backend |
Setara SQL |
|---|---|
MySQL, PostGIS, SpatiaLite |
|
Oracle |
|
overlapsLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)
Coba jika bidang geometri spasial tumpang tindih pencarian geometri.
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
MySQL |
|
SpatiaLite |
|
relateLink to this heading
Tersedia: PostGIS, Oracle, SpatiaLite, PGRaster (Perubahan)
Coba jika bidang geometri secara spasial terkait pada pencarian geometri dengan nilai-nilai diberikan dalam pola yang diberikan. Pencarian ini membutuhkan sebuah parameter tuple. (geom, pattern); bentuk dari pattern akan bergantung pada backend spasial:
PostGIS & SpatiaLiteLink to this heading
Pada backend spasial ini pola persimpangan adalah sebuah string terdiri dari sembilan karakter, yang menentukan persimpangan diantara interior, batasan, dan eksterior dari bidang geometri dan pencarian geometri. Matriks pola persimpangan mungkin hanya menggunakan karakter: 1, 2, T, F, atau *. Jenis pencarian ini mengizinkan pengguna untuk "fine tune" sebuah hubungan geometrik khusus sesuai dengan model DE-9IM. [1]
Contoh geometri:
# A tuple lookup parameter is used to specify the geometry and
# the intersection pattern (the pattern here is for 'contains').
Zipcode.objects.filter(poly__relate=(geom, 'T*T***FF*'))
PostGIS SQL Setara:
SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')
SpatiaLite SQL setara:
SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')
Contoh raster:
Zipcode.objects.filter(poly__relate=(rast, 1, 'T*T***FF*'))
Zipcode.objects.filter(rast__2__relate=(rast, 1, 'T*T***FF*'))
PostGIS SQL Setara:
SELECT ... WHERE ST_Relate(poly, ST_Polygon(rast, 1), 'T*T***FF*')
SELECT ... WHERE ST_Relate(ST_Polygon(rast, 2), ST_Polygon(rast, 1), 'T*T***FF*')
OracleLink to this heading
Disini hubungan pola adalah terdiri dari setidaknya satu dari sembilan hubungan string: TOUCH, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT, EQUAL, INSIDE, COVEREDBY, CONTAINS, COVERS, ON, dan ANYINTERACT. Banyak string mungkin dipadukan dengan penghubung Boolean logis OR, sebagai contoh, 'inside+touch'. [2] Hubungan string adalah kasus-tidak-peka.
Contoh:
Zipcode.objects.filter(poly__relate=(geom, 'anyinteract'))
Oracle SQL setara:
SELECT ... WHERE SDO_RELATE(poly, geom, 'anyinteract')
touchesLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite
Coba jika bidang geometri secara spasial menyentuh pencarian geometri.
Contoh:
Zipcode.objects.filter(poly__touches=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
ST_Touches(poly, geom)`` |
MySQL |
|
Oracle |
|
SpatiaLite |
|
withinLink to this heading
Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)
Coba jika bidang geomrtri secara spasial dalam pencarian geometri.
Contoh:
Zipcode.objects.filter(poly__within=geom)
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
Oracle |
|
SpatiaLite |
|
leftLink to this heading
Tersedia: PostGIS, PGRaster (Perubahan)
Coba jika kotak pembatas bidang geometri ketat ke kiri dari pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__left=geom)
PostGIS Setara:
SELECT ... WHERE poly << geom
rightLink to this heading
Tersedia: PostGIS, PGRaster (Perubahan)
Coba jika kotak pembatas bidang geometri tegas ke kanan dari pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__right=geom)
PostGIS Setara:
SELECT ... WHERE poly >> geom
overlaps_leftLink to this heading
Tersedia: PostGIS, PGRaster (Timbal balik)
Coba jika kotak pencarian bidang geometri tumpang tindih atau ke kiri dari pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__overlaps_left=geom)
PostGIS Setara:
SELECT ... WHERE poly &< geom
overlaps_rightLink to this heading
Tersedia: PostGIS, PGRaster (Timbal balik)
Coba jika kotak pencarian bidang geometri tumpang tindih atau ke kanan dari pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__overlaps_right=geom)
PostGIS Setara:
SELECT ... WHERE poly &> geom
overlaps_aboveLink to this heading
Tersedia: PostGIS, PGRaster (Perubahan)
Coba jika kotak pembatas bidang geometri tumpang tindih atau diatas pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__overlaps_above=geom)
PostGIS Setara:
SELECT ... WHERE poly |&> geom
overlaps_belowLink to this heading
Tersedia: PostGIS, PGRaster (Perubahan)
Coba jika kotak pembatas bidang geometri tumpang tindih atau dibawah pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__overlaps_below=geom)
PostGIS Setara:
SELECT ... WHERE poly &<| geom
strictly_aboveLink to this heading
Tersedia: PostGIS, PGRaster (Perubahan)
Coba jika kotak pembatas bidang geometri ketat diatas pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__strictly_above=geom)
PostGIS Setara:
SELECT ... WHERE poly |>> geom
strictly_belowLink to this heading
Tersedia: PostGIS, PGRaster (Perubahan)
Coba jika kotak pembatas bidang geometri ketat dibawah pencarian kotak pembatas geometri.
Contoh:
Zipcode.objects.filter(poly__strictly_below=geom)
PostGIS Setara:
SELECT ... WHERE poly <<| geom
Pencarian JarakLink to this heading
Ketersediaan: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Asli)
Untuk sebuah tinjauan pada melakukan permintaan jarak, hrap mengacu pada distance queries introduction.
Pencarian jarak mengambil formulir berikut:
<field>__<distance lookup>=(<geometry/raster>, <distance value>[, 'spheroid'])
<field>__<distance lookup>=(<raster>, <band_index>, <distance value>[, 'spheroid'])
<field>__<band_index>__<distance lookup>=(<raster>, <band_index>, <distance value>[, 'spheroid'])
Nilai dilewatkan kedalam pencarian jarak adalah sebuah tuple; nilai dua pertama adalah wajib, dan geometri untuk menghitung jarak, dan nilai jarak (baik angka dalam satuan-satuan bidang, sebuah obyek Distance, atau sebuah query expression <ref/models/expressions>). Untuk melewatkan indeks pita pada pencarian, gunakan 3-tuple dimana masukan kedua adalah indeks pita.
Pada setiap pencarian jarak kecuali dwithin, sebuah unsur pilihan, 'spheroid', mungkin disertakan untuk digunakan lebih akurat fungsi perhitungan jarak bulatan dengan sistem kordinat geodetik.
Pada PostgreSQL, pilihan 'spheroid' menggunakan ST_DistanceSpheroid daripada ST_DistanceSphere. Fungsi ST_Distance paling sederhana digunakan dengan sistem kordinat yang sudah dihitung. Raster dirubah ke geometri untuk pencarian berdasarkan spheroid.
distance_gtLink to this heading
Mengembalikan model-model dimana jarak pada bidang geometri dari geometri pencarian lebih besar dari nilai jarak yang diberikan.
Contoh:
Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
Oracle |
|
SpatiaLite |
|
distance_gteLink to this heading
Mengembalikan model-model dimana jarak pada bidang geometri dari geometri pencarian lebih besar dari atau setara pada nilai jarak diberikan.
Contoh:
Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
Oracle |
|
SpatiaLite |
|
distance_ltLink to this heading
Mengembalikan model-model dimana jarak pada bidang geometri dari geometri pencarian kurang dari nilai jarak yang diberikan.
Contoh:
Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
Oracle |
|
SpatiaLite |
|
distance_lteLink to this heading
Mengembalikan model-model dimana jarak pada bidang geometri dari geometri pencarian kurang dari atau setara pada nilai jarak yang diberikan.
Contoh:
Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))
Backend |
Setara SQL |
|---|---|
PostGIS |
|
MySQL |
|
Oracle |
|
SpatiaLite |
|
dwithinLink to this heading
Mengembalikan model-model dimana jarak pada bidang geometri dari geometri pencarian dalam jarak yang diberikan dari satu lainnya. Catat bahwa anda hanya dapat menyediakan obyek Distance jika geometri tersasar dalam sistem diperhitungkan. Untuk geometri geografis, anda harus menggunakan satuan dari bidang geometri (misalnya tingkatan untuk WGS84) .
Contoh:
Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
Backend |
Setara SQL |
|---|---|
PostGIS |
|
Oracle |
|
SpatiaLite |
|
Fungsi KumpulanLink to this heading
Django menyediakan beberapa fungsi pengumpulan khusus-GIS. Untuk rincian pada bagaimana menggunakan fungsi-fungsi pengumpulan ini, lihat the topic guide on aggregation.
Argumen Katakunci |
Deskripsi |
|---|---|
|
kata kunci ini adalah hanya untuk Oracle. Itu adalah nilai toleransi digunakan oleh prosedur ``SDOAGGRTYPE`; Oracle documentation mempunyai rincian lebih. |
Contoh:
>>> from django.contrib.gis.db.models import Extent, Union
>>> WorldBorder.objects.aggregate(Extent('mpoly'), Union('mpoly'))
CollectLink to this heading
- class Collect(geo_field)Link to this definition
Tersedia: PostGIS, SpatiaLite
Mengembalikan obyek geometri GEOMETRYCOLLECTION atau MULTI dari kolom geometri. Ini adalah analogi pada versi tersederhana dari keseluruhan Union, kecuali itu dapat berupa beberapa urutan dari besarnya tercepat daripada melakukan penggabungan karena itu cukup menggulung geometri kedalam sebuah koleksi atau banyak obyek, tidak peduli tentang penghilangan batasan-batasan.
ExtentLink to this heading
- class Extent(geo_field)Link to this definition
Tersedia: PostGIS, Oracle, SpatiaLite
Mengembalikan tingkatan dari semua geo_field dalam QuerySet sebagai empat-tuple, terdiri dari kordinat kiri bawah dan kordinat kanan atas.
Contoh:
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(Extent('poly'))
>>> print(qs['poly__extent'])
(-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
Extent3DLink to this heading
- class Extent3D(geo_field)Link to this definition
Tersedia: PostGIS
Mengembalikan tingkatan 3D dari semua geo_field dalam QuerySet sebagai enam-tuple, terdiri dari kordinat kiri bawah dan kordinat kanan atas (masing-masing dengan kordinat x,y, dan z).
Contoh:
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(Extent3D('poly'))
>>> print(qs['poly__extent3d'])
(-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)
MakeLineLink to this heading
- class MakeLine(geo_field)Link to this definition
Tersedia: PostGIS, SpatiaLite
Mengembalikan LineString dibangun dari geometri bidang titik dalam QuerySet. Saat ini pengurutan queryset tidak mempunyai pengaruh.
Contoh:
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(MakeLine('poly'))
>>> print(qs['poly__makeline'])
LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)
UnionLink to this heading
- class Union(geo_field)Link to this definition
Tersedia: PostGIS, Oracle, SpatiaLite
Metode ini mengembalikan obyek GEOSGeometry terdiri dari gabungan dari setiap geometri dalam queryset. Harap catat bahwa penggunaan dari Union diolah secara intensif dan mungkin mengambil jumlah signifikan waktu pada queryset besar.
Contoh:
>>> u = Zipcode.objects.aggregate(Union(poly)) # This may take a long time.
>>> u = Zipcode.objects.filter(poly__within=bbox).aggregate(Union(poly)) # A more sensible approach.
Catatan kaki