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()

Tabhair faoi deara go bhfuil sé seo comhionann le:

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

Is féidir cineálacha cuardaigh GeodJango a úsáid le haon mhodh bainisteora mar filter () ``, eisiamh () ``, srl. Mar sin féin, níl na cineálacha cuardaigh atá uathúil do GeoDjango ar fáil ach ar réimsí spásúla.

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

Glacann ceisteanna geografacha le geoiméadraí an fhoirm ghinearálta seo a leanas (ag glacadh leis an tsamhail ``Zipcode ``a úsáidtear in:doc: model-api):

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ú.

Mar thoradh air seo tá an fhoirm ghinearálta seo a leanas le haghaidh cuardaigh a bhaineann le rasters (ag glacadh leis an tsamhail Airde a úsáidtear in:doc: model-api):

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

Tá ríomhanna achair le sonraí spásúla deacair mar, ar an drochuair, níl an Domhan cothrom. B'fhéidir go gcaithfear roinnt ceisteanna achair le réimsí i gcóras comhordaithe geografach a chur in iúl go difriúil mar gheall ar theorainneacha i PostGIS. Féach an ranna:ref: selecting-an-srid sa doiciméadach:doc: model-api le haghaidh tuilleadh sonraí.

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

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

intersects

X

X

X

X

X

B

isempty

X

isvalid

X

X

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

X (LWGEOM/RTTOPO)

GeometryDistance

X

Intersection

X

X

X

X

X

IsEmpty

X

IsValid

X

X

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

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

Soláthraíonn an tábla seo a leanas achoimre ar na feidhmeanna comhiomlána atá sonrach le GIS ar fáil ar gach cúltaca spásúil. Tabhair faoi deara le do thoil nach dtacaíonn MariaDB le haon cheann de na comhiomláin seo, agus dá bhrí sin tá sé eisiata ón tábla.

comhiomlán

PostGIS

Oracle

MySQL

Spatialite

Collect

X

X (≥ 8.0.24)

X

Extent

X

X

X

Extent3D

X

MakeLine

X

X

Union

X

X

X

Fonótaí