API GEOSLien vers cette rubrique

ContexteLien vers cette rubrique

Qu’est-ce que GEOS ?Lien vers cette rubrique

GEOS signifie Geometry Engine - Open Source. C’est une bibliothèque C++ dérivée de Java Topology Suite. GEOS implémente les prédicats et les opérateurs spatiaux de la spécification OpenGIS Simple Features for SQL. GEOS, dorénavant un projet OSGeo, a été initialement développée et maintenue par Refractions Research (Victoria, Canada).

FonctionnalitésLien vers cette rubrique

GeoDjango implémente une adaptation Python de haut niveau de la bibliothèque GEOS. Ses fonctionnalités comprennent notamment :

  • Une interface sous licence BSD des routines géométriques GEOS, implémentées purement en Python à l’aide de ctypes.

  • Faiblement couplé à GeoDjango. Par exemple, les objets GEOSGeometry peuvent être utilisés en dehors d’un projet Django. En d’autres termes, il n’est pas nécessaire que DJANGO_SETTINGS_MODULE ou une base de données soient définis.

  • Mutabilité : les objets GEOSGeometry peuvent être modifiés.

  • Testé sur toutes les plates-formes.

TutorielLien vers cette rubrique

Cette section contient une brève introduction à l’utilisation des objets GEOSGeometry.

Création d’un objet géométriqueLien vers cette rubrique

Les objets GEOSGeometry peuvent être créés de plusieurs façons. La première est de simplement créer une instance avec du contenu spatial. Les exemples suivants montrent comment créer le même objet géométrique avec du contenu WKT, HEX, WKB et GeoJSON :

Python console
>>> from django.contrib.gis.geos import GEOSGeometry
>>> pnt = GEOSGeometry("POINT(5 23)")  # WKT
>>> pnt = GEOSGeometry("010100000000000000000014400000000000003740")  # HEX
>>> pnt = GEOSGeometry(
...     memoryview(
...         b"\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14@\x00\x00\x00\x00\x00\x007@"
...     )
... )  # WKB
>>> pnt = GEOSGeometry(
...     '{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }'
... )  # GeoJSON

Un autre option est d’utiliser le constructeur correspondant au type d’objet géométrique que vous souhaitez créer. Par exemple un objet Point peut être créé en passant des coordonnées X et Y à son constructeur :

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

Tous ces constructeurs acceptent le paramètre nommé srid. Par exemple :

Python console
>>> 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)

Pour terminer, il existe la méthode de fabrication fromfile() qui renvoie un objet GEOSGeometry à partir d’un fichier :

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

Les objets géométriques sont « pythonesques »Lien vers cette rubrique

Les objets GEOSGeometry sont « pythonesques », ce qui signifie qu’il est possible d’accéder, de modifier ou de passer en boucle leurs composants à l’aide des conventions Python standards. Par exemple, voici comment parcourir les coordonnées d’un Point en boucle :

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

Avec n’importe quel objet géométrique, la propriété GEOSGeometry.coords peut être utilisée pour obtenir les coordonnées géométriques sous forme de tuple Python :

Python console
>>> pnt.coords
(5.0, 23.0)

Il est possible d’obtenir et de définir les éléments des objets géométriques par des techniques d’indices Python standard. Cependant, les valeurs renvoyées dépendent du type d’objet géométrique. Par exemple, l’application d’un indice sur une ligne LineString renvoie un tuple de coordonnées :

Python console
>>> 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)

Alors que l’application d’un indice sur un Polygon renvoie un anneau (un objet LinearRing) correspondant à l’indice :

Python console
>>> 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)

De plus, les coordonnées et les composants d’un objet géométrique peuvent être complétés ou modifiés de manière similaire à une liste Python :

Python console
>>> 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))

Les objets géométriques prennent en charge les opérateurs d’ensembles (set) :

Python console
>>> 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))

Objets géométriquesLien vers cette rubrique

GEOSGeometryLien vers cette rubrique

class GEOSGeometry(geo_input, srid=None, *, max_geom_collections=198)Lien vers cette définition
Paramètres:
  • geo_input – Valeur d’entrée géométrique (chaîne ou memoryview)

  • srid (int) – identifiant de référence spatiale

  • max_geom_collections – maximum number of nested (WKT) or total (WKB) geometry collections accepted before parsing is refused

Il s’agit de la classe de base de tous les objets géométriques GEOS. Elle s’initialise en fonction du paramètre geo_input donné, puis en déduit la sous-classe géométrique appropriée (par ex. GEOSGeometry('POINT(1 1)') crée un objet Point).

Le paramètre srid, s’il est présent, est défini comme le SRID de l’objet géométrique créé si geo_input ne possède pas de SRID. Si les valeurs de SRID entre les paramètres geo_input et srid diffèrent, une erreur ValueError est produite :

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

Les formats de valeurs d’entrée suivants, ainsi que leur type Python correspondant, sont acceptés :

Format

Type en entrée

WKT / EWKT

str

HEX / HEXEWKB

str

WKB / EWKB

memoryview

GeoJSON

str

Pour le format GeoJSON, le SRID est défini sur la base du membre crs. SI crs n’est pas fourni, le SRID par défaut est 4326.

classmethod GEOSGeometry.from_gml(gml_string)Lien vers cette définition

Construit un objet GEOSGeometry à partir de la chaîne GML donnée.

PropriétésLien vers cette rubrique

GEOSGeometry.coordsLien vers cette définition

Renvoie les coordonnées de l’objet géométrique sous forme de tuple.

GEOSGeometry.dimsLien vers cette définition

Renvoie la dimension de l’objet géométrique :

GEOSGeometry.emptyLien vers cette définition

Renvoie une valeur booléenne indiquant si l’ensemble des points de l’objet géométrique est vide.

GEOSGeometry.geom_typeLien vers cette définition

Renvoie une chaîne correspondant au type de l’objet géométrique. Par exemple :

Python console
>>> pnt = GEOSGeometry("POINT(5 23)")
>>> pnt.geom_type
'Point'
GEOSGeometry.geom_typeidLien vers cette définition

Renvoie le numéro d’identification du type géométrique GEOS. Le tableau suivant expose la valeur correspondant à chaque type géométrique :

GEOSGeometry.num_coordsLien vers cette définition

Renvoie le nombre de coordonnées de l’objet géométrique.

GEOSGeometry.num_geomLien vers cette définition

Renvoie le nombre d’objets géométriques dans cet objet. En d’autres termes, le résultat sera 1 pour toute autre chose que les collections d’objets géométriques.

GEOSGeometry.haszLien vers cette définition

Renvoie une valeur booléenne indiquant si l’objet géométrique possède une dimension Z.

GEOSGeometry.hasmLien vers cette définition

Renvoie une valeur booléenne indiquant si l’objet géométrique possède une dimension M. Nécessite GEOS 3.12.

GEOSGeometry.ringLien vers cette définition

Renvoie une valeur booléenne indiquant si l’objet géométrique est un LinearRing.

GEOSGeometry.simpleLien vers cette définition

Renvoie une valeur booléenne indiquant si l’objet géométrique est « simple ». Un objet géométrique est simple si et seulement s’il n’a pas d’intersection avec lui-même (excepté aux points limites). Par exemple, un objet LineString n’est pas simple si sa ligne se croise elle-même. Par définition les objets LinearRing et Polygon sont toujours simples car ils ne peuvent pas avoir d’intersections avec eux-mêmes.

GEOSGeometry.validLien vers cette définition

Renvoie une valeur booléenne indiquant si l’objet géométrique est valide.

GEOSGeometry.valid_reasonLien vers cette définition

Renvoie une chaîne décrivant la raison pour laquelle un objet géométrique n’est pas valable.

GEOSGeometry.sridLien vers cette définition

Propriété pouvant être utilisée pour récupérer ou définir le SRID associé à l’objet. Par exemple :

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

Propriétés en sortieLien vers cette rubrique

Les propriétés de cette section exportent l’objet GEOSGeometry sous une forme différente. Cette forme peut être une chaîne, un tampon mémoire ou même un autre objet.

GEOSGeometry.ewktLien vers cette définition

Renvoie le format WKT (Well-Known Text) étendu de l’objet géométrique. Cette représentation est spécifique à PostGIS et constitue un sur-ensemble du standard WKT OGC [1]. En bref, la représentation WKT est préfixée par le code SRID, par exemple SRID=4326;POINT(5 23).

GEOSGeometry.hexLien vers cette définition

Renvoie la représentation WKB de cet objet géométrique sous forme hexadécimale. Notez que la valeur SRID n’est pas incluse dans cette représentation car elle ne fait pas partie de la spécification OGC (utilisez plutôt la propriété GEOSGeometry.hexewkb).

GEOSGeometry.hexewkbLien vers cette définition

Renvoie la représentation EWKB de cet objet géométrique sous forme hexadécimale. Il s’agit d’une extension de la spécification WKB incluant la valeur SRID correspondant à l’objet géométrique.

GEOSGeometry.jsonLien vers cette définition

Renvoie la représentation GeoJSON de l’objet géométrique. Notez que le résultat ne constitue pas une structure GeoJSON complète, mais seulement le contenu de la clé geometry d’une structure GeoJSON. Voir aussi Sérialisation GeoJSON.

GEOSGeometry.geojsonLien vers cette définition

Alias de GEOSGeometry.json.

GEOSGeometry.kmlLien vers cette définition

Renvoie une représentation KML (Keyhole Markup Language) de cet objet géométrique. Ceci ne devrait être utilisé que pour des objets géométriques ayant le SRID 4326 (WGS84), mais cette restriction n’est pas forcée.

GEOSGeometry.ogrLien vers cette définition

Renvoie un objet OGRGeometry équivalent à l’objet géométrique GEOS.

GEOSGeometry.wkbLien vers cette définition

Renvoie la représentation WKB (Well-Known Binary) de cet objet géométrique sous forme de tampon Python (buffer). La valeur SRID n’est pas incluse. Si vous le souhaitez, utilisez plutôt la propriété GEOSGeometry.ewkb.

GEOSGeometry.ewkbLien vers cette définition

Renvoie la représentation EWKB de cet objet géométrique sous forme de tampon Python (buffer). Il s’agit d’une extension de la spécification WKB qui inclut toute valeur SRID faisant partie de cet objet.

GEOSGeometry.wktLien vers cette définition

Renvoie la représentation WKT (Well-Known Text) de cet objet géométrique (un standard OGC).

Méthodes de prédicats spatiauxLien vers cette rubrique

Toutes les méthodes de prédicats spatiaux ci-après acceptent en paramètre une autre instance GEOSGeometry (other) et renvoient une valeur booléenne.

GEOSGeometry.contains(other)Lien vers cette définition

Renvoie True si other.within(this) renvoie True.

GEOSGeometry.covers(other)Lien vers cette définition

Renvoie True si cet objet géométrique recouvre l’objet géométrique donné.

Le prédicat covers possède les définitions équivalentes suivantes :

  • Chaque point de l’autre objet géométrique est un point de cet objet géométrique.

  • La matrice d’intersection DE-9IM des deux objets géométriques est T*****FF*, *T****FF*, ***T**FF* ou ****T*FF*.

Si l’un des objets géométriques est vide, renvoie False.

Ce prédicat est semblable à GEOSGeometry.contains(), mais est plus inclusif (c’est-à-dire qu’il renvoie True dans plus de cas). En particulier, au contraire de contains(), il ne distingue pas entre les points à la limite et ceux à l’intérieur de l’objet géométrique. Dans la plupart des situations, covers() devrait être préféré à contains(). Comme bénéfice supplémentaire, covers() est plus sujet à l’optimisation et devrait donc être bien plus performant que contains().

GEOSGeometry.crosses(other)Lien vers cette définition

Renvoie True si la matrice d’intersection DE-9IM des deux objets géométriques est T*T****** (pour un point et une courbe, un point et une aire ou une ligne et une aire), ou 0******** (pour deux courbes).

GEOSGeometry.disjoint(other)Lien vers cette définition

Renvoie True si la matrice d’intersection DE-9IM des deux objets géométriques est FF*FF****.

GEOSGeometry.equals(other)Lien vers cette définition

Renvoie True si la matrice d’intersection DE-9IM des deux objets géométriques est T*F**FFF*.

GEOSGeometry.equals_exact(other, tolerance=0)Lien vers cette définition

Renvoie True si les deux objets géométriques sont exactement égaux, jusqu’à une certaine tolérance. La valeur de tolerance doit être un nombre à virgule représentant la tolérance d’erreur dans la comparaison. Par exemple, poly1.equals_exact(poly2, 0.001) compare l’égalité jusqu’à un millième d’unité.

GEOSGeometry.equals_identical(other)Lien vers cette définition

Renvoie True si les deux objets géométriques sont équivalents point par point en vérifiant que leur structure, leur ordre de tri et les valeurs de toutes les arêtes sont identiques dans toutes les dimensions. Les valeurs NaN sont considérées comme égales à d’autres valeurs NaN. Exige GEOS 3.12.

GEOSGeometry.intersects(other)Lien vers cette définition

Renvoie True si GEOSGeometry.disjoint() vaut False.

GEOSGeometry.overlaps(other)Lien vers cette définition

Renvoie True si la matrice d’intersection DE-9IM des deux objets géométriques est T*T***T** (pour deux points ou deux surfaces), ou 1*T***T** (pour deux courbes).

GEOSGeometry.relate_pattern(other, pattern)Lien vers cette définition

Renvoie True si la matrice d’intersection DE-9IM des deux objets géométriques correspond au motif pattern donné, une chaîne de neuf caractères dans l’alphabet {T, F, *, 0}.

GEOSGeometry.touches(other)Lien vers cette définition

Renvoie True si la matrice d’intersection DE-9IM des deux objets géométriques est FT*******, F**T***** ou F***T****.

GEOSGeometry.within(other)Lien vers cette définition

Renvoie True si la matrice d’intersection DE-9IM des deux objets géométriques est T*F**F***.

Méthodes topologiquesLien vers cette rubrique

GEOSGeometry.buffer(width, quadsegs=8)Lien vers cette définition

Renvoie un objet GEOSGeometry représentant tous les points dont la distance à cet objet géométrique est plus petit ou égal à la longueur width donnée. Le paramètre facultatif quadsegs définit le nombre de segments utilisés pour faire l’approximation d’un quart de cercle (8 par défaut).

GEOSGeometry.buffer_with_style(width, quadsegs=8, end_cap_style=1, join_style=1, mitre_limit=5.0)Lien vers cette définition

Identique à buffer(), mais permet de personnaliser le style du tampon.

  • end_cap_style peut être rond (1), plat (2) ou carré (3).

  • join_style peut être rond (1), onglet (2) ou biseau (3).

  • La limite de taux d’onglet (mitre_limit) n’affecte que le style de jointure par onglet.

GEOSGeometry.difference(other)Lien vers cette définition

Renvoie un objet GEOSGeometry représentant les points composants cet objet géométrique qui ne composent pas l’autre objet.

GEOSGeometry.interpolate(distance)Lien vers cette définition
GEOSGeometry.interpolate_normalized(distance)Lien vers cette définition

Étant donné une distance (nombre à virgule), renvoie le point (ou le point le plus proche) de l’objet géométrique (LineString ou MultiLineString) à cette distance. La version normalisée accepte une distance sous forme d’un nombre à virgule entre 0 (origine) et 1 (point terminal).

Inverse de GEOSGeometry.project().

GEOSGeometry.intersection(other)Lien vers cette définition

Renvoie un objet GEOSGeometry représentant les points partagés entre cet objet géométrique et l’objet other.

GEOSGeometry.project(point)Lien vers cette définition
GEOSGeometry.project_normalized(point)Lien vers cette définition

Renvoie la distance (nombre à virgule) à partir de l’origine de l’objet géométrique (LineString ou MultiLineString) jusqu’au point projeté sur la géométrie (c’est-à-dire le point de la ligne le plus proche du point donné). La version normalisée renvoie la distance sous forme d’un nombre à virgule entre 0 (origine) et 1 (point terminal).

Inverse de GEOSGeometry.interpolate().

GEOSGeometry.relate(other)Lien vers cette définition

Renvoie la matrice d’intersection DE-9IM (une chaîne) représentant la relation topologique entre cet objet géométrique et l’objet en paramètre.

GEOSGeometry.simplify(tolerance=0.0, preserve_topology=False)Lien vers cette définition

Renvoie un nouvel objet GEOSGeometry, simplifié à la tolérance indiquée en utilisant l’algorithme Douglas-Peucker. Une plus haute valeur de tolérance produit moins de points dans le résultat. Si aucune tolérance n’est fournie, la valeur par défaut est 0.

Par défaut, cette fonction ne préserve pas la topologie. Par exemple, les objets Polygon peuvent être divisés, être fusionnés pour former des lignes ou carrément disparaître. Des trous de Polygon peuvent apparaître ou disparaître et des lignes peuvent se croiser. En définissant preserve_topology=True, le résultat aura les mêmes dimensions et le même nombre de composants que l’objet de départ ; la fonction est cependant nettement plus lente.

GEOSGeometry.sym_difference(other)Lien vers cette définition

Renvoie un objet GEOSGeometry formé des points de cet objet géométrique qui ne sont pas dans l’objet en paramètre, ainsi que des points dans l’objet en paramètre qui ne sont pas dans cet objet.

GEOSGeometry.union(other)Lien vers cette définition

Renvoie un objet GEOSGeometry représentant tous les points de cet objet géométrique additionnés de ceux de l’objet en paramètre.

Propriétés topologiquesLien vers cette rubrique

GEOSGeometry.boundaryLien vers cette définition

Renvoie les limites sous forme d’une nouvelle instance d’objet géométrique.

GEOSGeometry.centroidLien vers cette définition

Renvoie un objet Point représentant le centre géométrique de l’objet. Le point n’est pas assuré d’être à l’intérieur de l’objet géométrique.

GEOSGeometry.convex_hullLien vers cette définition

Renvoie le plus petit Polygon contenant tous les points de l’objet géométrique.

GEOSGeometry.envelopeLien vers cette définition

Renvoie un Polygon qui représente l’enveloppe englobante de cet objet géométrique. Notez qu’un Point peut aussi être renvoyé si l’objet en entrée est lui-même un point.

GEOSGeometry.point_on_surfaceLien vers cette définition

Calcule et renvoie un Point assuré d’être à l’intérieur de l’objet géométrique.

GEOSGeometry.unary_unionLien vers cette définition

Calcule l’union de tous les éléments de cet objet géométrique.

Le résultat respecte le contrat suivant :

  • L’union d’un ensemble de LineString procède à leur complète mise en nœuds et à la dissolution des lignes.

  • L’union d’un ensemble de Polygon renvoie toujours un objet géométrique Polygon ou MultiPolygon (au contraire de GEOSGeometry.union() qui peut renvoyer des géométries de plus faible dimension si un conflit de topologie se produit).

Autres propriétés et méthodesLien vers cette rubrique

GEOSGeometry.areaLien vers cette définition

Cette propriété renvoie l’aire de l’objet géométrique.

GEOSGeometry.extentLien vers cette définition

Cette propriété renvoie l’étendue de cet objet géométrique sous forme d’un tuple à 4 éléments, formé de (xmin, ymin, xmax, ymax).

GEOSGeometry.clone()Lien vers cette définition

Cette méthode renvoie un objet GEOSGeometry clone de l’original.

GEOSGeometry.distance(geom)Lien vers cette définition

Renvoie la distance entre les points les plus proches de cet objet géométrique et l’objet geom (un autre objet GEOSGeometry).

GEOSGeometry.lengthLien vers cette définition

Renvoie la longueur de cet objet géométrique (par ex. 0 pour un Point, la longueur d’une ligne LineString ou la circonférence d’un Polygon).

GEOSGeometry.preparedLien vers cette définition

Renvoie un objet GEOS PreparedGeometry relatif au contenu de cet objet géométrique. Les objets PreparedGeometry sont optimisés pour les opérations contains, intersects, covers, crosses, disjoint, overlaps, touches et within. Référez-vous à la documentation Objets géométriques préparés pour plus d’informations.

GEOSGeometry.srsLien vers cette définition

Renvoie un objet SpatialReference correspondant au SRID de l’objet géométrique ou .

GEOSGeometry.transform(ct, clone=False)Lien vers cette définition

Transforme l’objet géométrique en fonction du paramètre de transformation de coordonnées donné (ct), qui peut être un numéro de SRID, une chaîne de référence spatiale WKT, une chaîne PROJ, un objet SpatialReference ou un objet CoordTransform. Par défaut, l’objet géométrique est transformé lui-même et rien n’est renvoyé. Cependant, quand le paramètre clone est défini, l’objet géométrique n’est pas modifié et c’est un clone transformé de l’objet géométrique qui est renvoyé.

GEOSGeometry.make_valid()Lien vers cette définition

Renvoie un équivalent GEOSGeometry valable, en essayant de ne perdre aucune caractéristique géométrique de l’objet en entrée. Si ce dernier est déjà valable, il est renvoyé non modifié. C’est similaire à la fonction de base de données MakeValid. Nécessite GEOS 3.8.

GEOSGeometry.normalize(clone=False)Lien vers cette définition

Convertit cet objet géométrique sous sa forme canonique. Si le paramètre clone est défini, l’objet n’est pas touché et un clone normalisé est renvoyé à la place :

Python console
>>> 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)

PointLien vers cette rubrique

class Point(x=None, y=None, z=None, srid=None)Lien vers cette définition

Les objets Point sont créés en utilisant des paramètres représentant les composantes de coordonnées du point ou une suite unique de coordonnées. Par exemple, les lignes suivantes sont équivalentes :

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

Des objets Point vides peuvent être instanciés en ne passant aucun paramètre ou une liste vide. Ces lignes sont équivalentes :

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

LineStringLien vers cette rubrique

class LineString(*args, **kwargs)Lien vers cette définition

Les objets LineString sont créés en utilisant des paramètres représentant une suite de coordonnées ou une suite d’objets Point. Par exemple, les lignes suivantes sont équivalentes :

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

De plus, les objets LineString peuvent aussi être créés en passant une seule liste de coordonnées ou d’objets Point:

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

Des objets LineString vides peuvent être instanciés en ne passant aucun paramètre ou une liste vide. Ces lignes sont équivalentes :

Python console
>>> ls = LineString()
>>> ls = LineString([])
closedLien vers cette définition

Indique si cette ligne LineString est fermée.

LinearRingLien vers cette rubrique

class LinearRing(*args, **kwargs)Lien vers cette définition

Les objets LinearRing sont construits de la même manière que les objets LineString. Cependant, les coordonnées doivent être fermées, c’est-à-dire que la première et la dernière coordonnée doivent être identiques. Par exemple :

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

Remarquez que (0, 0) est à la fois la première et la dernière coordonnée ; si elles ne sont pas égales, une erreur est générée.

is_counterclockwiseLien vers cette définition

Indique si cet objet LinearRing est orienté dans le sens antihoraire.

PolygonLien vers cette rubrique

class Polygon(*args, **kwargs)Lien vers cette définition

Les objets Polygon peuvent être créés en passant des paramètres représentant les segments du polygone. Les paramètres doivent être soit des instances de segments LinearRing, soit une suite d’éléments pouvant être utilisée pour construire un segment LinearRing:

Python console
>>> 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)Lien vers cette définition

Renvoie un objet polygone à partir du rectangle englobant donné, un tuple à 4 éléments comprenant (xmin, ymin, xmax, ymax).

num_interior_ringsLien vers cette définition

Renvoie le nombre de segments intérieurs de cet objet géométrique.

Collections géométriquesLien vers cette rubrique

MultiPointLien vers cette rubrique

class MultiPoint(*args, **kwargs)Lien vers cette définition

Les objets MultiPoint peuvent être créés en passant des objets Point en paramètres ou une seule liste d’objets Point:

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

MultiLineStringLien vers cette rubrique

class MultiLineString(*args, **kwargs)Lien vers cette définition

Les objets MultiLineString peuvent être créés en passant des objets LineString en paramètres ou une seule liste d’objets LineString:

Python console
>>> ls1 = LineString((0, 0), (1, 1))
>>> ls2 = LineString((2, 2), (3, 3))
>>> mls = MultiLineString(ls1, ls2)
>>> mls = MultiLineString([ls1, ls2])
mergedLien vers cette définition

Renvoie une ligne LineString représentant la fusion de tous les composants de cet objet

closedLien vers cette définition

Renvoie True si et seulement si tous les éléments sont fermés.

MultiPolygonLien vers cette rubrique

class MultiPolygon(*args, **kwargs)Lien vers cette définition

Les objets MultiPolygon peuvent être créés en passant des objets Polygon en paramètres ou une seule liste d’objets Polygon:

Python console
>>> 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])

GeometryCollectionLien vers cette rubrique

class GeometryCollection(*args, **kwargs)Lien vers cette définition

Les objets GeometryCollection peuvent être créés en passant des objets GEOSGeometry en paramètres ou une seule liste d’objets GEOSGeometry:

Python console
>>> 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))

Objets géométriques préparésLien vers cette rubrique

Pour obtenir un objet géométrique préparé, accédez à la propriété GEOSGeometry.prepared. Avec une instance PreparedGeometry, il est possible d’utiliser ses méthodes de prédicats spatiaux énumérées ci-dessous avec d’autres objets GEOSGeometry. Une opération sur un objet géométrique préparé peut être beaucoup plus rapide ; plus l’objet géométrique est complexe, plus grand sera le gain de rapidité pour l’opération. Pour plus d’informations, consultez la page du wiki GEOS sur les objets géométriques préparés.

Par exemple :

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

PreparedGeometryLien vers cette rubrique

class PreparedGeometryLien vers cette définition

Toutes les méthodes des objets PreparedGeometry acceptent un paramètre other (autre) qui doit représenter une instance GEOSGeometry.

contains(other)Lien vers cette définition
contains_properly(other)Lien vers cette définition
covers(other)Lien vers cette définition
crosses(other)Lien vers cette définition
disjoint(other)Lien vers cette définition
intersects(other)Lien vers cette définition
overlaps(other)Lien vers cette définition
touches(other)Lien vers cette définition
within(other)Lien vers cette définition

Fabrication d’objets géométriquesLien vers cette rubrique

fromfile(file_h)Lien vers cette définition
Paramètres:

file_h (a Python file object or a string path to the file) – Fichier d’entrée contenant des données spatiales

Type renvoyé:

un objet GEOSGeometry correspondant aux données spatiales du fichier

Exemple :

Python console
>>> from django.contrib.gis.geos import fromfile
>>> g = fromfile("/home/bob/geom.wkt")
fromstr(string, srid=None)Lien vers cette définition
Paramètres:
  • string (str) – chaîne contenant des données spatiales

  • srid (int) – identifiant de référence spatiale

Type renvoyé:

un objet GEOSGeometry correspondant aux données spatiales de la chaîne

fromstr(string, srid) est équivalente à GEOSGeometry(string, srid).

Exemple :

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

Objets d’entrées/sortiesLien vers cette rubrique

Objets de lectureLien vers cette rubrique

Les classes d’entrées/sorties en lecture renvoient une instance GEOSGeometry à partir du contenu WKB ou WKT en entrée en fonction de leur méthode read(geom).

class WKBReaderLien vers cette définition

Exemple :

Python console
>>> from django.contrib.gis.geos import WKBReader
>>> wkb_r = WKBReader()
>>> wkb_r.read("0101000000000000000000F03F000000000000F03F")
<Point object at 0x103a88910>
class WKTReaderLien vers cette définition

Exemple :

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

Objets d’écritureLien vers cette rubrique

Tous les objets d’écriture ont une méthode write(geom) qui renvoie la représentation WKB ou WKT de l’objet géométrique concerné. De plus, les objets WKBWriter ont aussi des propriétés pouvant être utilisées pour changer l’ordre des octets et d’inclure la valeur SRID (autrement dit, du contenu EWKB).

class WKBWriter(dim=2)Lien vers cette définition

WKBWriter offre le plus de contrôle sur le contenu produit. Par défaut, il renvoie du contenu WKB conforme OGC lorsqu’on appelle sa méthode write. Cependant, il possède des propriétés permettant la production de format EWKB, un sur-ensemble du standard WKB qui inclut des informations supplémentaires. Voir la documentation WKBWriter.outdim pour plus de détails sur le paramètre dim.

write(geom)Lien vers cette définition

Renvoie la représentation WKB de l’objet géométrique sous forme d’objet Python buffer. Exemple :

Python console
>>> 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)Lien vers cette définition

Renvoie la représentation WKB de l’objet géométrique sous forme hexadécimale. Exemple :

Python console
>>> from django.contrib.gis.geos import Point, WKBWriter
>>> pnt = Point(1, 1)
>>> wkb_w = WKBWriter()
>>> wkb_w.write_hex(pnt)
'0101000000000000000000F03F000000000000F03F'
byteorderLien vers cette définition

Cette propriété peut être définie pour changer l’ordre des octets de la représentation géométrique.

Valeur byteorder

Description

0

Gros-boutiste (big endian, compatible avec les systèmes RISC)

1

Petit-boutiste (little endian, compatible avec les systèmes x86)

Exemple :

Python console
>>> 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'
outdimLien vers cette définition

Cette propriété peut être définie pour changer les dimensions du résultat de la représentation géométrique. En d’autres termes, si vous avez un objet 3D, définir cette valeur à 3 permet d’inclure la dimension Z dans le format WKB.

Valeur outdim

Description

2

Par défaut, produit du contenu WKB en 2D.

3

Produit du contenu WKB en 3D.

Exemple :

Python console
>>> 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'
sridLien vers cette définition

Définissez cette propriété avec une valeur booléenne pour indiquer si le code SRID de l’objet géométrique doit être inclus dans la représentation WKB. Exemple :

Python console
>>> 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)Lien vers cette définition

Cette classe permet de produire la représentation WKT d’un objet géométrique. Voir les attributs WKBWriter.outdim, trim et precision pour plus de détails sur les paramètres du constructeur.

write(geom)Lien vers cette définition

Renvoie la représentation WKT de l’objet géométrique. Exemple :

Python console
>>> from django.contrib.gis.geos import Point, WKTWriter
>>> pnt = Point(1, 1)
>>> wkt_w = WKTWriter()
>>> wkt_w.write(pnt)
'POINT (1.0000000000000000 1.0000000000000000)'
outdimLien vers cette définition

Voir WKBWriter.outdim.

trimLien vers cette définition

Cette propriété est utilisée pour activer ou désactiver la suppression de décimales non nécessaires.

Python console
>>> 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)'
precisionLien vers cette définition

Cette propriété contrôle la précision de l’arrondi des coordonnées ; si elle vaut None, l’arrondi est désactivé.

Code
>>> 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)'

Notes de bas de page

RéglagesLien vers cette rubrique

GEOS_LIBRARY_PATHLien vers cette rubrique

Une chaîne indiquant l’emplacement de la bibliothèque GEOS C. Ce réglage n’est généralement nécessaire que si la bibliothèque GEOS C n’est pas à un emplacement standard (par ex. /home/bob/lib/libgeos_c.so).

ExceptionsLien vers cette rubrique

exception GEOSExceptionLien vers cette définition

L’exception GEOS de base, indiquant une erreur en lien avec GEOS.