diff options
| author | Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> | 2025-03-19 13:16:32 +0100 |
|---|---|---|
| committer | Natalia <124304+nessita@users.noreply.github.com> | 2025-03-19 09:32:39 -0300 |
| commit | 143068e0de9f00b5d82fa33c173b565d231404f5 (patch) | |
| tree | 6e91a587096e588484e094aed1f9da6fcbc0cbab /docs | |
| parent | 3d3bd04cba71c57298b2b106b5856b1f44a0a7cc (diff) | |
[5.2.x] Fixed #36097 -- Replaced GIS functions table with section headers for better readability and navigation.
Backport of ed1e7c02c9db2cc28b3ab5621ce6315fcee54b27 from main.
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/ref/contrib/gis/functions.txt | 785 |
1 files changed, 396 insertions, 389 deletions
diff --git a/docs/ref/contrib/gis/functions.txt b/docs/ref/contrib/gis/functions.txt index ff05d0ec96..c9d0b2c5c4 100644 --- a/docs/ref/contrib/gis/functions.txt +++ b/docs/ref/contrib/gis/functions.txt @@ -20,22 +20,11 @@ function to see if your database backend supports the function you want to use. If you call a geographic function on a backend that doesn't support it, you'll get a ``NotImplementedError`` exception. -Function's summary: - -========================= ======================== ====================== ======================= ================== ================== ====================== -Measurement Relationships Operations Editors Input format Output format Miscellaneous -========================= ======================== ====================== ======================= ================== ================== ====================== -:class:`Area` :class:`Azimuth` :class:`Difference` :class:`ForcePolygonCW` :class:`AsGeoJSON` :class:`IsEmpty` -:class:`Distance` :class:`BoundingCircle` :class:`Intersection` :class:`MakeValid` :class:`AsGML` :class:`IsValid` -:class:`GeometryDistance` :class:`Centroid` :class:`SymDifference` :class:`Reverse` :class:`AsKML` :class:`MemSize` -:class:`Length` :class:`ClosestPoint` :class:`Union` :class:`Scale` :class:`AsSVG` :class:`NumGeometries` -:class:`Perimeter` :class:`Envelope` :class:`SnapToGrid` :class:`FromWKB` :class:`AsWKB` :class:`NumPoints` - :class:`LineLocatePoint` :class:`Transform` :class:`FromWKT` :class:`AsWKT` - :class:`PointOnSurface` :class:`Translate` :class:`GeoHash` -========================= ======================== ====================== ======================= ================== ================== ====================== +Measurements +============ ``Area`` -======== +-------- .. class:: Area(expression, **extra) @@ -49,169 +38,102 @@ field as an :class:`~django.contrib.gis.measure.Area` measure. MySQL and SpatiaLite without LWGEOM/RTTOPO don't support area calculations on geographic SRSes. -``AsGeoJSON`` -============= +``Distance`` +------------ -.. class:: AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra) +.. class:: Distance(expr1, expr2, spheroid=None, **extra) *Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/spatial-geojson-functions.html#function_st-asgeojson>`__, -Oracle, `PostGIS <https://postgis.net/docs/ST_AsGeoJSON.html>`__, SpatiaLite - -Accepts a single geographic field or expression and returns a `GeoJSON -<https://geojson.org/>`_ representation of the geometry. Note that the result -is not a complete GeoJSON structure but only the ``geometry`` key content of a -GeoJSON structure. See also :doc:`/ref/contrib/gis/serializers`. - -Example: - -.. code-block:: pycon - - >>> City.objects.annotate(json=AsGeoJSON("point")).get(name="Chicago").json - {"type":"Point","coordinates":[-87.65018,41.85039]} - -===================== ===================================================== -Keyword Argument Description -===================== ===================================================== -``bbox`` Set this to ``True`` if you want the bounding box - to be included in the returned GeoJSON. Ignored on - Oracle. - -``crs`` Set this to ``True`` if you want the coordinate - reference system to be included in the returned - GeoJSON. Ignored on MySQL and Oracle. - -``precision`` It may be used to specify the number of significant - digits for the coordinates in the GeoJSON - representation -- the default value is 8. Ignored on - Oracle. -===================== ===================================================== - -``AsGML`` -========= - -.. class:: AsGML(expression, version=2, precision=8, **extra) - -*Availability*: Oracle, `PostGIS <https://postgis.net/docs/ST_AsGML.html>`__, -SpatiaLite - -Accepts a single geographic field or expression and returns a `Geographic Markup -Language (GML)`__ representation of the geometry. - -Example: - -.. code-block:: pycon - - >>> qs = Zipcode.objects.annotate(gml=AsGML("poly")) - >>> 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`` Specifies the number of significant digits for the - coordinates in the GML representation -- the default - value is 8. Ignored on Oracle. - -``version`` Specifies the GML version to use: 2 (default) or 3. -===================== ===================================================== - -__ https://en.wikipedia.org/wiki/Geography_Markup_Language - -``AsKML`` -========= +<https://dev.mysql.com/doc/refman/en/spatial-relation-functions-object-shapes.html#function_st-distance>`__, +`PostGIS <https://postgis.net/docs/ST_Distance.html>`__, Oracle, SpatiaLite -.. class:: AsKML(expression, precision=8, **extra) +Accepts two geographic fields or expressions and returns the distance between +them, as a :class:`~django.contrib.gis.measure.Distance` object. On MySQL, a raw +float value is returned when the coordinates are geodetic. -*Availability*: `PostGIS <https://postgis.net/docs/ST_AsKML.html>`__, SpatiaLite +On backends that support distance calculation on geodetic coordinates, the +proper backend function is automatically chosen depending on the SRID value of +the geometries (e.g. `ST_DistanceSphere +<https://postgis.net/docs/ST_DistanceSphere.html>`__ on PostGIS). -Accepts a single geographic field or expression and returns a `Keyhole Markup -Language (KML)`__ representation of the geometry. +When distances are calculated with geodetic (angular) coordinates, as is the +case with the default WGS84 (4326) SRID, you can set the ``spheroid`` keyword +argument to decide if the calculation should be based on a simple sphere (less +accurate, less resource-intensive) or on a spheroid (more accurate, more +resource-intensive). -Example: +In the following example, the distance from the city of Hobart to every other +:class:`~django.contrib.gis.db.models.PointField` in the ``AustraliaCity`` +queryset is calculated: .. code-block:: pycon - >>> qs = Zipcode.objects.annotate(kml=AsKML("poly")) - >>> 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. -===================== ===================================================== - -__ https://developers.google.com/kml/documentation/ - -``AsSVG`` -========= + >>> from django.contrib.gis.db.models.functions import Distance + >>> pnt = AustraliaCity.objects.get(name="Hobart").point + >>> for city in AustraliaCity.objects.annotate(distance=Distance("point", pnt)): + ... print(city.name, city.distance) + ... + Wollongong 990071.220408 m + Shellharbour 972804.613941 m + Thirroul 1002334.36351 m + ... -.. class:: AsSVG(expression, relative=False, precision=8, **extra) +.. note:: -*Availability*: `PostGIS <https://postgis.net/docs/ST_AsSVG.html>`__, SpatiaLite + 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 :doc:`measure` for usage details and the list of + :ref:`supported_units`. -Accepts a single geographic field or expression and returns a `Scalable Vector -Graphics (SVG)`__ representation of the geometry. +``GeometryDistance`` +-------------------- -===================== ===================================================== -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. +.. class:: GeometryDistance(expr1, expr2, **extra) -``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. -===================== ===================================================== +*Availability*: `PostGIS <https://postgis.net/docs/geometry_distance_knn.html>`__ -__ https://www.w3.org/Graphics/SVG/ +Accepts two geographic fields or expressions and returns the distance between +them. When used in an :meth:`~django.db.models.query.QuerySet.order_by` clause, +it provides index-assisted nearest-neighbor result sets. -``AsWKB`` -========= +``Length`` +---------- -.. class:: AsWKB(expression, **extra) +.. class:: Length(expression, spheroid=True, **extra) *Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/gis-format-conversion-functions.html#function_st-asbinary>`__, -Oracle, `PostGIS <https://postgis.net/docs/ST_AsBinary.html>`__, SpatiaLite - -Accepts a single geographic field or expression and returns a `Well-known -binary (WKB)`_ representation of the geometry. - -Example: - -.. code-block:: pycon +<https://dev.mysql.com/doc/refman/en/gis-linestring-property-functions.html#function_st-length>`__, +Oracle, `PostGIS <https://postgis.net/docs/ST_Length.html>`__, SpatiaLite - >>> bytes(City.objects.annotate(wkb=AsWKB("point")).get(name="Chelyabinsk").wkb) - b'\x01\x01\x00\x00\x00]3\xf9f\x9b\x91K@\x00X\x1d9\xd2\xb9N@' +Accepts a single geographic linestring or multilinestring field or expression +and returns its length as a :class:`~django.contrib.gis.measure.Distance` +measure. -``AsWKT`` -========= +On PostGIS and SpatiaLite, when the coordinates are geodetic (angular), you can +specify if the calculation should be based on a simple sphere (less +accurate, less resource-intensive) or on a spheroid (more accurate, more +resource-intensive) with the ``spheroid`` keyword argument. -.. class:: AsWKT(expression, **extra) +MySQL doesn't support length calculations on geographic SRSes. -*Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/gis-format-conversion-functions.html#function_st-astext>`__, -Oracle, `PostGIS <https://postgis.net/docs/ST_AsText.html>`__, SpatiaLite +``Perimeter`` +------------- -Accepts a single geographic field or expression and returns a `Well-known text -(WKT)`_ representation of the geometry. +.. class:: Perimeter(expression, **extra) -Example: +*Availability*: `PostGIS <https://postgis.net/docs/ST_Perimeter.html>`__, +Oracle, SpatiaLite -.. code-block:: pycon +Accepts a single geographic field or expression and returns the perimeter of the +geometry field as a :class:`~django.contrib.gis.measure.Distance` object. - >>> City.objects.annotate(wkt=AsWKT("point")).get(name="Chelyabinsk").wkt - 'POINT (55.137555 61.451728)' +Relationships +============= ``Azimuth`` -=========== +----------- .. class:: Azimuth(point_a, point_b, **extra) @@ -224,7 +146,7 @@ referenced from north and is positive clockwise: north = ``0``; east = ``π/2``; south = ``π``; west = ``3π/2``. ``BoundingCircle`` -================== +------------------ .. class:: BoundingCircle(expression, num_seg=48, **extra) @@ -243,7 +165,7 @@ The ``num_seg`` parameter is used only on PostGIS. SpatiaLite 5.1+ support was added. ``Centroid`` -============ +------------ .. class:: Centroid(expression, **extra) @@ -255,7 +177,7 @@ Accepts a single geographic field or expression and returns the ``centroid`` value of the geometry. ``ClosestPoint`` -================ +---------------- .. class:: ClosestPoint(expr1, expr2, **extra) @@ -265,8 +187,47 @@ SpatiaLite Accepts two geographic fields or expressions and returns the 2-dimensional point on geometry A that is closest to geometry B. +``Envelope`` +------------ + +.. class:: Envelope(expression, **extra) + +*Availability*: MariaDB, `MySQL +<https://dev.mysql.com/doc/refman/en/gis-general-property-functions.html#function_st-envelope>`__, +`Oracle <https://docs.oracle.com/en/database/oracle/oracle-database/21/spatl/ +spatial-operators-reference.html#GUID-ACED800F-3435-44AA-9606-D40934A23ED0>`__, +`PostGIS <https://postgis.net/docs/ST_Envelope.html>`__, SpatiaLite + +Accepts a single geographic field or expression and returns the geometry +representing the bounding box of the geometry. + +``LineLocatePoint`` +------------------- + +.. class:: LineLocatePoint(linestring, point, **extra) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_LineLocatePoint.html>`__, +SpatiaLite + +Returns a float between 0 and 1 representing the location of the closest point on +``linestring`` to the given ``point``, as a fraction of the 2D line length. + +``PointOnSurface`` +------------------ + +.. class:: PointOnSurface(expression, **extra) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_PointOnSurface.html>`__, +MariaDB, Oracle, SpatiaLite + +Accepts a single geographic field or expression and returns a ``Point`` geometry +guaranteed to lie on the surface of the field; otherwise returns ``None``. + +Operations +========== + ``Difference`` -============== +-------------- .. class:: Difference(expr1, expr2, **extra) @@ -278,71 +239,52 @@ Accepts two geographic fields or expressions and returns the geometric difference, that is the part of geometry A that does not intersect with geometry B. -``Distance`` -============ +``Intersection`` +---------------- -.. class:: Distance(expr1, expr2, spheroid=None, **extra) +.. class:: Intersection(expr1, expr2, **extra) *Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/spatial-relation-functions-object-shapes.html#function_st-distance>`__, -`PostGIS <https://postgis.net/docs/ST_Distance.html>`__, Oracle, SpatiaLite - -Accepts two geographic fields or expressions and returns the distance between -them, as a :class:`~django.contrib.gis.measure.Distance` object. On MySQL, a raw -float value is returned when the coordinates are geodetic. +<https://dev.mysql.com/doc/refman/en/spatial-operator-functions.html#function_st-intersection>`__, +`PostGIS <https://postgis.net/docs/ST_Intersection.html>`__, Oracle, SpatiaLite -On backends that support distance calculation on geodetic coordinates, the -proper backend function is automatically chosen depending on the SRID value of -the geometries (e.g. `ST_DistanceSphere -<https://postgis.net/docs/ST_DistanceSphere.html>`__ on PostGIS). +Accepts two geographic fields or expressions and returns the geometric +intersection between them. -When distances are calculated with geodetic (angular) coordinates, as is the -case with the default WGS84 (4326) SRID, you can set the ``spheroid`` keyword -argument to decide if the calculation should be based on a simple sphere (less -accurate, less resource-intensive) or on a spheroid (more accurate, more -resource-intensive). +``SymDifference`` +----------------- -In the following example, the distance from the city of Hobart to every other -:class:`~django.contrib.gis.db.models.PointField` in the ``AustraliaCity`` -queryset is calculated: +.. class:: SymDifference(expr1, expr2, **extra) -.. code-block:: pycon +*Availability*: MariaDB, `MySQL +<https://dev.mysql.com/doc/refman/en/spatial-operator-functions.html#function_st-symdifference>`__, +`PostGIS <https://postgis.net/docs/ST_SymDifference.html>`__, Oracle, +SpatiaLite - >>> from django.contrib.gis.db.models.functions import Distance - >>> pnt = AustraliaCity.objects.get(name="Hobart").point - >>> for city in AustraliaCity.objects.annotate(distance=Distance("point", pnt)): - ... print(city.name, city.distance) - ... - Wollongong 990071.220408 m - Shellharbour 972804.613941 m - Thirroul 1002334.36351 m - ... +Accepts two geographic fields or expressions and returns the geometric +symmetric difference (union without the intersection) between the given +parameters. -.. note:: +``Union`` +--------- - 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 :doc:`measure` for usage details and the list of - :ref:`supported_units`. +.. class:: Union(expr1, expr2, **extra) -``Envelope`` -============ +*Availability*: MariaDB, `MySQL +<https://dev.mysql.com/doc/refman/en/spatial-operator-functions.html#function_st-union>`__, +`PostGIS <https://postgis.net/docs/ST_Union.html>`__, Oracle, SpatiaLite -.. class:: Envelope(expression, **extra) +Accepts two geographic fields or expressions and returns the union of both +geometries. -*Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/gis-general-property-functions.html#function_st-envelope>`__, -`Oracle <https://docs.oracle.com/en/database/oracle/oracle-database/21/spatl/ -spatial-operators-reference.html#GUID-ACED800F-3435-44AA-9606-D40934A23ED0>`__, -`PostGIS <https://postgis.net/docs/ST_Envelope.html>`__, SpatiaLite +.. _`Well-known binary (WKB)`: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary +.. _`Well-known text (WKT)`: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry -Accepts a single geographic field or expression and returns the geometry -representing the bounding box of the geometry. +Editors +======= ``ForcePolygonCW`` -================== +------------------ .. class:: ForcePolygonCW(expression, **extra) @@ -354,8 +296,97 @@ of the polygon/multipolygon in which all exterior rings are oriented clockwise and all interior rings are oriented counterclockwise. Non-polygonal geometries are returned unchanged. +``MakeValid`` +------------- + +.. class:: MakeValid(expr) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_MakeValid.html>`__, +SpatiaLite (LWGEOM/RTTOPO) + +Accepts a geographic field or expression and attempts to convert the value into +a valid geometry without losing any of the input vertices. Geometries that are +already valid are returned without changes. Simple polygons might become a +multipolygon and the result might be of lower dimension than the input. + +``Reverse`` +----------- + +.. class:: Reverse(expression, **extra) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_Reverse.html>`__, Oracle, +SpatiaLite + +Accepts a single geographic field or expression and returns a geometry with +reversed coordinates. + +``Scale`` +--------- + +.. class:: Scale(expression, x, y, z=0.0, **extra) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_Scale.html>`__, SpatiaLite + +Accepts a single geographic field or expression and returns a geometry with +scaled coordinates by multiplying them with the ``x``, ``y``, and optionally +``z`` parameters. + +``SnapToGrid`` +-------------- + +.. class:: SnapToGrid(expression, *args, **extra) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_SnapToGrid.html>`__, +SpatiaLite + +Accepts a single geographic field or expression and returns a geometry with all +points snapped to the given 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 both 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`` +------------- + +.. class:: Transform(expression, srid, **extra) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_Transform.html>`__, +Oracle, SpatiaLite + +Accepts a geographic field or expression and a SRID integer code, and returns +the transformed geometry to the spatial reference system specified by the +``srid`` parameter. + +.. 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. + +``Translate`` +------------- + +.. class:: Translate(expression, x, y, z=0.0, **extra) + +*Availability*: `PostGIS <https://postgis.net/docs/ST_Translate.html>`__, +SpatiaLite + +Accepts a single geographic field or expression and returns a geometry with +its coordinates offset by the ``x``, ``y``, and optionally ``z`` numeric +parameters. + +Input format +============ + ``FromWKB`` -=========== +----------- .. class:: FromWKB(expression, srid=0, **extra) @@ -372,7 +403,7 @@ Creates geometry from `Well-known binary (WKB)`_ representation. The optional The ``srid`` argument was added. ``FromWKT`` -=========== +----------- .. class:: FromWKT(expression, srid=0, **extra) @@ -388,273 +419,249 @@ Creates geometry from `Well-known text (WKT)`_ representation. The optional The ``srid`` argument was added. -``GeoHash`` -=========== - -.. class:: GeoHash(expression, precision=None, **extra) +Output format +============= -*Availability*: `MySQL -<https://dev.mysql.com/doc/refman/en/spatial-geohash-functions.html#function_st-geohash>`__, -`PostGIS <https://postgis.net/docs/ST_GeoHash.html>`__, SpatiaLite -(LWGEOM/RTTOPO) +``AsGeoJSON`` +------------- -Accepts a single geographic field or expression and returns a `GeoHash`__ -representation of the geometry. +.. class:: AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra) -The ``precision`` keyword argument controls the number of characters in the -result. +*Availability*: MariaDB, `MySQL +<https://dev.mysql.com/doc/refman/en/spatial-geojson-functions.html#function_st-asgeojson>`__, +Oracle, `PostGIS <https://postgis.net/docs/ST_AsGeoJSON.html>`__, SpatiaLite -__ https://en.wikipedia.org/wiki/Geohash +Accepts a single geographic field or expression and returns a `GeoJSON +<https://geojson.org/>`_ representation of the geometry. Note that the result +is not a complete GeoJSON structure but only the ``geometry`` key content of a +GeoJSON structure. See also :doc:`/ref/contrib/gis/serializers`. -``GeometryDistance`` -==================== +Example: -.. class:: GeometryDistance(expr1, expr2, **extra) +.. code-block:: pycon -*Availability*: `PostGIS <https://postgis.net/docs/geometry_distance_knn.html>`__ + >>> City.objects.annotate(json=AsGeoJSON("point")).get(name="Chicago").json + {"type":"Point","coordinates":[-87.65018,41.85039]} -Accepts two geographic fields or expressions and returns the distance between -them. When used in an :meth:`~django.db.models.query.QuerySet.order_by` clause, -it provides index-assisted nearest-neighbor result sets. +===================== ===================================================== +Keyword Argument Description +===================== ===================================================== +``bbox`` Set this to ``True`` if you want the bounding box + to be included in the returned GeoJSON. Ignored on + Oracle. -``Intersection`` -================ +``crs`` Set this to ``True`` if you want the coordinate + reference system to be included in the returned + GeoJSON. Ignored on MySQL and Oracle. -.. class:: Intersection(expr1, expr2, **extra) +``precision`` It may be used to specify the number of significant + digits for the coordinates in the GeoJSON + representation -- the default value is 8. Ignored on + Oracle. +===================== ===================================================== -*Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/spatial-operator-functions.html#function_st-intersection>`__, -`PostGIS <https://postgis.net/docs/ST_Intersection.html>`__, Oracle, SpatiaLite +``AsGML`` +--------- -Accepts two geographic fields or expressions and returns the geometric -intersection between them. +.. class:: AsGML(expression, version=2, precision=8, **extra) -``IsEmpty`` -=========== +*Availability*: Oracle, `PostGIS <https://postgis.net/docs/ST_AsGML.html>`__, +SpatiaLite -.. class:: IsEmpty(expr) +Accepts a single geographic field or expression and returns a `Geographic Markup +Language (GML)`__ representation of the geometry. -*Availability*: `PostGIS <https://postgis.net/docs/ST_IsEmpty.html>`__ +Example: -Accepts a geographic field or expression and tests if the value is an empty -geometry. Returns ``True`` if its value is empty and ``False`` otherwise. +.. code-block:: pycon -``IsValid`` -=========== + >>> qs = Zipcode.objects.annotate(gml=AsGML("poly")) + >>> print(qs[0].gml) + <gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ... + -147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon> -.. class:: IsValid(expr) +===================== ===================================================== +Keyword Argument Description +===================== ===================================================== +``precision`` Specifies the number of significant digits for the + coordinates in the GML representation -- the default + value is 8. Ignored on Oracle. -*Availability*: `MySQL -<https://dev.mysql.com/doc/refman/en/spatial-convenience-functions.html#function_st-isvalid>`__, -`PostGIS <https://postgis.net/docs/ST_IsValid.html>`__, Oracle, SpatiaLite +``version`` Specifies the GML version to use: 2 (default) or 3. +===================== ===================================================== -Accepts a geographic field or expression and tests if the value is well formed. -Returns ``True`` if its value is a valid geometry and ``False`` otherwise. +__ https://en.wikipedia.org/wiki/Geography_Markup_Language -``Length`` -========== +``AsKML`` +--------- -.. class:: Length(expression, spheroid=True, **extra) +.. class:: AsKML(expression, precision=8, **extra) -*Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/gis-linestring-property-functions.html#function_st-length>`__, -Oracle, `PostGIS <https://postgis.net/docs/ST_Length.html>`__, SpatiaLite +*Availability*: `PostGIS <https://postgis.net/docs/ST_AsKML.html>`__, SpatiaLite -Accepts a single geographic linestring or multilinestring field or expression -and returns its length as a :class:`~django.contrib.gis.measure.Distance` -measure. +Accepts a single geographic field or expression and returns a `Keyhole Markup +Language (KML)`__ representation of the geometry. -On PostGIS and SpatiaLite, when the coordinates are geodetic (angular), you can -specify if the calculation should be based on a simple sphere (less -accurate, less resource-intensive) or on a spheroid (more accurate, more -resource-intensive) with the ``spheroid`` keyword argument. +Example: -MySQL doesn't support length calculations on geographic SRSes. +.. code-block:: pycon -``LineLocatePoint`` -=================== + >>> qs = Zipcode.objects.annotate(kml=AsKML("poly")) + >>> print(qs[0].kml) + <Polygon><outerBoundaryIs><LinearRing><coordinates>-103.04135,36.217596,0 ... + -103.04135,36.217596,0</coordinates></LinearRing></outerBoundaryIs></Polygon> -.. class:: LineLocatePoint(linestring, point, **extra) +===================== ===================================================== +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. +===================== ===================================================== -*Availability*: `PostGIS <https://postgis.net/docs/ST_LineLocatePoint.html>`__, -SpatiaLite +__ https://developers.google.com/kml/documentation/ -Returns a float between 0 and 1 representing the location of the closest point on -``linestring`` to the given ``point``, as a fraction of the 2D line length. +``AsSVG`` +--------- -``MakeValid`` -============= +.. class:: AsSVG(expression, relative=False, precision=8, **extra) -.. class:: MakeValid(expr) +*Availability*: `PostGIS <https://postgis.net/docs/ST_AsSVG.html>`__, SpatiaLite -*Availability*: `PostGIS <https://postgis.net/docs/ST_MakeValid.html>`__, -SpatiaLite (LWGEOM/RTTOPO) +Accepts a single geographic field or expression and returns a `Scalable Vector +Graphics (SVG)`__ representation of the geometry. -Accepts a geographic field or expression and attempts to convert the value into -a valid geometry without losing any of the input vertices. Geometries that are -already valid are returned without changes. Simple polygons might become a -multipolygon and the result might be of lower dimension than the input. +===================== ===================================================== +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. -``MemSize`` -=========== +``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. +===================== ===================================================== -.. class:: MemSize(expression, **extra) +__ https://www.w3.org/Graphics/SVG/ -*Availability*: `PostGIS <https://postgis.net/docs/ST_MemSize.html>`__ +``AsWKB`` +--------- -Accepts a single geographic field or expression and returns the memory size -(number of bytes) that the geometry field takes. +.. class:: AsWKB(expression, **extra) -``NumGeometries`` -================= +*Availability*: MariaDB, `MySQL +<https://dev.mysql.com/doc/refman/en/gis-format-conversion-functions.html#function_st-asbinary>`__, +Oracle, `PostGIS <https://postgis.net/docs/ST_AsBinary.html>`__, SpatiaLite -.. class:: NumGeometries(expression, **extra) +Accepts a single geographic field or expression and returns a `Well-known +binary (WKB)`_ representation of the geometry. -*Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/gis-geometrycollection-property-functions.html#function_st-numgeometries>`__, -`PostGIS <https://postgis.net/docs/ST_NumGeometries.html>`__, Oracle, -SpatiaLite +Example: -Accepts a single geographic field or expression and returns the number of -geometries if the geometry field is a collection (e.g., a ``GEOMETRYCOLLECTION`` -or ``MULTI*`` field). Returns 1 for single geometries. +.. code-block:: pycon -On MySQL, returns ``None`` for single geometries. + >>> bytes(City.objects.annotate(wkb=AsWKB("point")).get(name="Chelyabinsk").wkb) + b'\x01\x01\x00\x00\x00]3\xf9f\x9b\x91K@\x00X\x1d9\xd2\xb9N@' -``NumPoints`` -============= +``AsWKT`` +--------- -.. class:: NumPoints(expression, **extra) +.. class:: AsWKT(expression, **extra) *Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/gis-linestring-property-functions.html#function_st-numpoints>`__, -`PostGIS <https://postgis.net/docs/ST_NPoints.html>`__, Oracle, SpatiaLite +<https://dev.mysql.com/doc/refman/en/gis-format-conversion-functions.html#function_st-astext>`__, +Oracle, `PostGIS <https://postgis.net/docs/ST_AsText.html>`__, SpatiaLite -Accepts a single geographic field or expression and returns the number of points -in a geometry. +Accepts a single geographic field or expression and returns a `Well-known text +(WKT)`_ representation of the geometry. -On MySQL, returns ``None`` for any non-``LINESTRING`` geometry. +Example: -``Perimeter`` -============= +.. code-block:: pycon -.. class:: Perimeter(expression, **extra) + >>> City.objects.annotate(wkt=AsWKT("point")).get(name="Chelyabinsk").wkt + 'POINT (55.137555 61.451728)' -*Availability*: `PostGIS <https://postgis.net/docs/ST_Perimeter.html>`__, -Oracle, SpatiaLite +``GeoHash`` +----------- -Accepts a single geographic field or expression and returns the perimeter of the -geometry field as a :class:`~django.contrib.gis.measure.Distance` object. +.. class:: GeoHash(expression, precision=None, **extra) -``PointOnSurface`` -================== +*Availability*: `MySQL +<https://dev.mysql.com/doc/refman/en/spatial-geohash-functions.html#function_st-geohash>`__, +`PostGIS <https://postgis.net/docs/ST_GeoHash.html>`__, SpatiaLite +(LWGEOM/RTTOPO) -.. class:: PointOnSurface(expression, **extra) +Accepts a single geographic field or expression and returns a `GeoHash`__ +representation of the geometry. -*Availability*: `PostGIS <https://postgis.net/docs/ST_PointOnSurface.html>`__, -MariaDB, Oracle, SpatiaLite +The ``precision`` keyword argument controls the number of characters in the +result. -Accepts a single geographic field or expression and returns a ``Point`` geometry -guaranteed to lie on the surface of the field; otherwise returns ``None``. +__ https://en.wikipedia.org/wiki/Geohash -``Reverse`` -=========== +Miscellaneous +============= -.. class:: Reverse(expression, **extra) +``IsEmpty`` +----------- -*Availability*: `PostGIS <https://postgis.net/docs/ST_Reverse.html>`__, Oracle, -SpatiaLite +.. class:: IsEmpty(expr) -Accepts a single geographic field or expression and returns a geometry with -reversed coordinates. +*Availability*: `PostGIS <https://postgis.net/docs/ST_IsEmpty.html>`__ -``Scale`` -========= +Accepts a geographic field or expression and tests if the value is an empty +geometry. Returns ``True`` if its value is empty and ``False`` otherwise. -.. class:: Scale(expression, x, y, z=0.0, **extra) +``IsValid`` +----------- -*Availability*: `PostGIS <https://postgis.net/docs/ST_Scale.html>`__, SpatiaLite +.. class:: IsValid(expr) -Accepts a single geographic field or expression and returns a geometry with -scaled coordinates by multiplying them with the ``x``, ``y``, and optionally -``z`` parameters. +*Availability*: `MySQL +<https://dev.mysql.com/doc/refman/en/spatial-convenience-functions.html#function_st-isvalid>`__, +`PostGIS <https://postgis.net/docs/ST_IsValid.html>`__, Oracle, SpatiaLite -``SnapToGrid`` -============== +Accepts a geographic field or expression and tests if the value is well formed. +Returns ``True`` if its value is a valid geometry and ``False`` otherwise. -.. class:: SnapToGrid(expression, *args, **extra) +``MemSize`` +----------- -*Availability*: `PostGIS <https://postgis.net/docs/ST_SnapToGrid.html>`__, -SpatiaLite +.. class:: MemSize(expression, **extra) -Accepts a single geographic field or expression and returns a geometry with all -points snapped to the given grid. How the geometry is snapped to the grid -depends on how many numeric (either float, integer, or long) arguments are -given. +*Availability*: `PostGIS <https://postgis.net/docs/ST_MemSize.html>`__ -=================== ===================================================== -Number of Arguments Description -=================== ===================================================== -1 A single size to snap both 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. -=================== ===================================================== +Accepts a single geographic field or expression and returns the memory size +(number of bytes) that the geometry field takes. -``SymDifference`` -================= +``NumGeometries`` +----------------- -.. class:: SymDifference(expr1, expr2, **extra) +.. class:: NumGeometries(expression, **extra) *Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/spatial-operator-functions.html#function_st-symdifference>`__, -`PostGIS <https://postgis.net/docs/ST_SymDifference.html>`__, Oracle, +<https://dev.mysql.com/doc/refman/en/gis-geometrycollection-property-functions.html#function_st-numgeometries>`__, +`PostGIS <https://postgis.net/docs/ST_NumGeometries.html>`__, Oracle, SpatiaLite -Accepts two geographic fields or expressions and returns the geometric -symmetric difference (union without the intersection) between the given -parameters. - -``Transform`` -============= - -.. class:: Transform(expression, srid, **extra) - -*Availability*: `PostGIS <https://postgis.net/docs/ST_Transform.html>`__, -Oracle, SpatiaLite - -Accepts a geographic field or expression and a SRID integer code, and returns -the transformed geometry to the spatial reference system specified by the -``srid`` parameter. - -.. 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. - -``Translate`` -============= - -.. class:: Translate(expression, x, y, z=0.0, **extra) - -*Availability*: `PostGIS <https://postgis.net/docs/ST_Translate.html>`__, -SpatiaLite +Accepts a single geographic field or expression and returns the number of +geometries if the geometry field is a collection (e.g., a ``GEOMETRYCOLLECTION`` +or ``MULTI*`` field). Returns 1 for single geometries. -Accepts a single geographic field or expression and returns a geometry with -its coordinates offset by the ``x``, ``y``, and optionally ``z`` numeric -parameters. +On MySQL, returns ``None`` for single geometries. -``Union`` -========= +``NumPoints`` +------------- -.. class:: Union(expr1, expr2, **extra) +.. class:: NumPoints(expression, **extra) *Availability*: MariaDB, `MySQL -<https://dev.mysql.com/doc/refman/en/spatial-operator-functions.html#function_st-union>`__, -`PostGIS <https://postgis.net/docs/ST_Union.html>`__, Oracle, SpatiaLite +<https://dev.mysql.com/doc/refman/en/gis-linestring-property-functions.html#function_st-numpoints>`__, +`PostGIS <https://postgis.net/docs/ST_NPoints.html>`__, Oracle, SpatiaLite -Accepts two geographic fields or expressions and returns the union of both -geometries. +Accepts a single geographic field or expression and returns the number of points +in a geometry. -.. _`Well-known binary (WKB)`: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry#Well-known_binary -.. _`Well-known text (WKT)`: https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry +On MySQL, returns ``None`` for any non-``LINESTRING`` geometry. |
