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

rast__contains=rst

ST_Contains(rast, rst)

N, B

rast__1__contains=(rst, 2)

ST_Contains(rast, 1, rst, 2)

B, C

rast__contains=geom

ST_Contains(ST_Polygon(rast), geom)

B, C

rast__1__contains=geom

ST_Contains(ST_Polygon(rast, 1), geom)

B, C

poly__contains=rst

ST_Contains(poly, ST_Polygon(rst))

B, C

poly__contains=(rst, 1)

ST_Contains(poly, ST_Polygon(rst, 1))

C

rast__crosses=rst

ST_Crosses(ST_Polygon(rast), ST_Polygon(rst))

C

rast__1__crosses=(rst, 2)

ST_Crosses(ST_Polygon(rast, 1), ST_Polygon(rst, 2))

C

rast__crosses=geom

ST_Crosses(ST_Polygon(rast), geom)

C

poly__crosses=rst

ST_Crosses(poly, ST_Polygon(rst))

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:

Code
Zipcode.objects.filter(poly__bbcontains=geom)

Backend

Setara SQL

PostGIS

poly ~ geom

MySQL

MBRContains(poly, geom)

SpatiaLite

MbrContains(poly, geom)

bboverlapsLink to this heading

Tersedia: PostGIS, MySQL, SpatiaLite, PGRaster (Asli)

Coba jika kotak pembatas bidang geometri tumpang tindih pencarian kotak pembatas geometri.

Contoh:

Code
Zipcode.objects.filter(poly__bboverlaps=geom)

Backend

Setara SQL

PostGIS

poly && geom

MySQL

MBROverlaps(poly, geom)

SpatiaLite

MbrOverlaps(poly, geom)

containedLink to this heading

Tersedia: PostGIS, MySQL, SpatiaLite, PGRaster (Asli)

Coba jika kotak pembatas bidang geometri sepenuhnya terkandung oleh pencarian kotak pembatas geometri.

Contoh:

Code
Zipcode.objects.filter(poly__contained=geom)

Backend

Setara SQL

PostGIS

poly @ geom

MySQL

MBRWithin(poly, geom)

SpatiaLite

MbrWithin(poly, geom)

containsLink to this heading

Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)

Dicoba jika bidang geometri secara spasial mengandung pencarian geometri.

Contoh:

Code
Zipcode.objects.filter(poly__contains=geom)

Backend

Setara SQL

PostGIS

ST_Contains(poly, geom)

Oracle

SDO_CONTAINS(poly, geom)

MySQL

MBRContains(poly, geom)

SpatiaLite

Contains(poly, geom)

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:

Code
Zipcode.objects.filter(poly__contains_properly=geom)

Backend

Setara SQL

PostGIS

ST_ContainsProperly(poly, geom)

coveredbyLink to this heading

Tersedia: PostGIS, Oracle, PGRaster (Timbal balik)

Uji jika tidak ada titik dalam bidang geometri diluar pencarian geometri. [3]

Contoh:

Code
Zipcode.objects.filter(poly__coveredby=geom)

Backend

Setara SQL

PostGIS

ST_CoveredBy(poly, geom)

Oracle

SDO_COVEREDBY(poly, geom)

coversLink to this heading

Tersedia: PostGIS, Oracle, PGRaster (Timbal balik)

Uji jika tidak ada titik dalam pencarian geometri diluar bidang geometri. [3]

Contoh:

Code
Zipcode.objects.filter(poly__covers=geom)

Backend

Setara SQL

PostGIS

ST_Covers(poly, geom)

Oracle

SDO_COVERS(poly, geom)

crossesLink to this heading

Tersedia: PostGIS, SpatiaLite, PGRaster (Perubahan)

Uji jika bidang geometri secara spasial menyebrangi pencarian geometri.

Contoh:

Code
Zipcode.objects.filter(poly__crosses=geom)

Backend

Setara SQL

PostGIS

ST_Crosses(poly, geom)

SpatiaLite

Crosses(poly, geom)

disjointLink to this heading

Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)

Coba jika bidang geometri secara spasial diuraikan dari pencarian geometri.

Contoh:

Code
Zipcode.objects.filter(poly__disjoint=geom)

Backend

Setara SQL

PostGIS

ST_Disjoint(poly, geom)

Oracle

SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)

MySQL

MBRDisjoint(poly, geom)

SpatiaLite

Disjoint(poly, geom)

equalsLink to this heading

Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Perubahan)

Coba jika bidang geometri secara spasial setara pada pencarian geometri.

Contoh:

Code
Zipcode.objects.filter(poly__equals=geom)

Backend

Setara SQL

PostGIS

ST_Equals(poly, geom)

Oracle

SDO_EQUAL(poly, geom)

MySQL

MBREquals(poly, geom)

SpatiaLite

Equals(poly, geom)

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:

Code
Zipcode.objects.filter(poly=geom)

Backend

Setara SQL

PostGIS

poly ~= geom

Oracle

SDO_EQUAL(poly, geom)

MySQL

MBREquals(poly, geom)

SpatiaLite

Equals(poly, geom)

intersectsLink to this heading

Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)

Coba jika bidang geometri secara spasial memotong pencarian geometri.

Contoh:

Code
Zipcode.objects.filter(poly__intersects=geom)

Backend

Setara SQL

PostGIS

ST_Intersects(poly, geom)

Oracle

SDO_OVERLAPBDYINTERSECT(poly, geom)

MySQL

MBRIntersects(poly, geom)

SpatiaLite

Intersects(poly, geom)

isvalidLink to this heading

Ketersediaan: MySQL (≥ 5.7.5), PostGIS, Oracle, SpatiaLite

Coba jika geometri adalah sah.

Contoh:

Code
Zipcode.objects.filter(poly__isvalid=True)

Backend

Setara SQL

MySQL, PostGIS, SpatiaLite

ST_IsValid(poly)

Oracle

SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05) = 'TRUE'

overlapsLink to this heading

Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)

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:

Code
# 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:

Code
SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')

SpatiaLite SQL setara:

Code
SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')

Contoh raster:

Code
Zipcode.objects.filter(poly__relate=(rast, 1, 'T*T***FF*'))
Zipcode.objects.filter(rast__2__relate=(rast, 1, 'T*T***FF*'))

PostGIS SQL Setara:

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

Code
Zipcode.objects.filter(poly__relate=(geom, 'anyinteract'))

Oracle SQL setara:

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

Code
Zipcode.objects.filter(poly__touches=geom)

Backend

Setara SQL

PostGIS

ST_Touches(poly, geom)``

MySQL

MBRTouches(poly, geom)

Oracle

SDO_TOUCH(poly, geom)

SpatiaLite

Touches(poly, geom)

withinLink to this heading

Tersedia: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (Timbal balik)

Coba jika bidang geomrtri secara spasial dalam pencarian geometri.

Contoh:

Code
Zipcode.objects.filter(poly__within=geom)

Backend

Setara SQL

PostGIS

ST_Within(poly, geom)

MySQL

MBRWithin(poly, geom)

Oracle

SDO_INSIDE(poly, geom)

SpatiaLite

Within(poly, geom)

leftLink to this heading

Tersedia: PostGIS, PGRaster (Perubahan)

Coba jika kotak pembatas bidang geometri ketat ke kiri dari pencarian kotak pembatas geometri.

Contoh:

Code
Zipcode.objects.filter(poly__left=geom)

PostGIS Setara:

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

Code
Zipcode.objects.filter(poly__overlaps_left=geom)

PostGIS Setara:

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

Code
Zipcode.objects.filter(poly__overlaps_right=geom)

PostGIS Setara:

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

Code
Zipcode.objects.filter(poly__overlaps_above=geom)

PostGIS Setara:

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

Code
Zipcode.objects.filter(poly__overlaps_below=geom)

PostGIS Setara:

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

Code
Zipcode.objects.filter(poly__strictly_above=geom)

PostGIS Setara:

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

Code
Zipcode.objects.filter(poly__strictly_below=geom)

PostGIS Setara:

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

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

Code
Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))

Backend

Setara SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) > 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5

SpatiaLite

Distance(poly, geom) > 5

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:

Code
Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))

Backend

Setara SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) >= 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5

SpatiaLite

Distance(poly, geom) >= 5

distance_ltLink to this heading

Mengembalikan model-model dimana jarak pada bidang geometri dari geometri pencarian kurang dari nilai jarak yang diberikan.

Contoh:

Code
Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))

Backend

Setara SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) < 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5

SpatiaLite

Distance(poly, geom) < 5

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:

Code
Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))

Backend

Setara SQL

PostGIS

ST_Distance/ST_Distance_Sphere(poly, geom) <= 5

Oracle

SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5

SpatiaLite

Distance(poly, geom) <= 5

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:

Code
Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))

Backend

Setara SQL

PostGIS

ST_DWithin(poly, geom, 5)

Oracle

SDO_WITHIN_DISTANCE(poly, geom, 5)

SpatiaLite

PtDistWithin(poly, geom, 5)

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

tolerance

kata kunci ini adalah hanya untuk Oracle. Itu adalah nilai toleransi digunakan oleh prosedur ``SDOAGGRTYPE`; Oracle documentation mempunyai rincian lebih.

Contoh:

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

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

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

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

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