1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249 |
- .. _ref-geoquerysets:
- =========================
- GeoQuerySet API Reference
- =========================
- .. currentmodule:: django.contrib.gis.db.models
- .. class:: GeoQuerySet([model=None])
- .. _spatial-lookups:
- Spatial Lookups
- ===============
- Just like when using the :ref:`queryset-api`, interaction
- with ``GeoQuerySet`` by :ref:`chaining filters <chaining-filters>`.
- Instead of the regular Django :ref:`field-lookups`, the
- spatial lookups in this section are available for :class:`GeometryField`.
- For an introduction, see the :ref:`spatial lookups introduction
- <spatial-lookups-intro>`. For an overview of what lookups are
- compatible with a particular spatial backend, refer to the
- :ref:`spatial lookup compatibility table <spatial-lookup-compatibility>`.
- .. fieldlookup:: bbcontains
- bbcontains
- ----------
- *Availability*: PostGIS, MySQL, SpatiaLite
- Tests if the geometry field's bounding box completely contains the lookup
- geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__bbcontains=geom)
- ========== ==========================
- Backend SQL Equivalent
- ========== ==========================
- PostGIS ``poly ~ geom``
- MySQL ``MBRContains(poly, geom)``
- SpatiaLite ``MbrContains(poly, geom)``
- ========== ==========================
- .. fieldlookup:: bboverlaps
- bboverlaps
- ----------
- *Availability*: PostGIS, MySQL, SpatiaLite
- Tests if the geometry field's bounding box overlaps the lookup geometry's
- bounding box.
- Example::
- Zipcode.objects.filter(poly__bboverlaps=geom)
- ========== ==========================
- Backend SQL Equivalent
- ========== ==========================
- PostGIS ``poly && geom``
- MySQL ``MBROverlaps(poly, geom)``
- SpatiaLite ``MbrOverlaps(poly, geom)``
- ========== ==========================
- .. fieldlookup:: contained
- contained
- ---------
- *Availability*: PostGIS, MySQL, SpatiaLite
- Tests if the geometry field's bounding box is completely contained by the
- lookup geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__contained=geom)
- ========== ==========================
- Backend SQL Equivalent
- ========== ==========================
- PostGIS ``poly @ geom``
- MySQL ``MBRWithin(poly, geom)``
- SpatiaLite ``MbrWithin(poly, geom)``
- ========== ==========================
- .. fieldlookup:: gis-contains
- contains
- --------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- Tests if the geometry field spatially contains the lookup geometry.
- Example::
- Zipcode.objects.filter(poly__contains=geom)
- ========== ============================
- Backend SQL Equivalent
- ========== ============================
- PostGIS ``ST_Contains(poly, geom)``
- Oracle ``SDO_CONTAINS(poly, geom)``
- MySQL ``MBRContains(poly, geom)``
- SpatiaLite ``Contains(poly, geom)``
- ========== ============================
- .. fieldlookup:: contains_properly
- contains_properly
- -----------------
- .. versionadded:: 1.2
- *Availability*: PostGIS
- Returns true if the lookup geometry intersects the interior of the
- geometry field, but not the boundary (or exterior). [#fncontainsproperly]_
- .. note::
- Requires PostGIS 1.4 and above.
- Example::
- Zipcode.objects.filter(poly__contains_properly=geom)
- ========== ===================================
- Backend SQL Equivalent
- ========== ===================================
- PostGIS ``ST_ContainsProperly(poly, geom)``
- ========== ===================================
- .. fieldlookup:: coveredby
- coveredby
- ---------
- *Availability*: PostGIS, Oracle
- Tests if no point in the geometry field is outside the lookup geometry.
- [#fncovers]_
- Example::
- Zipcode.objects.filter(poly__coveredby=geom)
- ========== =============================
- Backend SQL Equivalent
- ========== =============================
- PostGIS ``ST_CoveredBy(poly, geom)``
- Oracle ``SDO_COVEREDBY(poly, geom)``
- ========== =============================
- .. fieldlookup:: covers
- covers
- ------
- *Availability*: PostGIS, Oracle
- Tests if no point in the lookup geometry is outside the geometry field.
- [#fncovers]_
- Example::
- Zipcode.objects.filter(poly__covers=geom)
- ========== ==========================
- Backend SQL Equivalent
- ========== ==========================
- PostGIS ``ST_Covers(poly, geom)``
- Oracle ``SDO_COVERS(poly, geom)``
- ========== ==========================
- .. fieldlookup:: crosses
- crosses
- -------
- *Availability*: PostGIS, SpatiaLite
- Tests if the geometry field spatially crosses the lookup geometry.
- Example::
- Zipcode.objects.filter(poly__crosses=geom)
- ========== ==========================
- Backend SQL Equivalent
- ========== ==========================
- PostGIS ``ST_Crosses(poly, geom)``
- SpatiaLite ``Crosses(poly, geom)``
- ========== ==========================
- .. fieldlookup:: disjoint
- disjoint
- --------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- Tests if the geometry field is spatially disjoint from the lookup geometry.
- Example::
- Zipcode.objects.filter(poly__disjoint=geom)
- ========== =================================================
- Backend SQL Equivalent
- ========== =================================================
- PostGIS ``ST_Disjoint(poly, geom)``
- Oracle ``SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)``
- MySQL ``MBRDisjoint(poly, geom)``
- SpatiaLite ``Disjoint(poly, geom)``
- ========== =================================================
- equals
- ------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- .. fieldlookup:: exact
- .. fieldlookup:: same_as
- exact, same_as
- --------------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- .. fieldlookup:: intersects
- intersects
- ----------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- Tests if the geometry field spatially intersects the lookup geometry.
- Example::
- Zipcode.objects.filter(poly__intersects=geom)
- ========== =================================================
- Backend SQL Equivalent
- ========== =================================================
- PostGIS ``ST_Intersects(poly, geom)``
- Oracle ``SDO_OVERLAPBDYINTERSECT(poly, geom)``
- MySQL ``MBRIntersects(poly, geom)``
- SpatiaLite ``Intersects(poly, geom)``
- ========== =================================================
- .. fieldlookup:: overlaps
- overlaps
- --------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- .. fieldlookup:: relate
- relate
- ------
- *Availability*: PostGIS, Oracle, SpatiaLite
- Tests if the geometry field is spatially related to the lookup geometry by
- the values given in the given pattern. This lookup requires a tuple parameter,
- ``(geom, pattern)``; the form of ``pattern`` will depend on the spatial backend:
- PostGIS & SpatiaLite
- ~~~~~~~~~~~~~~~~~~~~
- On these spatial backends the intersection pattern is a string comprising
- nine characters, which define intersections between the interior, boundary,
- and exterior of the geometry field and the lookup geometry.
- The intersection pattern matrix may only use the following characters:
- ``1``, ``2``, ``T``, ``F``, or ``*``. This lookup type allows users to "fine tune"
- a specific geometric relationship consistent with the DE-9IM model. [#fnde9im]_
- Example::
- # 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 equivalent::
- SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')
- SpatiaLite SQL equivalent::
- SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')
- Oracle
- ~~~~~~
- Here the relation pattern is comprised at least one of the nine relation
- strings: ``TOUCH``, ``OVERLAPBDYDISJOINT``, ``OVERLAPBDYINTERSECT``,
- ``EQUAL``, ``INSIDE``, ``COVEREDBY``, ``CONTAINS``, ``COVERS``, ``ON``, and
- ``ANYINTERACT``. Multiple strings may be combined with the logical Boolean
- operator OR, for example, ``'inside+touch'``. [#fnsdorelate]_ The relation
- strings are case-insensitive.
- Example::
- Zipcode.objects.filter(poly__relate(geom, 'anyinteract'))
- Oracle SQL equivalent::
- SELECT ... WHERE SDO_RELATE(poly, geom, 'anyinteract')
- .. fieldlookup:: touches
- touches
- -------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- Tests if the geometry field spatially touches the lookup geometry.
- Example::
- Zipcode.objects.filter(poly__touches=geom)
- ========== ==========================
- Backend SQL Equivalent
- ========== ==========================
- PostGIS ``ST_Touches(poly, geom)``
- MySQL ``MBRTouches(poly, geom)``
- Oracle ``SDO_TOUCH(poly, geom)``
- SpatiaLite ``Touches(poly, geom)``
- ========== ==========================
- .. fieldlookup:: within
- within
- ------
- *Availability*: PostGIS, Oracle, MySQL, SpatiaLite
- Tests if the geometry field is spatially within the lookup geometry.
- Example::
- Zipcode.objects.filter(poly__within=geom)
- ========== ==========================
- Backend SQL Equivalent
- ========== ==========================
- PostGIS ``ST_Within(poly, geom)``
- MySQL ``MBRWithin(poly, geom)``
- Oracle ``SDO_INSIDE(poly, geom)``
- SpatiaLite ``Within(poly, geom)``
- ========== ==========================
- .. fieldlookup:: left
- left
- ----
- *Availability*: PostGIS
- Tests if the geometry field's bounding box is strictly to the left of the
- lookup geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__left=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly << geom
- .. fieldlookup:: right
- right
- -----
- *Availability*: PostGIS
- Tests if the geometry field's bounding box is strictly to the right of the
- lookup geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__right=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly >> geom
- .. fieldlookup:: overlaps_left
- overlaps_left
- -------------
- *Availability*: PostGIS
- Tests if the geometry field's bounding box overlaps or is to the left of the lookup
- geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__overlaps_left=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly &< geom
- .. fieldlookup:: overlaps_right
- overlaps_right
- --------------
- *Availability*: PostGIS
- Tests if the geometry field's bounding box overlaps or is to the right of the lookup
- geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__overlaps_right=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly &> geom
- .. fieldlookup:: overlaps_above
- overlaps_above
- --------------
- *Availability*: PostGIS
- Tests if the geometry field's bounding box overlaps or is above the lookup
- geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__overlaps_above=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly |&> geom
- .. fieldlookup:: overlaps_below
- overlaps_below
- --------------
- *Availability*: PostGIS
- Tests if the geometry field's bounding box overlaps or is below the lookup
- geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__overlaps_below=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly &<| geom
- .. fieldlookup:: strictly_above
- strictly_above
- --------------
- *Availability*: PostGIS
- Tests if the geometry field's bounding box is strictly above the lookup
- geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__strictly_above=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly |>> geom
- .. fieldlookup:: strictly_below
- strictly_below
- --------------
- *Availability*: PostGIS
- Tests if the geometry field's bounding box is strictly above the lookup
- geometry's bounding box.
- Example::
- Zipcode.objects.filter(poly__strictly_above=geom)
- PostGIS equivalent::
- SELECT ... WHERE poly |>> geom
- .. _distance-lookups:
- Distance Lookups
- ================
- *Availability*: PostGIS, Oracle, SpatiaLite
- For an overview on performing distance queries, please refer to
- the :ref:`distance queries introduction <distance-queries>`.
- Distance lookups take the following form::
- <field>__<distance lookup>=(<geometry>, <distance value>[, 'spheroid'])
- The value passed into a distance lookup is a tuple; the first two
- values are mandatory, and are the geometry to calculate distances to,
- and a distance value (either a number in units of the field or a
- :class:`~django.contrib.gis.measure.Distance` object). On every
- distance lookup but :lookup:`dwithin`, an optional
- third element, ``'spheroid'``, may be included to tell GeoDjango
- to use the more accurate spheroid distance calculation functions on
- fields with a geodetic coordinate system (e.g., ``ST_Distance_Spheroid``
- would be used instead of ``ST_Distance_Sphere``).
- .. fieldlookup:: distance_gt
- distance_gt
- -----------
- Returns models where the distance to the geometry field from the lookup
- geometry is greater than the given distance value.
- Example::
- Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))
- ========== ===============================================
- Backend SQL Equivalent
- ========== ===============================================
- PostGIS ``ST_Distance(poly, geom) > 5``
- Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5``
- SpatiaLite ``Distance(poly, geom) > 5``
- ========== ===============================================
- .. fieldlookup:: distance_gte
- distance_gte
- ------------
- Returns models where the distance to the geometry field from the lookup
- geometry is greater than or equal to the given distance value.
- Example::
- Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))
- ========== ================================================
- Backend SQL Equivalent
- ========== ================================================
- PostGIS ``ST_Distance(poly, geom) >= 5``
- Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5``
- SpatiaLite ``Distance(poly, geom) >= 5``
- ========== ================================================
- .. fieldlookup:: distance_lt
- distance_lt
- -----------
- Returns models where the distance to the geometry field from the lookup
- geometry is less than the given distance value.
- Example::
- Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))
- ========== ===============================================
- Backend SQL Equivalent
- ========== ===============================================
- PostGIS ``ST_Distance(poly, geom) < 5``
- Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5``
- SpatiaLite ``Distance(poly, geom) < 5``
- ========== ===============================================
- .. fieldlookup:: distance_lte
- distance_lte
- ------------
- Returns models where the distance to the geometry field from the lookup
- geometry is less than or equal to the given distance value.
- Example::
- Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))
- ========== ================================================
- Backend SQL Equivalent
- ========== ================================================
- PostGIS ``ST_Distance(poly, geom) <= 5``
- Oracle ``SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5``
- SpatiaLite ``Distance(poly, geom) <= 5``
- ========== ================================================
- .. fieldlookup:: dwithin
- dwithin
- -------
- Returns models where the distance to the geometry field from the
- lookup geometry are within the given distance from one another.
- Example::
- Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
- ========== ======================================
- Backend SQL Equivalent
- ========== ======================================
- PostGIS ``ST_DWithin(poly, geom, 5)``
- Oracle ``SDO_WITHIN_DISTANCE(poly, geom, 5)``
- ========== ======================================
- .. note::
- This lookup is not available on SpatiaLite.
- .. fieldlookup:: equals
- ``GeoQuerySet`` Methods
- =======================
- ``GeoQuerySet`` methods specify that a spatial operation be performed
- on each patial operation on each geographic
- field in the queryset and store its output in a new attribute on the model
- (which is generally the name of the ``GeoQuerySet`` method).
- There are also aggregate ``GeoQuerySet`` methods which return a single value
- instead of a queryset. This section will describe the API and availability
- of every ``GeoQuerySet`` method available in GeoDjango.
- .. note::
- What methods are available depend on your spatial backend. See
- the :ref:`compatibility table <geoqueryset-method-compatibility>`
- for more details.
- With a few exceptions, the following keyword arguments may be used with all
- ``GeoQuerySet`` methods:
- ===================== =====================================================
- Keyword Argument Description
- ===================== =====================================================
- ``field_name`` By default, ``GeoQuerySet`` methods use the first
- geographic field encountered in the model. This
- keyword should be used to specify another
- geographic field (e.g., ``field_name='point2'``)
- when there are multiple geographic fields in a model.
- On PostGIS, the ``field_name`` keyword may also be
- used on geometry fields in models that are related
- via a ``ForeignKey`` relation (e.g.,
- ``field_name='related__point'``).
- ``model_att`` By default, ``GeoQuerySet`` methods typically attach
- their output in an attribute with the same name as
- the ``GeoQuerySet`` method. Setting this keyword
- with the desired attribute name will override this
- default behavior. For example,
- ``qs = Zipcode.objects.centroid(model_att='c')`` will
- attach the centroid of the ``Zipcode`` geometry field
- in a ``c`` attribute on every model rather than in a
- ``centroid`` attribute.
- This keyword is required if
- a method name clashes with an existing
- ``GeoQuerySet`` method -- if you wanted to use the
- ``area()`` method on model with a ``PolygonField``
- named ``area``, for example.
- ===================== =====================================================
- Measurement
- -----------
- *Availability*: PostGIS, Oracle, SpatiaLite
- ``area``
- ~~~~~~~~
- .. method:: GeoQuerySet.area(**kwargs)
- Returns the area of the geographic field in an ``area`` attribute on
- each element of this GeoQuerySet.
- ``distance``
- ~~~~~~~~~~~~
- .. method:: GeoQuerySet.distance(geom, **kwargs)
- This method takes a geometry as a parameter, and attaches a ``distance``
- attribute to every model in the returned queryset that contains the
- distance (as a :class:`~django.contrib.gis.measure.Distance` object) to the given geometry.
- In the following example (taken from the `GeoDjango distance tests`__),
- the distance from the `Tasmanian`__ city of Hobart to every other
- :class:`PointField` in the ``AustraliaCity`` queryset is calculated::
- >>> pnt = AustraliaCity.objects.get(name='Hobart').point
- >>> for city in AustraliaCity.objects.distance(pnt): print(city.name, city.distance)
- Wollongong 990071.220408 m
- Shellharbour 972804.613941 m
- Thirroul 1002334.36351 m
- Mittagong 975691.632637 m
- Batemans Bay 834342.185561 m
- Canberra 598140.268959 m
- Melbourne 575337.765042 m
- Sydney 1056978.87363 m
- Hobart 0.0 m
- Adelaide 1162031.83522 m
- Hillsdale 1049200.46122 m
- .. note::
- Because the ``distance`` attribute is a
- :class:`~django.contrib.gis.measure.Distance` object, you can easily express
- the value in the units of your choice. For example, ``city.distance.mi`` is
- the distance value in miles and ``city.distance.km`` is the distance value
- in kilometers. See the :ref:`ref-measure` for usage details and the list of
- :ref:`supported_units`.
- __ https://github.com/django/django/tree/master/django/django/contrib/gis/tests/distapp/models.py
- __ http://en.wikipedia.org/wiki/Tasmania
- ``length``
- ~~~~~~~~~~
- .. method:: GeoQuerySet.length(**kwargs)
- Returns the length of the geometry field in a ``length`` attribute
- (a :class:`~django.contrib.gis.measure.Distance` object) on each model in
- the queryset.
- ``perimeter``
- ~~~~~~~~~~~~~
- .. method:: GeoQuerySet.perimeter(**kwargs)
- Returns the perimeter of the geometry field in a ``perimeter`` attribute
- (a :class:`~django.contrib.gis.measure.Distance` object) on each model in
- the queryset.
- Geometry Relationships
- ----------------------
- The following methods take no arguments, and attach geometry objects
- each element of the :class:`GeoQuerySet` that is the result of relationship
- function evaluated on the geometry field.
- ``centroid``
- ~~~~~~~~~~~~
- .. method:: GeoQuerySet.centroid(**kwargs)
- *Availability*: PostGIS, Oracle, SpatiaLite
- Returns the ``centroid`` value for the geographic field in a ``centroid``
- attribute on each element of the ``GeoQuerySet``.
- ``envelope``
- ~~~~~~~~~~~~
- .. method:: GeoQuerySet.envelope(**kwargs)
- *Availability*: PostGIS, SpatiaLite
- Returns a geometry representing the bounding box of the geometry field in
- an ``envelope`` attribute on each element of the ``GeoQuerySet``.
- ``point_on_surface``
- ~~~~~~~~~~~~~~~~~~~~
- .. method:: GeoQuerySet.point_on_surface(**kwargs)
- *Availability*: PostGIS, Oracle, SpatiaLite
- Returns a Point geometry guaranteed to lie on the surface of the
- geometry field in a ``point_on_surface`` attribute on each element
- of the queryset; otherwise sets with None.
- Geometry Editors
- ----------------
- ``force_rhr``
- ~~~~~~~~~~~~~
- .. method:: GeoQuerySet.force_rhr(**kwargs)
- .. versionadded:: 1.2
- *Availability*: PostGIS
- Returns a modified version of the polygon/multipolygon in which all
- of the vertices follow the Right-Hand-Rule, and attaches as a
- ``force_rhr`` attribute on each element of the queryset.
- ``reverse_geom``
- ~~~~~~~~~~~~~~~~
- .. method:: GeoQuerySet.reverse_geom(**kwargs)
- .. versionadded:: 1.2
- *Availability*: PostGIS, Oracle
- Reverse the coordinate order of the geometry field, and attaches as a
- ``reverse`` attribute on each element of the queryset.
- ``scale``
- ~~~~~~~~~
- .. method:: GeoQuerySet.scale(x, y, z=0.0, **kwargs)
- *Availability*: PostGIS, SpatiaLite
- ``snap_to_grid``
- ~~~~~~~~~~~~~~~~
- .. method:: GeoQuerySet.snap_to_grid(*args, **kwargs)
- Snap all points of the input geometry to the grid. How the
- geometry is snapped to the grid depends on how many numeric
- (either float, integer, or long) arguments are given.
- =================== =====================================================
- Number of Arguments Description
- =================== =====================================================
- 1 A single size to snap bot the X and Y grids to.
- 2 X and Y sizes to snap the grid to.
- 4 X, Y sizes and the corresponding X, Y origins.
- =================== =====================================================
- ``transform``
- ~~~~~~~~~~~~~
- .. method:: GeoQuerySet.transform(srid=4326, **kwargs)
- *Availability*: PostGIS, Oracle, SpatiaLite
- The ``transform`` method transforms the geometry field of a model to the spatial
- reference system specified by the ``srid`` parameter. If no ``srid`` is given,
- then 4326 (WGS84) is used by default.
- .. note::
- Unlike other ``GeoQuerySet`` methods, ``transform`` stores its output
- "in-place". In other words, no new attribute for the transformed
- geometry is placed on the models.
- .. note::
- What spatial reference system an integer SRID corresponds to may depend on
- the spatial database used. In other words, the SRID numbers used for Oracle
- are not necessarily the same as those used by PostGIS.
- Example::
- >>> qs = Zipcode.objects.all().transform() # Transforms to WGS84
- >>> qs = Zipcode.objects.all().transform(32140) # Transforming to "NAD83 / Texas South Central"
- >>> print(qs[0].poly.srid)
- 32140
- >>> print(qs[0].poly)
- POLYGON ((234055.1698884720099159 4937796.9232223574072123 ...
- ``translate``
- ~~~~~~~~~~~~~
- .. method:: GeoQuerySet.translate(x, y, z=0.0, **kwargs)
- *Availability*: PostGIS, SpatiaLite
- Translates the geometry field to a new location using the given numeric
- parameters as offsets.
- Geometry Operations
- -------------------
- *Availability*: PostGIS, Oracle, SpatiaLite
- The following methods all take a geometry as a parameter and attach a geometry
- to each element of the ``GeoQuerySet`` that is the result of the operation.
- ``difference``
- ~~~~~~~~~~~~~~
- .. method:: GeoQuerySet.difference(geom)
- Returns the spatial difference of the geographic field with the given
- geometry in a ``difference`` attribute on each element of the
- ``GeoQuerySet``.
- ``intersection``
- ~~~~~~~~~~~~~~~~
- .. method:: GeoQuerySet.intersection(geom)
- Returns the spatial intersection of the geographic field with the
- given geometry in an ``intersection`` attribute on each element of the
- ``GeoQuerySet``.
- ``sym_difference``
- ~~~~~~~~~~~~~~~~~~
- .. method:: GeoQuerySet.sym_difference(geom)
- Returns the symmetric difference of the geographic field with the
- given geometry in a ``sym_difference`` attribute on each element of the
- ``GeoQuerySet``.
- ``union``
- ~~~~~~~~~
- .. method:: GeoQuerySet.union(geom)
- Returns the union of the geographic field with the given
- geometry in an ``union`` attribute on each element of the
- ``GeoQuerySet``.
- Geometry Output
- ---------------
- The following ``GeoQuerySet`` methods will return an attribute that has the value
- of the geometry field in each model converted to the requested output format.
- ``geohash``
- ~~~~~~~~~~~
- .. method:: GeoQuerySet.geohash(preceision=20, **kwargs)
- .. versionadded:: 1.2
- Attaches a ``geohash`` attribute to every model the queryset
- containing the `GeoHash`__ representation of the geometry.
- __ http://geohash.org/
- ``geojson``
- ~~~~~~~~~~~
- .. method:: GeoQuerySet.geojson(**kwargs)
- *Availability*: PostGIS
- Attaches a ``geojson`` attribute to every model in the queryset that contains the
- `GeoJSON`__ representation of the geometry.
- ===================== =====================================================
- Keyword Argument Description
- ===================== =====================================================
- ``precision`` It may be used to specify the number of significant
- digits for the coordinates in the GeoJSON
- representation -- the default value is 8.
- ``crs`` Set this to ``True`` if you want the coordinate
- reference system to be included in the returned
- GeoJSON.
- ``bbox`` Set this to ``True`` if you want the bounding box
- to be included in the returned GeoJSON.
- ===================== =====================================================
- __ http://geojson.org/
- ``gml``
- ~~~~~~~
- .. method:: GeoQuerySet.gml(**kwargs)
- *Availability*: PostGIS, Oracle, SpatiaLite
- Attaches a ``gml`` attribute to every model in the queryset that contains the
- `Geographic Markup Language (GML)`__ representation of the geometry.
- Example::
- >>> qs = Zipcode.objects.all().gml()
- >>> print(qs[0].gml)
- <gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ... -147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon>
- ===================== =====================================================
- Keyword Argument Description
- ===================== =====================================================
- ``precision`` This keyword is for PostGIS only. It may be used
- to specify the number of significant digits for the
- coordinates in the GML representation -- the default
- value is 8.
- ``version`` This keyword is for PostGIS only. It may be used to
- specify the GML version used, and may only be values
- of 2 or 3. The default value is 2.
- ===================== =====================================================
- __ http://en.wikipedia.org/wiki/Geography_Markup_Language
- ``kml``
- ~~~~~~~
- .. method:: GeoQuerySet.kml(**kwargs)
- *Availability*: PostGIS, SpatiaLite
- Attaches a ``kml`` attribute to every model in the queryset that contains the
- `Keyhole Markup Language (KML)`__ representation of the geometry fields. It
- should be noted that the contents of the KML are transformed to WGS84 if
- necessary.
- Example::
- >>> qs = Zipcode.objects.all().kml()
- >>> print(qs[0].kml)
- <Polygon><outerBoundaryIs><LinearRing><coordinates>-103.04135,36.217596,0 ... -103.04135,36.217596,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
- ===================== =====================================================
- Keyword Argument Description
- ===================== =====================================================
- ``precision`` This keyword may be used to specify the number of
- significant digits for the coordinates in the KML
- representation -- the default value is 8.
- ===================== =====================================================
- __ http://code.google.com/apis/kml/documentation/
- ``svg``
- ~~~~~~~
- .. method:: GeoQuerySet.svg(**kwargs)
- *Availability*: PostGIS, SpatiaLite
- Attaches a ``svg`` attribute to every model in the queryset that contains
- the `Scalable Vector Graphics (SVG)`__ path data of the geometry fields.
- ===================== =====================================================
- Keyword Argument Description
- ===================== =====================================================
- ``relative`` If set to ``True``, the path data will be implemented
- in terms of relative moves. Defaults to ``False``,
- meaning that absolute moves are used instead.
- ``precision`` This keyword may be used to specify the number of
- significant digits for the coordinates in the SVG
- representation -- the default value is 8.
- ===================== =====================================================
- __ http://www.w3.org/Graphics/SVG/
- Miscellaneous
- -------------
- ``mem_size``
- ~~~~~~~~~~~~
- .. method:: GeoQuerySet.mem_size(**kwargs)
- *Availability*: PostGIS
- Returns the memory size (number of bytes) that the geometry field takes
- in a ``mem_size`` attribute on each element of the ``GeoQuerySet``.
- ``num_geom``
- ~~~~~~~~~~~~
- .. method:: GeoQuerySet.num_geom(**kwargs)
- *Availability*: PostGIS, Oracle, SpatiaLite
- Returns the number of geometries in a ``num_geom`` attribute on
- each element of the ``GeoQuerySet`` if the geometry field is a
- collection (e.g., a ``GEOMETRYCOLLECTION`` or ``MULTI*`` field);
- otherwise sets with ``None``.
- ``num_points``
- ~~~~~~~~~~~~~~
- .. method:: GeoQuerySet.num_points(**kwargs)
- *Availability*: PostGIS, Oracle, SpatiaLite
- Returns the number of points in the first linestring in the
- geometry field in a ``num_points`` attribute on each element of
- the ``GeoQuerySet``; otherwise sets with ``None``.
- Spatial Aggregates
- ==================
- Aggregate Methods
- -----------------
- ``collect``
- ~~~~~~~~~~~
- .. method:: GeoQuerySet.collect(**kwargs)
- *Availability*: PostGIS
- Returns a ``GEOMETRYCOLLECTION`` or a ``MULTI`` geometry object from the geometry
- column. This is analagous to a simplified version of the :meth:`GeoQuerySet.unionagg` method,
- except it can be several orders of magnitude faster than peforming a union because
- it simply rolls up geometries into a collection or multi object, not caring about
- dissolving boundaries.
- ``extent``
- ~~~~~~~~~~
- .. method:: GeoQuerySet.extent(**kwargs)
- *Availability*: PostGIS, Oracle
- Returns the extent of the ``GeoQuerySet`` as a four-tuple, comprising the
- lower left coordinate and the upper right coordinate.
- Example::
- >>> qs = City.objects.filter(name__in=('Houston', 'Dallas'))
- >>> print(qs.extent())
- (-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
- ``extent3d``
- ~~~~~~~~~~~~
- .. method:: GeoQuerySet.extent3d(**kwargs)
- .. versionadded:: 1.2
- *Availability*: PostGIS
- Returns the 3D extent of the ``GeoQuerySet`` as a six-tuple, comprising
- the lower left coordinate and upper right coordinate.
- Example::
- >>> qs = City.objects.filter(name__in=('Houston', 'Dallas'))
- >>> print(qs.extent3d())
- (-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)
- ``make_line``
- ~~~~~~~~~~~~~
- .. method:: GeoQuerySet.make_line(**kwargs)
- *Availability*: PostGIS
- Returns a ``LineString`` constructed from the point field geometries in the
- ``GeoQuerySet``. Currently, ordering the queryset has no effect.
- Example::
- >>> print(City.objects.filter(name__in=('Houston', 'Dallas')).make_line())
- LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)
- ``unionagg``
- ~~~~~~~~~~~~
- .. method:: GeoQuerySet.unionagg(**kwargs)
- *Availability*: PostGIS, Oracle, SpatiaLite
- This method returns a :class:`~django.contrib.gis.geos.GEOSGeometry` object
- comprising the union of every geometry in the queryset. Please note that
- use of ``unionagg`` is processor intensive and may take a significant amount
- of time on large querysets.
- .. note::
- If the computation time for using this method is too expensive,
- consider using :meth:`GeoQuerySet.collect` instead.
- Example::
- >>> u = Zipcode.objects.unionagg() # This may take a long time.
- >>> u = Zipcode.objects.filter(poly__within=bbox).unionagg() # A more sensible approach.
- ===================== =====================================================
- Keyword Argument Description
- ===================== =====================================================
- ``tolerance`` This keyword is for Oracle only. It is for the
- tolerance value used by the ``SDOAGGRTYPE``
- procedure; the `Oracle documentation`__ has more
- details.
- ===================== =====================================================
- __ http://download.oracle.com/docs/html/B14255_01/sdo_intro.htm#sthref150
- Aggregate Functions
- -------------------
- Example::
- >>> from django.contrib.gis.db.models import Extent, Union
- >>> WorldBorder.objects.aggregate(Extent('mpoly'), Union('mpoly'))
- ``Collect``
- ~~~~~~~~~~~
- .. class:: Collect(geo_field)
- Returns the same as the :meth:`GeoQuerySet.collect` aggregate method.
- ``Extent``
- ~~~~~~~~~~
- .. class:: Extent(geo_field)
- Returns the same as the :meth:`GeoQuerySet.extent` aggregate method.
- ``Extent3D``
- ~~~~~~~~~~~~
- .. class:: Extent3D(geo_field)
- .. versionadded:: 1.2
- Returns the same as the :meth:`GeoQuerySet.extent3d` aggregate method.
- ``MakeLine``
- ~~~~~~~~~~~~
- .. class:: MakeLine(geo_field)
- Returns the same as the :meth:`GeoQuerySet.make_line` aggregate method.
- ``Union``
- ~~~~~~~~~
- .. class:: Union(geo_field)
- Returns the same as the :meth:`GeoQuerySet.union` aggregate method.
- .. rubric:: Footnotes
- .. [#fnde9im] *See* `OpenGIS Simple Feature Specification For SQL <http://www.opengis.org/docs/99-049.pdf>`_, at Ch. 2.1.13.2, p. 2-13 (The Dimensionally Extended Nine-Intersection Model).
- .. [#fnsdorelate] *See* `SDO_RELATE documentation <http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14255/sdo_operat.htm#sthref845>`_, from Ch. 11 of the Oracle Spatial User's Guide and Manual.
- .. [#fncovers] For an explanation of this routine, read `Quirks of the "Contains" Spatial Predicate <http://lin-ear-th-inking.blogspot.com/2007/06/subtleties-of-ogc-covers-spatial.html>`_ by Martin Davis (a PostGIS developer).
- .. [#fncontainsproperly] Refer to the PostGIS ``ST_ContainsProperly`` `documentation <http://postgis.refractions.net/documentation/manual-1.4/ST_ContainsProperly.html>`_ for more details.
|