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 tenerDJANGO_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
porPoint
arenaMultiPoint
s -
1
porLineString
arenaMultiLineString
s -
2
porPolygon
arenaMultiPolygon
s -
-1
por vacioGeometryCollection
s - la dimensión máxima de sus elementos para no vacíos
GeometryCollection
s
-
-
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
yPolygon
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
siother.within(this)
devolucionesTrue
.
-
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, devuelveTrue
para más casos). En particular, a diferencia decontains()
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 acontains()
. Como beneficio adicional,covers()
es más susceptible a la optimización y, por lo tanto, debería superarcontains()
.
-
GEOSGeometry.crosses(other)
-
Devoluciones
True
si la matriz de intersección DE-9IM para las dos geometrías esT*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 esFF*FF****
.
-
GEOSGeometry.equals(other)
-
Devoluciones
True
si la matriz de intersección DE-9IM para las dos geometrías esT*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
siGEOSGeometry.disjoint()
esFalse
.
-
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 dadopattern
– 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 esFT*******
,F**T*****
oF***T****
.
-
GEOSGeometry.within(other)
-
Devoluciones
True
si la matriz de intersección DE-9IM para las dos geometrías esT*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 dadawidth
. El opcionalquadsegs
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ón
mitre_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
oMultiLineString
) 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
oMultiLineString
) 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. Especificandopreserve_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 unPoint
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
LineString
s tiene el efecto de anular y disolver completamente la línea. - Unión de un conjunto de
Polygon
s siempre devolverá unPolygon
oMultiPolygon
geometría (a diferencia deGEOSGeometry.union()
, que puede devolver geometrías de menor dimensión si se produce un colapso de topología).
- Unión de un conjunto de
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
(otroGEOSGeometry
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 unLineString
, o la circunferencia de unPolygon
).
-
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 oNone
.
-
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, unaSpatialReference
objeto, o unCoordTransform
objeto. De forma predeterminada, la geometría se transforma in situ y no se devuelve nada. Sin embargo, si elclone
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 esNone
o menor que 0. No impone ninguna restricción en el SRID de la geometría si se llama con unCoordTransform
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 oPoint
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 oPoint
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 queLineString
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 serLinearRing
instancias, o una secuencia que se puede utilizar para construir unaLinearRing
:>>> 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 pasandoPoint
objetos como argumentos, o una sola secuencia dePoint
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 pasandoLineString
objetos como argumentos, o una sola secuencia deLineString
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 esteMultiLineString
.
-
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 pasandoPolygon
objetos como argumentos, o una sola secuencia dePolygon
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 otrosGEOSGeometry
como argumentos, o una sola secuencia deGEOSGeometry
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 unother
argumento, que debe ser unGEOSGeometry
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 espacialesTipo de retorno: a GEOSGeometry
correspondiente a los datos espaciales en el archivoEjemplo:
>>> from django.contrib.gis.geos import fromfile >>> g = fromfile('/home/bob/geom.wkt')
-
fromstr(string, srid=None)
-
Parámetros: Tipo de retorno: a
GEOSGeometry
correspondiente a los datos espaciales en la cadenafromstr(string, srid)
es equivalente aGEOSGeometry(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 cuandowrite
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 elWKBWriter.outdim
documentación para obtener más detalles sobre eldim
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
, yprecision
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.