Fondo

¿Qué es GEOS?

GEOS representa Motor de geometría – Código abierto, y es una biblioteca de C ++, portada desde el Conjunto de topología de Java. GEOS implementa OpenGIS Funciones simples para SQL funciones de predicado espacial y operadores espaciales. GEOS, ahora un proyecto OSGeo, fue inicialmente desarrollado y mantenido por Investigación de refracciones de Victoria, Canadá.

Características

GeoDjango implementa un contenedor de Python de alto nivel para la biblioteca GEOS, sus características incluyen:

  • Una interfaz con licencia BSD para las rutinas de geometría de GEOS, implementada puramente en Python usando ctypes.
  • Acoplado libremente a GeoDjango. Por ejemplo, GEOSGeometry los objetos se pueden usar fuera de un proyecto / aplicación de Django. En otras palabras, no es necesario tener DJANGO_SETTINGS_MODULE establecer o utilizar una base de datos, etc.
  • Mutabilidad: GEOSGeometry los objetos pueden modificarse.
  • Multiplataforma y probado; compatible con las plataformas Windows, Linux, Solaris y macOS.

Tutorial

Esta sección contiene una breve introducción y un tutorial para usar GEOSGeometry objetos.

Creando una geometría

GEOSGeometry los objetos se pueden crear de varias formas. La primera es simplemente instanciar el objeto en alguna entrada espacial; los siguientes son ejemplos de creación de la misma geometría a partir de WKT, HEX, WKB y GeoJSON:

>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry('POINT(5 23)') # WKT
>>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX
>>> pnt = GEOSGeometry(buffer('x01x01x00x00x00x00x00x00x00x00x00[email protected]x00x00x00x00x00[email protected]'))
>>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON

Otra opción es usar el constructor para el tipo de geometría específico que desea crear. Por ejemplo, un Point El objeto se puede crear pasando las coordenadas X e Y a su constructor:

>>> from django.contrib.gis.geos import Point
>>> pnt = Point(5, 23)

Todos estos constructores toman el argumento de palabra clave srid. Por ejemplo:

>>> from django.contrib.gis.geos import GEOSGeometry, LineString, Point
>>> print(GEOSGeometry('POINT (0 0)', srid=4326))
SRID=4326;POINT (0 0)
>>> print(LineString((0, 0), (1, 1), srid=4326))
SRID=4326;LINESTRING (0 0, 1 1)
>>> print(Point(0, 0, srid=32140))
SRID=32140;POINT (0 0)

Finalmente, está el fromfile() método de fábrica que devuelve un GEOSGeometry objeto de un archivo:

>>> from django.contrib.gis.geos import fromfile
>>> pnt = fromfile('/path/to/pnt.wkt')
>>> pnt = fromfile(open('/path/to/pnt.wkt'))

Mis registros están llenos de errores relacionados con GEOS

Encuentras muchos TypeError o AttributeError excepciones que llenan los archivos de registro de su servidor web. Esto generalmente significa que está creando objetos GEOS en el nivel superior de algunos de sus módulos de Python. Luego, debido a una condición de carrera en el recolector de basura, su módulo se recolecta antes que el objeto GEOS. Para evitar esto, cree GEOSGeometry objetos dentro del alcance local de sus funciones / métodos.

Las geometrías son pitónicas

GEOSGeometry los objetos son ‘Pythonic’, en otras palabras, se puede acceder a los componentes, modificarlos e iterarlos utilizando las convenciones estándar de Python. Por ejemplo, puede iterar sobre las coordenadas en un Point:

>>> pnt = Point(5, 23)
>>> [coord for coord in pnt]
[5.0, 23.0]

Con cualquier objeto de geometría, el GEOSGeometry.coords La propiedad se puede usar para obtener las coordenadas geométricas como una tupla de Python:

>>> pnt.coords
(5.0, 23.0)

Puede obtener / establecer componentes de geometría utilizando técnicas de indexación estándar de Python. Sin embargo, lo que se devuelve depende del tipo de geometría del objeto. Por ejemplo, indexar en un LineString devuelve una tupla de coordenadas:

>>> from django.contrib.gis.geos import LineString
>>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0))
>>> line[0]
(0.0, 0.0)
>>> line[-2]
(50.0, 0.0)

Mientras que la indexación en un Polygon devolverá el anillo (un LinearRing objeto) correspondiente al índice:

>>> from django.contrib.gis.geos import Polygon
>>> poly = Polygon( ((0.0, 0.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (0.0, 0.0)) )
>>> poly[0]
<LinearRing object at 0x1044395b0>
>>> poly[0][-2] # second-to-last coordinate of external ring
(50.0, 0.0)

Además, las coordenadas / componentes de la geometría se pueden agregar o modificar, al igual que una lista de Python:

>>> line[0] = (1.0, 1.0)
>>> line.pop()
(0.0, 0.0)
>>> line.append((1.0, 1.0))
>>> line.coords
((1.0, 1.0), (0.0, 50.0), (50.0, 50.0), (50.0, 0.0), (1.0, 1.0))

Las geometrías admiten operadores de tipo conjunto:

>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (2, 2))
>>> ls2 = LineString((1, 1), (3, 3))
>>> print(ls1 | ls2)  # equivalent to `ls1.union(ls2)`
MULTILINESTRING ((0 0, 1 1), (1 1, 2 2), (2 2, 3 3))
>>> print(ls1 & ls2)  # equivalent to `ls1.intersection(ls2)`
LINESTRING (1 1, 2 2)
>>> print(ls1 - ls2)  # equivalent to `ls1.difference(ls2)`
LINESTRING(0 0, 1 1)
>>> print(ls1 ^ ls2)  # equivalent to `ls1.sym_difference(ls2)`
MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))

El operador de igualdad no comprueba la igualdad espacial

los GEOSGeometry usos del operador de igualdad equals_exact(), no equals(), es decir, requiere que las geometrías comparadas tengan las mismas coordenadas en las mismas posiciones con los mismos SRID:

>>> from django.contrib.gis.geos import LineString
>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((1, 1), (0, 0))
>>> ls3 = LineString((1, 1), (0, 0), srid=4326)
>>> ls1.equals(ls2)
True
>>> ls1 == ls2
False
>>> ls3 == ls2  # different SRIDs
False

Objetos de geometría

GEOSGeometry

class GEOSGeometry(geo_input, srid=None)
Parámetros:
  • geo_input – Valor de entrada de geometría (cadena o búfer)
  • srid (En t) – identificador de referencia espacial

Esta es la clase base para todos los objetos geométricos GEOS. Se inicializa en el dado geo_input argumento, y luego asume la subclase de geometría adecuada (por ejemplo, GEOSGeometry('POINT(1 1)') creará un Point objeto).

los srid parámetro, si se proporciona, se establece como el SRID de la geometría creada si geo_input no tiene un SRID. Si se proporcionan diferentes SRID a través del geo_input y srid parámetros, ValueError es elevado:

>>> from django.contrib.gis.geos import GEOSGeometry
>>> GEOSGeometry('POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=4326;POINT EMPTY', srid=4326).ewkt
'SRID=4326;POINT EMPTY'
>>> GEOSGeometry('SRID=1;POINT EMPTY', srid=4326)
Traceback (most recent call last):
...
ValueError: Input geometry already has SRID: 1.

Se aceptan los siguientes formatos de entrada, junto con sus correspondientes tipos de Python:

Formato Tipo de entrada
WKT / EWKT str
HEX / HEXEWKB str
WKB / EWKB buffer
GeoJSON str

Para el formato GeoJSON, el SRID se establece según el crs miembro. Si crs no se proporciona, el SRID predeterminado es 4326.

classmethod GEOSGeometry.from_gml(gml_string)

Construye un GEOSGeometry de la cadena GML dada.

Propiedades

GEOSGeometry.coords

Devuelve las coordenadas de la geometría como una tupla.

GEOSGeometry.dims

Devuelve la dimensión de la geometría:

  • 0 por Pointarena MultiPoints
  • 1 por LineStringarena MultiLineStrings
  • 2 por Polygonarena MultiPolygons
  • -1 por vacio GeometryCollections
  • la dimensión máxima de sus elementos para no vacíos GeometryCollections
GEOSGeometry.empty

Devuelve si el conjunto de puntos de la geometría está vacío o no.

GEOSGeometry.geom_type

Devuelve una cadena correspondiente al tipo de geometría. Por ejemplo:

>>> pnt = GEOSGeometry('POINT(5 23)')
>>> pnt.geom_type
'Point'
GEOSGeometry.geom_typeid

Devuelve el número de identificación del tipo de geometría GEOS. La siguiente tabla muestra el valor para cada tipo de geometría:

Geometría IDENTIFICACIÓN
Point 0
LineString 1
LinearRing 2
Polygon 3
MultiPoint 4
MultiLineString 5
MultiPolygon 6
GeometryCollection 7
GEOSGeometry.num_coords

Devuelve el número de coordenadas de la geometría.

GEOSGeometry.num_geom

Devuelve el número de geometrías de esta geometría. En otras palabras, devolverá 1 en cualquier cosa que no sean colecciones de geometría.

GEOSGeometry.hasz

Devuelve un valor booleano que indica si la geometría es tridimensional.

GEOSGeometry.ring

Devuelve un booleano que indica si la geometría es una LinearRing.

GEOSGeometry.simple

Devuelve un valor booleano que indica si la geometría es ‘simple’. Una geometría es simple si y solo si no se interseca a sí misma (excepto en los puntos límite). Por ejemplo, un LineString El objeto no es simple si se cruza a sí mismo. Por lo tanto, LinearRing y Polygon los objetos son siempre simples porque no pueden cruzarse, por definición.

GEOSGeometry.valid

Devuelve un valor booleano que indica si la geometría es válida.

GEOSGeometry.valid_reason

Devuelve una cadena que describe la razón por la que una geometría no es válida.

GEOSGeometry.srid

Propiedad que puede usarse para recuperar o establecer el SRID asociado con la geometría. Por ejemplo:

>>> pnt = Point(5, 23)
>>> print(pnt.srid)
None
>>> pnt.srid = 4326
>>> pnt.srid
4326

Propiedades de salida

Las propiedades de esta sección exportan el GEOSGeometry objeto en un diferente. Esta salida puede tener la forma de una cadena, búfer o incluso otro objeto.

GEOSGeometry.ewkt

Devuelve el texto conocido “extendido” de la geometría. Esta representación es específica de PostGIS y es un superconjunto del estándar OGC WKT. [1] Esencialmente, el SRID se antepone a la representación WKT, por ejemplo SRID=4326;POINT(5 23).

Nota

La salida de esta propiedad no incluye la información 3dm, 3dz y 4d que admite PostGIS en sus representaciones EWKT.

GEOSGeometry.hex

Devuelve el WKB de esta geometría en forma hexadecimal. Tenga en cuenta que el valor SRID no se incluye en esta representación porque no forma parte de la especificación OGC (utilice el GEOSGeometry.hexewkb propiedad en su lugar).

GEOSGeometry.hexewkb

Devuelve el EWKB de esta geometría en forma hexadecimal. Ésta es una extensión de la especificación WKB que incluye el valor SRID que forma parte de esta geometría.

GEOSGeometry.json

Devuelve la representación GeoJSON de la geometría. Tenga en cuenta que el resultado no es una estructura GeoJSON completa, sino solo el geometry contenido clave de una estructura GeoJSON. Ver también Serializador GeoJSON.

GEOSGeometry.geojson

Alias ​​para GEOSGeometry.json.

GEOSGeometry.kml

Devuelve un KML (Keyhole Markup Language) representación de la geometría. Esto solo debe usarse para geometrías con un SRID de 4326 (WGS84), pero esta restricción no se aplica.

GEOSGeometry.ogr

Devuelve un OGRGeometry objeto correspondiente a la geometría GEOS.

GEOSGeometry.wkb

Devuelve la representación WKB (binario conocido) de esta geometría como un búfer de Python. El valor SRID no está incluido, use el GEOSGeometry.ewkb propiedad en su lugar.

GEOSGeometry.ewkb

Devuelve la representación EWKB de esta geometría como un búfer de Python. Ésta es una extensión de la especificación WKB que incluye cualquier valor SRID que sea parte de esta geometría.

GEOSGeometry.wkt

Devuelve el texto conocido de la geometría (un estándar OGC).

Métodos de predicados espaciales

Todos los siguientes métodos de predicado espacial toman otro GEOSGeometry instanciaother) como parámetro y devuelve un booleano.

GEOSGeometry.contains(other)

Devoluciones True si other.within(this) devoluciones True.

GEOSGeometry.covers(other)

Devoluciones True si esta geometría cubre la geometría especificada.

los covers predicado tiene las siguientes definiciones equivalentes:

  • Cada punto de la otra geometría es un punto de esta geometría.
  • La matriz de intersección DE-9IM para las dos geometrías es T*****FF*, *T****FF*, ***T**FF*, o ****T*FF*.

Si alguna geometría está vacía, devuelve False.

Este predicado es similar a GEOSGeometry.contains(), pero es más inclusivo (es decir, devuelve True para más casos). En particular, a diferencia de contains() no distingue entre puntos en el límite y en el interior de las geometrías. Para la mayoría de situaciones, covers() Debería preferirse a contains(). Como beneficio adicional, covers() es más susceptible a la optimización y, por lo tanto, debería superar contains().

GEOSGeometry.crosses(other)

Devoluciones True si la matriz de intersección DE-9IM para las dos geometrías es T*T****** (para un punto y una curva, un punto y un área o una línea y un área) 0******** (para dos curvas).

GEOSGeometry.disjoint(other)

Devoluciones True si la matriz de intersección DE-9IM para las dos geometrías es FF*FF****.

GEOSGeometry.equals(other)

Devoluciones True si la matriz de intersección DE-9IM para las dos geometrías es T*F**FFF*.

GEOSGeometry.equals_exact(other, tolerance=0)

Devuelve verdadero si las dos geometrías son exactamente iguales, hasta una tolerancia especificada. los tolerance El valor debe ser un número de punto flotante que represente la tolerancia al error en la comparación, por ejemplo, poly1.equals_exact(poly2, 0.001) comparará la igualdad con una milésima de unidad.

GEOSGeometry.intersects(other)

Devoluciones True si GEOSGeometry.disjoint() es False.

GEOSGeometry.overlaps(other)

Devuelve verdadero si la matriz de intersección DE-9IM para las dos geometrías es T*T***T** (para dos puntos o dos superficies) 1*T***T** (para dos curvas).

GEOSGeometry.relate_pattern(other, pattern)

Devoluciones True si los elementos en la matriz de intersección DE-9IM para esta geometría y la otra coinciden con el dado pattern – una cadena de nueve caracteres del alfabeto: {T, F, *, 0}.

GEOSGeometry.touches(other)

Devoluciones True si la matriz de intersección DE-9IM para las dos geometrías es FT*******, F**T***** o F***T****.

GEOSGeometry.within(other)

Devoluciones True si la matriz de intersección DE-9IM para las dos geometrías es T*F**F***.

Métodos topológicos

GEOSGeometry.buffer(width, quadsegs=8)

Devuelve un GEOSGeometry que representa todos los puntos cuya distancia de esta geometría es menor o igual a la dada width. El opcional quadsegs La palabra clave establece el número de segmentos utilizados para aproximar un cuarto de círculo (el valor predeterminado es 8).

GEOSGeometry.buffer_with_style(width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0)

Igual que buffer(), pero permite personalizar el estilo del búfer.

  • end_cap_style puede ser redondo1), plano (2), o cuadrado (3).
  • join_style puede ser redondo1), inglete (2), o bisel (3).
  • Inglete límite de relaciónmitre_limit) solo afecta al estilo de unión a inglete.
GEOSGeometry.difference(other)

Devuelve un GEOSGeometry representando los puntos que componen esta geometría que no forman otra.

GEOSGeometry.interpolate(distance)
GEOSGeometry.interpolate_normalized(distance)

Dada una distancia (flotante), devuelve el punto (o el punto más cercano) dentro de la geometría (LineString o MultiLineString) a esa distancia. La versión normalizada toma la distancia como flotante entre 0 (origen) y 1 (punto final).

Reverso de GEOSGeometry.project().

GEOSGeometry.intersection(other)

Devuelve un GEOSGeometry representando los puntos compartidos por esta geometría y otras.

GEOSGeometry.project(point)
GEOSGeometry.project_normalized(point)

Devuelve la distancia (flotante) desde el origen de la geometría (LineString o MultiLineString) al punto proyectado en la geometría (es decir, al punto de la línea más cercano al punto dado). La versión normalizada devuelve la distancia como flotante entre 0 (origen) y 1 (punto final).

Reverso de GEOSGeometry.interpolate().

GEOSGeometry.relate(other)

Devuelve la matriz de intersección DE-9IM (una cadena) que representa la relación topológica entre esta geometría y la otra.

GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)

Devuelve un nuevo GEOSGeometry, simplificado a la tolerancia especificada mediante el algoritmo de Douglas-Peucker. Un valor de tolerancia más alto implica menos puntos en la salida. Si no se proporciona tolerancia, el valor predeterminado es 0.

De forma predeterminada, esta función no conserva la topología. Por ejemplo, Polygon los objetos se pueden dividir, contraer en líneas o desaparecer. Polygon se pueden crear o desaparecer agujeros y las líneas se pueden cruzar. Especificando preserve_topology=True, el resultado tendrá la misma dimensión y número de componentes que la entrada; sin embargo, esto es significativamente más lento.

GEOSGeometry.sym_difference(other)

Devuelve un GEOSGeometry combinando los puntos en esta geometría no en otra, y los puntos en otra no en esta geometría.

GEOSGeometry.union(other)

Devuelve un GEOSGeometry representando todos los puntos en esta geometría y la otra.

Propiedades topológicas

GEOSGeometry.boundary

Devuelve el límite como un objeto Geometry recién asignado.

GEOSGeometry.centroid

Devuelve un Point objeto que representa el centro geométrico de la geometría. No se garantiza que el punto esté en el interior de la geometría.

GEOSGeometry.convex_hull

Devuelve el más pequeño Polygon que contiene todos los puntos de la geometría.

GEOSGeometry.envelope

Devuelve un Polygon que representa la envolvente delimitadora de esta geometría. Tenga en cuenta que también puede devolver un Point si la geometría de entrada es un punto.

GEOSGeometry.point_on_surface

Calcula y devuelve un Point garantizado para estar en el interior de esta geometría.

GEOSGeometry.unary_union

Calcula la unión de todos los elementos de esta geometría.

El resultado obedece al siguiente contrato:

  • Unión de un conjunto de LineStrings tiene el efecto de anular y disolver completamente la línea.
  • Unión de un conjunto de Polygons siempre devolverá un Polygon o MultiPolygon geometría (a diferencia de GEOSGeometry.union(), que puede devolver geometrías de menor dimensión si se produce un colapso de topología).

Otras propiedades y métodos

GEOSGeometry.area

Esta propiedad devuelve el área de la geometría.

GEOSGeometry.extent

Esta propiedad devuelve la extensión de esta geometría como una tupla de 4, que consta de (xmin, ymin, xmax, ymax).

GEOSGeometry.clone()

Este método devuelve un GEOSGeometry que es un clon del original.

GEOSGeometry.distance(geom)

Devuelve la distancia entre los puntos más cercanos en esta geometría y el dado geom (otro GEOSGeometry objeto).

Nota

Los cálculos de distancia de GEOS son lineales; en otras palabras, GEOS no realiza un cálculo esférico incluso si el SRID especifica un sistema de coordenadas geográficas.

GEOSGeometry.length

Devuelve la longitud de esta geometría (p. Ej., 0 para una Point, la longitud de un LineString, o la circunferencia de un Polygon).

GEOSGeometry.prepared

Devuelve un GEOS PreparedGeometry para el contenido de esta geometría. PreparedGeometry los objetos están optimizados para las operaciones contiene, interseca, cubre, cruza, disjunta, superpone, toca y dentro. Referirse a Geometrías preparadas documentación para obtener más información.

GEOSGeometry.srs

Devuelve un SpatialReference objeto correspondiente al SRID de la geometría o None.

GEOSGeometry.transform(ct, clone=False)

Transforma la geometría de acuerdo con el parámetro de transformación de coordenadas dado (ct), que puede ser un SRID entero, una cadena WKT de referencia espacial, una cadena PROJ, una SpatialReference objeto, o un CoordTransform objeto. De forma predeterminada, la geometría se transforma in situ y no se devuelve nada. Sin embargo, si el clone se establece la palabra clave, la geometría no se modifica y en su lugar se devuelve un clon transformado de la geometría.

Nota

Eleva GEOSException si GDAL no está disponible o si el SRID de la geometría es None o menor que 0. No impone ninguna restricción en el SRID de la geometría si se llama con un CoordTransform objeto.

GEOSGeometry.normalize()

Convierte esta geometría en forma canónica:

>>> g = MultiPoint(Point(0, 0), Point(2, 2), Point(1, 1))
>>> print(g)
MULTIPOINT (0 0, 2 2, 1 1)
>>> g.normalize()
>>> print(g)
MULTIPOINT (2 2, 1 1, 0 0)

Point

class Point(x=None, y=None, z=None, srid=None)

Point los objetos se instancian usando argumentos que representan las coordenadas del componente del punto o con coordenadas de una sola secuencia. Por ejemplo, los siguientes son equivalentes:

>>> pnt = Point(5, 23)
>>> pnt = Point([5, 23])

Vacío Point los objetos se pueden instanciar sin pasar argumentos o una secuencia vacía. Los siguientes son equivalentes:

>>> pnt = Point()
>>> pnt = Point([])

LineString

class LineString(*args, **kwargs)

LineString los objetos se instancian utilizando argumentos que son una secuencia de coordenadas o Point objetos. Por ejemplo, los siguientes son equivalentes:

>>> ls = LineString((0, 0), (1, 1))
>>> ls = LineString(Point(0, 0), Point(1, 1))

Además, LineString Los objetos también se pueden crear pasando una sola secuencia de coordenadas o Point objetos:

>>> ls = LineString( ((0, 0), (1, 1)) )
>>> ls = LineString( [Point(0, 0), Point(1, 1)] )

Vacío LineString los objetos se pueden instanciar sin pasar argumentos o una secuencia vacía. Los siguientes son equivalentes:

>>> ls = LineString()
>>> ls = LineString([])
closed

Devuelve si esto LineString está cerrado.

LinearRing

class LinearRing(*args, **kwargs)

LinearRing Los objetos se construyen exactamente de la misma manera que LineString objetos, sin embargo las coordenadas deben ser cerradoes decir, las primeras coordenadas deben coincidir con las últimas. Por ejemplo:

>>> ls = LinearRing((0, 0), (0, 1), (1, 1), (0, 0))

Darse cuenta de (0, 0) es la primera y la última coordenada; si no fueran iguales, se generaría un error.

is_counterclockwise
Nuevo en Django 3.1.

Devuelve si esto LinearRing es en sentido antihorario.

Polygon

class Polygon(*args, **kwargs)

Polygon los objetos se pueden instanciar pasando parámetros que representan los anillos del polígono. Los parámetros deben ser LinearRing instancias, o una secuencia que se puede utilizar para construir una LinearRing:

>>> ext_coords = ((0, 0), (0, 1), (1, 1), (1, 0), (0, 0))
>>> int_coords = ((0.4, 0.4), (0.4, 0.6), (0.6, 0.6), (0.6, 0.4), (0.4, 0.4))
>>> poly = Polygon(ext_coords, int_coords)
>>> poly = Polygon(LinearRing(ext_coords), LinearRing(int_coords))
classmethod from_bbox(bbox)

Devuelve un objeto poligonal del cuadro delimitador dado, una tupla de 4 que comprende (xmin, ymin, xmax, ymax).

num_interior_rings

Devuelve el número de anillos interiores en esta geometría.

Comparación de polígonos

Tenga en cuenta que es posible comparar Polygon objetos directamente con < o >, pero como la comparación se realiza a través de Polygon LineString, no significa mucho (pero es consistente y rápido). Siempre puede forzar la comparación con el area propiedad:

>>> if poly_1.area > poly_2.area:
>>>     pass

Colecciones de geometría

MultiPoint

class MultiPoint(*args, **kwargs)

MultiPoint los objetos pueden ser instanciados pasando Point objetos como argumentos, o una sola secuencia de Point objetos:

>>> mp = MultiPoint(Point(0, 0), Point(1, 1))
>>> mp = MultiPoint( (Point(0, 0), Point(1, 1)) )

MultiLineString

class MultiLineString(*args, **kwargs)

MultiLineString los objetos pueden ser instanciados pasando LineString objetos como argumentos, o una sola secuencia de LineString objetos:

>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((2, 2), (3, 3))
>>> mls = MultiLineString(ls1, ls2)
>>> mls = MultiLineString([ls1, ls2])
merged

Devuelve un LineString que representa la combinación de líneas de todos los componentes en este MultiLineString.

closed

Devoluciones True si y solo si todos los elementos están cerrados. Requiere GEOS 3.5.

MultiPolygon

class MultiPolygon(*args, **kwargs)

MultiPolygon los objetos pueden ser instanciados pasando Polygon objetos como argumentos, o una sola secuencia de Polygon objetos:

>>> p1 = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
>>> p2 = Polygon( ((1, 1), (1, 2), (2, 2), (1, 1)) )
>>> mp = MultiPolygon(p1, p2)
>>> mp = MultiPolygon([p1, p2])

GeometryCollection

class GeometryCollection(*args, **kwargs)

GeometryCollection los objetos pueden ser instanciados pasando en otros GEOSGeometry como argumentos, o una sola secuencia de GEOSGeometry objetos:

>>> poly = Polygon( ((0, 0), (0, 1), (1, 1), (0, 0)) )
>>> gc = GeometryCollection(Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly)
>>> gc = GeometryCollection((Point(0, 0), MultiPoint(Point(0, 0), Point(1, 1)), poly))

Geometrías preparadas

Para obtener una geometría preparada, acceda al GEOSGeometry.prepared propiedad. Una vez que tienes un PreparedGeometry Por ejemplo, sus métodos de predicado espacial, que se enumeran a continuación, se pueden utilizar con otros GEOSGeometry objetos. Una operación con una geometría preparada puede ser órdenes de magnitud más rápida: cuanto más compleja sea la geometría preparada, mayor será la aceleración de la operación. Para obtener más información, consulte el Página wiki de GEOS sobre geometrías preparadas.

Por ejemplo:

>>> from django.contrib.gis.geos import Point, Polygon
>>> poly = Polygon.from_bbox((0, 0, 5, 5))
>>> prep_poly = poly.prepared
>>> prep_poly.contains(Point(2.5, 2.5))
True

PreparedGeometry

class PreparedGeometry

Todos los métodos en PreparedGeometry toma un other argumento, que debe ser un GEOSGeometry ejemplo.

contains(other)
contains_properly(other)
covers(other)
crosses(other)
disjoint(other)
intersects(other)
overlaps(other)
touches(other)
within(other)

Geometría Factories

fromfile(file_h)
Parámetros: file_h (una pitón file objeto o una ruta de cadena al archivo) – archivo de entrada que contiene datos espaciales
Tipo de retorno: a GEOSGeometry correspondiente a los datos espaciales en el archivo

Ejemplo:

>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile('/home/bob/geom.wkt')
fromstr(string, srid=None)
Parámetros:
  • cuerda (str): Cadena que contiene datos espaciales
  • srid (En t) – identificador de referencia espacial
Tipo de retorno:

a GEOSGeometry correspondiente a los datos espaciales en la cadena

fromstr(string, srid) es equivalente a GEOSGeometry(string, srid).

Ejemplo:

>>> from django.contrib.gis.geos import fromstr
>>> pnt = fromstr('POINT(-90.5 29.5)', srid=4326)

Objetos de E / S

Objetos del lector

Las clases de E / S del lector devuelven un GEOSGeometry instancia de la entrada WKB y / o WKT dada a su read(geom) método.

class WKBReader

Ejemplo:

>>> from django.contrib.gis.geos import WKBReader
>>> wkb_r = WKBReader()
>>> wkb_r.read('0101000000000000000000F03F000000000000F03F')
<Point object at 0x103a88910>
class WKTReader

Ejemplo:

>>> from django.contrib.gis.geos import WKTReader
>>> wkt_r = WKTReader()
>>> wkt_r.read('POINT(1 1)')
<Point object at 0x103a88b50>

Objetos del escritor

Todos los objetos de escritor tienen un write(geom) método que devuelve el WKB o WKT de la geometría dada. Además, WKBWriter los objetos también tienen propiedades que pueden usarse para cambiar el orden de los bytes o incluir el valor SRID (en otras palabras, EWKB).

class WKBWriter(dim=2)

WKBWriter proporciona el mayor control sobre su salida. De forma predeterminada, devuelve WKB compatible con OGC cuando write se llama al método. Sin embargo, tiene propiedades que permiten la creación de EWKB, un superconjunto del estándar WKB que incluye información adicional. Ver el WKBWriter.outdim documentación para obtener más detalles sobre el dim argumento.

write(geom)

Devuelve el WKB de la geometría dada como Python buffer objeto. Ejemplo:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> pnt = Point(1, 1)
>>> wkb_w = WKBWriter()
>>> wkb_w.write(pnt)
<read-only buffer for 0x103a898f0, size -1, offset 0 at 0x103a89930>
write_hex(geom)

Devuelve WKB de la geometría en hexadecimal. Ejemplo:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> pnt = Point(1, 1)
>>> wkb_w = WKBWriter()
>>> wkb_w.write_hex(pnt)
'0101000000000000000000F03F000000000000F03F'
byteorder

Esta propiedad se puede configurar para cambiar el orden de bytes de la representación geométrica.

Valor de orden de bytes Descripción
0 Big Endian (p. Ej., Compatible con sistemas RISC)
1 Little Endian (p. Ej., Compatible con sistemas x86)

Ejemplo:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> wkb_w = WKBWriter()
>>> pnt = Point(1, 1)
>>> wkb_w.write_hex(pnt)
'0101000000000000000000F03F000000000000F03F'
>>> wkb_w.byteorder = 0
'00000000013FF00000000000003FF0000000000000'
outdim

Esta propiedad se puede configurar para cambiar la dimensión de salida de la representación geométrica. En otras palabras, si tiene una geometría 3D, establezca en 3 para que el valor Z se incluya en el WKB.

Valor Outdim Descripción
2 El WKB 2D de salida predeterminado.
3 Salida 3D WKB.

Ejemplo:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> wkb_w = WKBWriter()
>>> wkb_w.outdim
2
>>> pnt = Point(1, 1, 1)
>>> wkb_w.write_hex(pnt) # By default, no Z value included:
'0101000000000000000000F03F000000000000F03F'
>>> wkb_w.outdim = 3 # Tell writer to include Z values
>>> wkb_w.write_hex(pnt)
'0101000080000000000000F03F000000000000F03F000000000000F03F'
srid

Establezca esta propiedad con un valor booleano para indicar si el SRID de la geometría debe incluirse con la representación WKB. Ejemplo:

>>> from django.contrib.gis.geos import Point, WKBWriter
>>> wkb_w = WKBWriter()
>>> pnt = Point(1, 1, srid=4326)
>>> wkb_w.write_hex(pnt) # By default, no SRID included:
'0101000000000000000000F03F000000000000F03F'
>>> wkb_w.srid = True # Tell writer to include SRID
>>> wkb_w.write_hex(pnt)
'0101000020E6100000000000000000F03F000000000000F03F'
class WKTWriter(dim=2, trim=False, precision=None)

Esta clase permite generar la representación WKT de una geometría. Ver el WKBWriter.outdim, trim, y precision atributos para obtener detalles sobre los argumentos del constructor.

write(geom)

Devuelve el WKT de la geometría dada. Ejemplo:

>>> from django.contrib.gis.geos import Point, WKTWriter
>>> pnt = Point(1, 1)
>>> wkt_w = WKTWriter()
>>> wkt_w.write(pnt)
'POINT (1.0000000000000000 1.0000000000000000)'
outdim

Ver WKBWriter.outdim.

trim

Esta propiedad se utiliza para habilitar o deshabilitar el recorte de decimales innecesarios.

>>> from django.contrib.gis.geos import Point, WKTWriter
>>> pnt = Point(1, 1)
>>> wkt_w = WKTWriter()
>>> wkt_w.trim
False
>>> wkt_w.write(pnt)
'POINT (1.0000000000000000 1.0000000000000000)'
>>> wkt_w.trim = True
>>> wkt_w.write(pnt)
'POINT (1 1)'
precision

Esta propiedad controla la precisión de redondeo de coordenadas; si se establece en None el redondeo está desactivado.

>>> from django.contrib.gis.geos import Point, WKTWriter
>>> pnt = Point(1.44, 1.66)
>>> wkt_w = WKTWriter()
>>> print(wkt_w.precision)
None
>>> wkt_w.write(pnt)
'POINT (1.4399999999999999 1.6599999999999999)'
>>> wkt_w.precision = 0
>>> wkt_w.write(pnt)
'POINT (1 2)'
>>> wkt_w.precision = 1
>>> wkt_w.write(pnt)
'POINT (1.4 1.7)'

Notas al pie

[1] Ver PostGIS EWKB, EWKT y formularios canónicos, Documentación de PostGIS en el Cap. 4.1.2.

Ajustes

GEOS_LIBRARY_PATH

Una cadena que especifica la ubicación de la biblioteca de GEOS C. Por lo general, esta configuración solo se usa si la biblioteca GEOS C está en una ubicación no estándar (por ejemplo, /home/bob/lib/libgeos_c.so).

Nota

El escenario debe ser el lleno camino a la C biblioteca compartida; en otras palabras, quieres usar libgeos_c.so, no libgeos.so.

Excepciones

exception GEOSException

La excepción básica de GEOS indica un error relacionado con GEOS.