Funciones de bases de datos geográficas

Los textos traducidos son:

Ejemplo:

>>> from django.contrib.gis.db.models.functions import Length
>>> Track.objects.annotate(length=Length("line")).filter(length__gt=100)

No todas las backends admiten todas las funciones, por lo que consulta la documentación de cada función para ver si tu backend de base de datos admite la función que deseas utilizar. Si llamas a una función geográfica en un backend que no la admite, obtendrás una excepción NotImplementedError.

Mediciones

Área

class Area(expression, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Aceptar un campo geográfico o expresión único y devuelve el área del campo como una medida de Area.

MySQL y SpatiaLite sin LWGEOM/RTTOPO no admiten cálculos de áreas en SRS geográficos.

Distancia

class Distance(expr1, expr2, spheroid=None, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Accepts two geographic fields or expressions and returns the distance between them, as a Distance object. On MySQL, a raw float value is returned when the coordinates are geodetic.

En backends que admiten la cálculo de distancias en coordenadas geodésicas, se elige automáticamente la función del backend adecuada dependiendo del valor SRID de las geometrías (por ejemplo, ST_DistanceSphere en PostGIS).

Cuando se calculan distancias con coordenadas geodésicas (angulares), como es el caso del SRID por defecto WGS84 (4326), puedes establecer la palabra clave spheroid para decidir si el cálculo debe basarse en una simple esfera (menos preciso, menos intensivo en recursos) o en un sferoide (más preciso, más intensivo en recursos).

En el ejemplo siguiente, se calcula la distancia desde la ciudad de Hobart a cada otra PointField en el conjunto de resultados AustraliaCity:

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

Nota

Porque la propiedad distance es un objeto Distance, puedes expresar fácilmente el valor en las unidades de tu elección. Por ejemplo, city.distance.mi es el valor de distancia en millas y city.distance.km es el valor de distancia en kilómetros. Consulta la documentación Objetos de Medición para detalles sobre su uso y la lista de unidades soportadas.

GeometryDistance

class GeometryDistance(expr1, expr2, **extra)[fuente]

Disponibilidad: PostGIS

Accepts two geographic fields or expressions and returns the distance between them. When used in an order_by() clause, it provides index-assisted nearest-neighbor result sets.

Length

class Length(expression, spheroid=True, **extra)[fuente]

Availability: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Accepts a single geographic linestring or multilinestring field or expression and returns its length as a Distance measure.

Al trabajar con PostGIS y SpatiaLite, cuando las coordenadas son geodésicas (angulares), puedes especificar si el cálculo debe basarse en una esfera simple (menos preciso, menos intensivo en recursos) o en un esferoide (más preciso, más intensivo en recursos) utilizando la clave de palabra spheroid.

MySQL no admite cálculos de longitud sobre SRS geográficos.

Perímetro

class Perimeter(expression, **extra)[fuente]

Disponibilidad: PostGIS, Oracle, SpatiaLite

Accepts a single geographic field or expression and returns the perimeter of the geometry field as a Distance object.

Relaciones

Azimut

class Azimuth(point_a, point_b, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite (LWGEOM/RTTOPO)

Devuelve el azimut en radianes del segmento definido por las geometrías de punto dadas, o None si los dos puntos son coincidentes. El azimut es un ángulo referenciado desde el norte y es positivo en sentido horario: norte = 0; este = π/2; sur = π; oeste = 3π/2.

BoundingCircle

class BoundingCircle(expression, num_seg=48, **extra)[fuente]

Disponibilidad: PostGIS, Oracle, SpatiaLite 5.1+

Aceptar un campo geográfico o expresión único y devuelve el círculo polígono más pequeño que puede contener completamente la geometría.

El parámetro num_seg se utiliza solo en PostGIS.

Se agregó soporte a SpatiaLite 5.1+.

Centroid

class Centroid(expression, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Aceptar un campo geográfico o expresión único y devuelve el valor centroid de la geometría.

ClosestPoint

class ClosestPoint(expr1, expr2, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite

Acepta dos campos o expresiones geográficas y devuelve el punto 2-dimensional en la geometría A que está más cerca de la geometría B.

Envoltorio

class Envelope(expression, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Acepta un campo o expresión geográfica único y devuelve la geometría que representa el rectángulo que limita la geometría.

LineLocatePoint

class LineLocatePoint(linestring, point, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite

Devuelve un float entre 0 y 1 que representa la ubicación del punto más cercano en linestring al punto dado, como fracción de la longitud de línea 2D.

PuntoEnSuperficie

class PointOnSurface(expression, **extra)[fuente]

Disponibilidad: PostGIS, MariaDB, Oracle, SpatiaLite

Acepta un campo o expresión geográfica único y devuelve una geometría Punto garantizada para estar en la superficie del campo; de lo contrario, devuelve None.

Operaciones

Diferencia

class Difference(expr1, expr2, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Acepta dos campos o expresiones geográficas y devuelve la diferencia geométrica, es decir, la parte de la geometría A que no intersecta con la geometría B.

Intersección

class Intersection(expr1, expr2, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Acepta dos campos o expresiones geográficas y devuelve la intersección geométrica entre ellos.

SimDiferencia

class SymDifference(expr1, expr2, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Acepta dos campos o expresiones geográficas y devuelve la diferencia simétrica geométrica (unión sin la intersección) entre los parámetros dados.

Unión

class Union(expr1, expr2, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Acepta dos campos o expresiones geográficas y devuelve la unión de ambas geometrías.

Editores

ForzarPoloNoC

class ForcePolygonCW(expression, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite

Acepta un campo o expresión geográfica y devuelve una versión modificada del polígono/multipolígono en la que todos los anillos exteriores están orientados en sentido horario y todos los anillos interiores están orientados en sentido antihorario. Las geometrías no poligonales se devuelven sin cambios.

HacerVálido

class MakeValid(expr)[fuente]

Disponibilidad: PostGIS, SpatiaLite (LWGEOM/RTTOPO)

Acepta un campo o expresión geográfica y intenta convertir el valor en una geometría válida sin perder ninguna de las vértices de entrada. Las geometrías que ya son válidas se devuelven sin cambios. Los polígonos simples pueden convertirse en un multipolígono y el resultado puede tener una dimensión inferior a la del input.

Inverso

class Reverse(expression, **extra)[fuente]

Disponibilidad: PostGIS, Oracle, SpatiaLite

Acepta un campo geográfico o expresión único y devuelve una geometría con coordenadas invertidas.

Escala

class Scale(expression, x, y, z=0.0, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite

Acepta un campo geográfico o expresión único y devuelve una geometría con coordenadas escaladas multiplicando las mismas por los parámetros x, y y opcionalmente z.

Snappy a la malla

class SnapToGrid(expression, *args, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite

Acepta un campo geográfico o expresión única y devuelve una geometría con todos los puntos «snapped» a la red dada. Cómo se «snaps» la geometría a la red depende de cuántos argumentos numéricos (ya sean flotantes, enteros o largos) se dan.

Número de Argumentos

Descripción

1

Un tamaño único para ajustar tanto la malla X como la Y.

2

Tamaños X e Y para ajustar la malla.

4

Tamaños X, Y y las correspondientes coordenadas de origen X, Y.

Transform

class Transform(expression, srid, **extra)[fuente]

Disponibilidad: PostGIS, Oracle, SpatiaLite

Acepta un campo o expresión geográfica y un código de SRID entero, y devuelve la geometría transformada al sistema de referencia espacial especificado por el parámetro srid.

Nota

Lo spatial reference system que un ID de SRID entero corresponde puede depender del motor de base de datos espacial utilizado. En otras palabras, los números de SRID utilizados para Oracle no son necesariamente los mismos que aquellos utilizados por PostGIS.

Traducir

class Translate(expression, x, y, z=0.0, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite

Acepta un campo geográfico o expresión único y devuelve una geometría con sus coordenadas desplazadas por los parámetros numéricos x, y y opcionalmente z.

Formato de entrada

DeWKB

class FromWKB(expression, srid=0, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Crea geometría a partir de la representación binaria conocida (WKB)_. El argumento srid opcional permite especificar el ID de SRID de la geometría resultante. srid se ignora en Oracle.

Se agregó el argumento srid.

DeWKT

class FromWKT(expression, srid=0, **extra)[fuente]

Dispongo a continuación las traducciones de los textos originales, manteniendo todas sus etiquetas intactas.

Crea geometría a partir de la representación en texto conocido (WKT). El argumento opcional srid permite especificar el SRID de la geometría resultante. srid se ignora en Oracle.

Se agregó el argumento srid.

Formato de salida

AsGeoJSON

class AsGeoJSON(expression, bbox=False, crs=False, precision=8, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Acepta un campo geográfico o expresión único y devuelve una representación en formato GeoJSON de la geometría. Tenga en cuenta que el resultado no es una estructura GeoJSON completa, sino solo el contenido del clave geometry de una estructura GeoJSON. Consulte también Serializador GeoJSON.

Ejemplo:

>>> City.objects.annotate(json=AsGeoJSON("point")).get(name="Chicago").json
{"type":"Point","coordinates":[-87.65018,41.85039]}

Argumento de palabra clave

Descripción

bbox

Establezca esto a True si desea que la caja delimitadora esté incluida en el GeoJSON devuelto. Ignorado en Oracle.

crs

Establece esto a True si deseas que el sistema de referencia de coordenadas esté incluido en el GeoJSON devuelto. Se ignora en MySQL y Oracle.

precisión

Puede usarse para especificar el número de dígitos significativos para las coordenadas en la representación GeoJSON – el valor por defecto es 8. Se ignora en Oracle.

AsGML

class AsGML(expression, version=2, precision=8, **extra)[fuente]

Disponibilidad: Oracle, PostGIS, SpatiaLite

Acepta un campo geográfico o expresión única y devuelve una representación de la geometría en **`Geografic Markup Language (GML)`**__.

Ejemplo:

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

Argumento de palabra clave

Descripción

precisión

Especifica el número de dígitos significativos para las coordenadas en la representación GML – el valor por defecto es 8. Se ignora en Oracle.

version

Especifica la versión de GML a utilizar: 2 (por defecto) o 3.

AsKML

class AsKML(expression, precision=8, **extra)[fuente]

Disponibilidad*: PostGIS, SpatiaLite

Acepta un campo geográfico o expresión único y devuelve una representación de la geometría en formato `Lenguaje de Marcado de Clave (KML)`__.

Ejemplo:

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

Argumento de palabra clave

Descripción

precisión

Esta palabra clave se puede utilizar para especificar el número de dígitos significativos para las coordenadas en la representación KML – el valor por defecto es 8.

AsSVG

class AsSVG(expression, relative=False, precision=8, **extra)[fuente]

Disponibilidad: PostGIS, SpatiaLite

Acepta un campo geográfico o expresión único y devuelve una representación de la geometría en formato `Gráficos Vectoriales Escalables (SVG)`__.

Argumento de palabra clave

Descripción

relativo

Si se establece en True, los datos de la ruta se implementarán en términos de movimientos relativos. Por defecto, se utilizan movimientos absolutos en lugar de eso.

precisión

Esta palabra clave se puede utilizar para especificar el número de dígitos significativos para las coordenadas en la representación SVG – el valor por defecto es 8.

AsWKB

class AsWKB(expression, **extra)[fuente]

Dispongo a continuación las traducciones de los textos originales.

Acepta un campo o expresión geográfica único y devuelve una representación binaria conocida (WKB)_ de la geometría.

Ejemplo:

>>> 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@'

AsWKT

class AsWKT(expression, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, Oracle, PostGIS, SpatiaLite

Acepta un campo o expresión geográfica único y devuelve una representación de texto conocida (WKT)_ de la geometría.

Ejemplo:

>>> City.objects.annotate(wkt=AsWKT("point")).get(name="Chelyabinsk").wkt
'POINT (55.137555 61.451728)'

GeoHash

class GeoHash(expression, precision=None, **extra)[fuente]

Disponibilidad: MySQL, PostGIS, SpatiaLite (LWGEOM/RTTOPO)

Acepta un campo o expresión geográfica único y devuelve una representación de GeoHash__ de la geometría.

La palabra clave precision controla el número de caracteres en el resultado.

Misceláneas

IsEmpty

class IsEmpty(expr)[fuente]

Disponibilidad: PostGIS

Acepta un campo geográfico o expresión y prueba si el valor es una geometría vacía. Devuelve True si su valor está vacío y False en caso contrario.

IsValid

class IsValid(expr)[fuente]

Disponibilidad: MySQL, PostGIS, Oracle, SpatiaLite

Acepta un campo geográfico o expresión y prueba si el valor está bien formado. Devuelve True si su valor es una geometría válida y False en caso contrario.

MemSize

class MemSize(expression, **extra)[fuente]

Disponibilidad: PostGIS

Acepta un campo geográfico o expresión único y devuelve el tamaño de memoria (número de bytes) que el campo de geometría ocupa.

NumGeometries

class NumGeometries(expression, **extra)[fuente]

Dispongo a continuación las traducciones de los textos originales.

Acepta un campo geográfico o expresión único y devuelve el número de geometrías si el campo de geometría es una colección (por ejemplo, un GEOMETRYCOLLECTION o un campo MULTI*). Devuelve 1 para geometrías únicas.

En MySQL, devuelve None para geometrías únicas.

NumPoints

class NumPoints(expression, **extra)[fuente]

Disponibilidad: MariaDB, MySQL, PostGIS, Oracle, SpatiaLite

Acepta un campo geográfico o expresión único y devuelve el número de puntos en una geometría.

En MySQL, devuelve None para cualquier geometría que no sea LINESTRING.