API Bunachar Sonraí GeodJangoLink to this heading

Cúltaca SpásúlaLink to this heading

Soláthraíonn GeodJango na cúltaca bunachar sonraí spásúla seo a leanas faoi láthair:

  • django.contrib.gis.db.backends.postgis

  • django.contrib.gis.db.backends.mysql

  • django.contrib.gis.db.backends.oracle

  • django.contrib.gis.db.backends.spatialite

Teorainneacha SpásúlaLink to this heading

Tacaíonn Django le feidhmeanna spásúla a oibríonn ar gheoiméadraí fíor atá ar fáil i leaganacha MySQL Mar sin féin, níl na feidhmeanna spásúla chomh saibhir le cúltaca eile cosúil le PostGIS.

Tacaíocht RasterLink to this heading

Ní chuirtear `Rasterfield ``i bhfeidhm faoi láthair ach amháin don chúltaca PostGIS. Tá cuardaigh spásúla ar fáil do réimsí raster, ach ní chuirtear feidhmeanna bunachar sonraí spásúla agus comhiomlánaithe i bhfeidhm do réimsí raster.

Múnlaí a Chruthú agus a Sábháil le RéimsíLink to this heading

Seo sampla de conas réad geoiméadrach a chruthú (ag glacadh leis an tsamhail ``Zipcode ``):

Python console
>>> from zipcode.models import Zipcode
>>> z = Zipcode(code=77096, poly="POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))")
>>> z.save()

GEOSGeometry objects may also be used to save geometric models:

Python console
>>> from django.contrib.gis.geos import GEOSGeometry
>>> poly = GEOSGeometry("POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))")
>>> z = Zipcode(code=77096, poly=poly)
>>> z.save()

Thairis sin, má tá an “Geosgeoiméadracht” i gcóras comhordaithe difriúil (tá luach SRID difriúil aige) ná luach an réimse, ansin déanfar é a chlaochlú go hinmheánach go SRID réimse an tsamhail, ag baint úsáide as nós imeachta claochlaithe an bhunachar sonraí spásúil:

Python console
>>> poly_3084 = GEOSGeometry(
...     "POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))", srid=3084
... )  # SRID 3084 is 'NAD83(HARN) / Texas Centric Lambert Conformal'
>>> z = Zipcode(code=78212, poly=poly_3084)
>>> z.save()
>>> from django.db import connection
>>> print(
...     connection.queries[-1]["sql"]
... )  # printing the last SQL statement executed (requires DEBUG=True)
INSERT INTO "geoapp_zipcode" ("code", "poly") VALUES (78212, ST_Transform(ST_GeomFromWKB('\\001 ... ', 3084), 4326))

Dá bhrí sin, féadfar paraiméadair geoiméadachta a rith agus an réad Geosgeoimetry', WKT (Téacs aitheanta [#fnwkt] _), HEXEWKB (sonrach PostGIS - geoiméadacht WKB i heicseachadúil [#fnewkb] _), agus GeoJSON (féach: rfc: `7946). Go bunúsach, mura rud “Geosgeoiméadracht” é an t-ionchur, déanfaidh an réimse geoiméadrach iarracht sampla `Geosgeoimetry' a chruthú ón ionchur.

<geos-tutorial>Le haghaidh tuilleadh faisnéise ag cruthúithe:class: ~django.contrib.gis.geos.geosgeometry rudaí, féach fao:ref: `TEAGAISC GEOS `.

Samhlacha a Chruthú agus a Sábháil le Réimsí RasterLink to this heading

Agus samhlacha raster á gcruthú agat, tionóidh an réimse raster an t-ionchur go hiontach go a:class: ~django.contrib.gis.gdal.gdalraster ag baint úsáide as meastóireacht lazy-. Dá bhrí sin glacfaidh an réimse raster le haon ionchur a ghlacann an tógálaí: class: ~django.contrib.gis.gdal.gdalraster.

Seo sampla de conas réad raster a chruthú ó chomhad raster volcán.tif (ag glacadh leis an tsamhail Airde):

Python console
>>> from elevation.models import Elevation
>>> dem = Elevation(name="Volcano", rast="/path/to/raster/volcano.tif")
>>> dem.save()

GDALRaster objects may also be used to save raster models:

Python console
>>> from django.contrib.gis.gdal import GDALRaster
>>> rast = GDALRaster(
...     {
...         "width": 10,
...         "height": 10,
...         "name": "Canyon",
...         "srid": 4326,
...         "scale": [0.1, -0.1],
...         "bands": [{"data": range(100)}],
...     }
... )
>>> dem = Elevation(name="Canyon", rast=rast)
>>> dem.save()

Note that this is equivalent to:

Python console
>>> dem = Elevation.objects.create(
...     name="Canyon",
...     rast={
...         "width": 10,
...         "height": 10,
...         "name": "Canyon",
...         "srid": 4326,
...         "scale": [0.1, -0.1],
...         "bands": [{"data": range(100)}],
...     },
... )

Cuardaigh SpásúlaLink to this heading

GeoDjango's lookup types may be used with any manager method like filter(), exclude(), etc. However, the lookup types unique to GeoDjango are only available on spatial fields.

Filters on 'normal' fields (e.g. CharField) may be chained with those on geographic fields. Geographic lookups accept geometry and raster input on both sides, and input types can be mixed freely in most cases. However, unlike assignments to model fields, with lookups, types such as str, pathlib.Path, and dict must be wrapped by GDALRaster to signify that the potential for file writing or network fetching is acceptable. For the rationale, see raster security considerations.

Déantar cur síos thíos ar struchtúr ginearálta na gcuardach geografacha. <spatial-lookups>Is féidir tagairt iomlán a fháil in:ref: `tagairt cuardaigh spásúil `.

Cuardaigh GeoiméadraLink to this heading

Geographic queries with geometries take the following general form (assuming the Zipcode model used in the API Múnla GeodJango):

Text
>>> qs = Zipcode.objects.filter(<field>__<lookup_type>=<parameter>)
>>> qs = Zipcode.objects.exclude(...)

Mar shampla:

Python console
>>> qs = Zipcode.objects.filter(poly__contains=pnt)
>>> qs = Elevation.objects.filter(poly__contains=rst)

Sa chás seo, is é poly an réimse geografach, :lookup: contents `is é an <gis-contains>cineál cuardaigh spásúil, `pnt` an paraiméadar (a d'fhéadfadh a bheith a:class: ~django.contrib.gis.geos.geosgeometry réad nó sreang GeoJSON, WKT, nó HEXEWKB), agus is é: rst`: Rud django.contrib.gis.gdal.gdalraster`.

Cuardaigh RasterLink to this heading

Tá an comhréir cuardaigh raster cosúil leis an gcomhréir le haghaidh geoiméadraí. Is é an t-aon difríocht ná gur féidir innéacs banna a shonrú mar ionchur breise. Mura sonraítear aon innéacs banda, úsáidtear an chéad bhanda de réir réamhshocraithe (innéacs 0). Sa chás sin tá an comhréir comhionann leis an gcomhréir le haghaidh cuardaigh geoiméadachta.

Chun an t-innéacs banna a shonrú, is féidir paraiméadar breise a shonrú ar an dá thaobh den chuardach. Ar an taobh clé, úsáidtear an comhréir béim dúbailte chun innéacs banna a rith. Ar an taobh na láimhe deise, is féidir tuple den innéacs raster agus banda a shonrú.

This results in the following general form for lookups involving rasters (assuming the Elevation model used in the API Múnla GeodJango):

Text
>>> qs = Elevation.objects.filter(<field>__<lookup_type>=<parameter>)
>>> qs = Elevation.objects.filter(<field>__<band_index>__<lookup_type>=<parameter>)
>>> qs = Elevation.objects.filter(<field>__<lookup_type>=(<raster_input, <band_index>)

Mar shampla:

Python console
>>> qs = Elevation.objects.filter(rast__contains=geom)
>>> qs = Elevation.objects.filter(rast__contains=rst)
>>> qs = Elevation.objects.filter(rast__1__contains=geom)
>>> qs = Elevation.objects.filter(rast__contains=(rst, 1))
>>> qs = Elevation.objects.filter(rast__1__contains=(rst, 1))

<gis-contains>Ar thaobh na láimhe clé den sampla, is é rast` an réimse raster geografach agus is é: lookup: an cineál cuardaigh spásúil. Ar an taobh na láimhe deise, is ionchur geoiméadrach é ``geom agus rst is é a:class: ~django.contrib.gis.gdal.gdalraster réad. Tá an t-innéacs banna réamhshocraithe go 0 sa chéad dá cheist agus tá sé socraithe go 1 ar na cinn eile.

Cé gur féidir gach cuardach spásúil a úsáid le rudaí raster ar an dá thaobh, ní ghlacann gach oibreoir bunúsach le hionchur raster go dúchasach. Maidir le cásanna ina bhfuil an t-oibreoir ag súil le hionchur geoiméadais, déantar an raster a thiontú go géiméadracht Tá sé tábhachtach é seo a choinneáil i gcuimhne agus na torthaí cuardaigh á léirmhíniú.

<spatial-lookup-compatibility>Tá an cineál tacaíochta raster liostaithe do gach cuardach san: ref: `tábla comhoiriúnacht `. Níl cuardaigh a bhaineann le rasters ar fáil faoi láthair ach le haghaidh cúltaca PostGIS.

Fiosrúcháin FadLink to this heading

RéamhráLink to this heading

Distance calculations with spatial data is tricky because, unfortunately, the Earth is not flat. Some distance queries with fields in a geographic coordinate system may have to be expressed differently because of limitations in PostGIS. Please see the SRID a roghnú section for more details.

Cuardaigh FadLink to this heading

Availability: PostGIS, MariaDB, MySQL, Oracle, SpatiaLite, PGRaster (Native)

Tá na cuardaigh achair seo a leanas ar fáil:

Glacann cuardaigh achair paraiméadar tuple lena n-áirítear:

  1. Coiméadracht nó raster chun ríomhanna a bhunú ó; agus

  2. Uimhir nó: aicme: ~django.contrib.gis.Measure.distance réad ina bhfuil an fad.

Má úsáidtear réad a:class: ~django.contrib.gis.Measure.distance, féadfar é a chur in iúl in aon aonaid (úsáidfidh an SQL a ghintear aonaid athraithe go cinn sa réimse); ar shlí eile, glactar leis go bhfuil paraiméadair uimhriúla in aonaid an réimse.

<tests/gis_tests/distapp/models.py>Mar shampla, abair go bhfuil samhail SouthtexasCity againn (ó:fhoinse: `Tástálacha achair GeodJango `) ar chóras comhordaithe* tionscadáilte* atá bailí do chathracha i ndeisceart Texas:

Code
from django.contrib.gis.db import models


class SouthTexasCity(models.Model):
    name = models.CharField(max_length=30)
    # A projected coordinate system (only valid for South Texas!)
    # is used, units are in meters.
    point = models.PointField(srid=32140)

Ansin is féidir ceisteanna achair a dhéanamh mar seo a leanas:

Python console
>>> from django.contrib.gis.geos import GEOSGeometry
>>> from django.contrib.gis.measure import D  # ``D`` is a shortcut for ``Distance``
>>> from geoapp.models import SouthTexasCity
# Distances will be calculated from this point, which does not have to be projected.
>>> pnt = GEOSGeometry("POINT(-96.876369 29.905320)", srid=4326)
# If numeric parameter, units of field (meters in this case) are assumed.
>>> qs = SouthTexasCity.objects.filter(point__distance_lte=(pnt, 7000))
# Find all Cities within 7 km, > 20 miles away, and > 100 chains away (an obscure unit)
>>> qs = SouthTexasCity.objects.filter(point__distance_lte=(pnt, D(km=7)))
>>> qs = SouthTexasCity.objects.filter(point__distance_gte=(pnt, D(mi=20)))
>>> qs = SouthTexasCity.objects.filter(point__distance_gte=(pnt, D(chain=100)))

Oibríonn ceisteanna raster ar an mbealach céanna trí réimse raster a chur in ionad an réimse geoiméadrach point', an rud `pnt le réad raster, nó an dá rud. Chun innéacs banna ionchur raster a shonrú ar an taobh na láimhe deise, is féidir 3-tuple a chur chuig an lorg mar seo a leanas:

Python console
>>> qs = SouthTexasCity.objects.filter(point__distance_gte=(rst, 2, D(km=7)))

I gcás ina n-úsáidfí an banda le hinnéacs 2 (an tríú banda) den raster rst chun an cuardach.

Táblaí ComhoiriúnLink to this heading

Cuardaigh SpásúlaLink to this heading

Soláthraíonn an tábla seo a leanas achoimre ar na cuardaigh spásúla atá ar fáil do gach cúltaca bunachar sonraí spásúil. Tá na cuardaigh PostGIS Raster (PGraster) roinnte sna trí chatagóir a thuairiscítear in:ref: sonraí cuardaigh raster `: tacaíocht dúchasach ``<spatial-lookup-raster>N`, tacaíocht dúchasach déthaobhach B, agus tacaíocht tiontaithe geoiméadais C.

Cineál Cuardaigh

PostGIS

Oracle

MariaDB

MySQL [#] _

Spatialite

PGraster

bbcontains

X

X

X

X

N

bboverlaps

X

X

X

X

N

contained

X

X

X

X

N

<gis-contains>:lookup: `tá `

X

X

X

X

X

B

contains_properly

X

B

coveredby

X

X

X (≥ 12.0.1)

X

X

B

covers

X

X

X

X

B

crosses

X

X

X

X

C

disjoint

X

X

X

X

X

B

distance_gt

X

X

X

X

X

N

distance_gte

X

X

X

X

X

N

distance_lt

X

X

X

X

X

N

distance_lte

X

X

X

X

X

N

dwithin

X

X

X

B

equals

X

X

X

X

X

C

<same_as>:lookup: `cruinn `

X

X

X

X

X

B

geom_type

X

X (≥ 23c)

X

X

X

intersects

X

X

X

X

X

B

isempty

X

isvalid

X

X

X (≥ 12.0.1)

X

X

overlaps

X

X

X

X

X

B

relate

X

X

X

X

C

same_as

X

X

X

X

X

B

touches

X

X

X

X

X

B

within

X

X

X

X

X

B

left

X

C

right

X

C

overlaps_left

X

B

overlaps_right

X

B

overlaps_above

X

C

overlaps_below

X

C

strictly_above

X

C

strictly_below

X

C

feidhmeanna bunachar sonraíLink to this heading

Soláthraíonn an tábla seo a leanas achoimre ar na feidhmeanna bunachar sonraí tíreolaíochta atá ar fáil ar gach cúltaca spásúil.

Feidhm

PostGIS

Oracle

MariaDB

MySQL

Spatialite

Area

X

X

X

X

X

AsGeoJSON

X

X

X

X

X

AsGML

X

X

X

AsKML

X

X

AsSVG

X

X

AsWKB

X

X

X

X

X

AsWKT

X

X

X

X

X

Azimuth

X

X (LWGEOM/RTTOPO)

BoundingCircle

X

X

X (≥ 5.1)

Centroid

X

X

X

X

X

ClosestPoint

X

X

Difference

X

X

X

X

X

Distance

X

X

X

X

X

Envelope

X

X

X

X

X

ForcePolygonCW

X

X

FromWKB

X

X

X

X

X

FromWKT

X

X

X

X

X

GeoHash

X

X (≥ 12.0.1)

X

X (LWGEOM/RTTOPO)

GeometryDistance

X

GeometryType

X

X (≥ 23c)

X

X

X

Intersection

X

X

X

X

X

IsEmpty

X

IsValid

X

X

X (≥ 12.0.1)

X

X

Length

X

X

X

X

X

LineLocatePoint

X

X

MakeValid

X

X (LWGEOM/RTTOPO)

MemSize

X

NumGeometries

X

X

X

X

X

NumPoints

X

X

X

X

X

Perimeter

X

X

X

PointOnSurface

X

X

X

X

Reverse

X

X

X

Rotate

X

Scale

X

X

SnapToGrid

X

X

SymDifference

X

X

X

X

X

Transform

X

X

X

Translate

X

X

Union

X

X

X

X

X

Feidhmeanna ChomLink to this heading

The following table provides a summary of what GIS-specific aggregate functions are available on each spatial backend.

comhiomlán

PostGIS

Oracle

MariaDB

MySQL

Spatialite

Collect

X

X (≥ 12.0.1)

X (≥ 8.0.24)

X

Extent

X

X

X

Extent3D

X

MakeLine

X

X

Union

X

X

X

Fonótaí