Référence des API GeoQuerySet

class GeoQuerySet(model=None)

Recherches spatiales

Les requêtes spatiales de cette section sont disponibles à la fois pour GeometryField et RasterField.

Pour une vue générale, consultez l”introduction sur les recherches spatiales. Pour un aperçu sur la compatibilité des diverses requêtes en fonction du moteur spatial utilisé, référez-vous au tableau de compatibilité des recherches spatiales.

Changed in Django 1.10:

Les requêtes spatiales prennent dorénavant en charge les entrées matricielles.

Requêtes avec matrices

Tous les exemples dans la référence ci-dessous sont donnés pour des champs et des entrées géométriques, mais ces requêtes peuvent très bien être utilisées avec des objets matriciels des deux côtés. Chaque fois qu’une requête ne prend pas en charge les entrées matricielles, l’entrée est automatiquement convertie en objet géométrique quand c’est nécessaire en utilisant la fonction ST_Polygon. Voir aussi l’introduction aux requêtes matricielles.

Les opérateurs de base de données utilisés par les requêtes peuvent être divisés en trois catégories :

  • Prise en charge matricielle native N: l’opérateur accepte nativement les objets matriciels des deux côtés de la requête et les entrées matricielles peuvent être mélangées avec des entrées géométriques.
  • Prise en charge matricielle bilatérale B: l’opérateur ne prend en charge les objets matriciels seulement si les deux côtés de la requête reçoivent des entrées matricielles. Les données matricielles sont automatiquement converties en objets géométriques en cas de requêtes mixtes.
  • Prise en charge par conversion géométrique C. La requête ne prend pas en charge nativement les objets matriciels, toutes les données matricielles sont automatiquement converties en objets géométriques.

Les exemples ci-dessous montrent le code SQL équivalent pour les requêtes dans les différents types de prise en charge matricielle. Le même schéma s’applique pour toutes les requêtes spatiales.

Cas Requête Équivalent SQL
N, B rast__contains=rst ST_Contains(rast, rst)
N, B rast__1__contains=(rst, 2) ST_Contains(rast, 1, rst, 2)
B, C rast__contains=geom ST_Contains(ST_Polygon(rast), geom)
B, C rast__1__contains=geom ST_Contains(ST_Polygon(rast, 1), geom)
B, C poly__contains=rst ST_Contains(poly, ST_Polygon(rst))
B, C poly__contains=(rst, 1) ST_Contains(poly, ST_Polygon(rst, 1))
C rast__crosses=rst ST_Crosses(ST_Polygon(rast), ST_Polygon(rst))
C rast__1__crosses=(rst, 2) ST_Crosses(ST_Polygon(rast, 1), ST_Polygon(rst, 2))
C rast__crosses=geom ST_Crosses(ST_Polygon(rast), geom)
C poly__crosses=rst ST_Crosses(poly, ST_Polygon(rst))

Les requêtes spatiales avec des objets matriciels ne sont prises en charge que pour le moteur PostGIS (désigné par PGRaster dans cette section).

bbcontains

Disponibilité : PostGIS, MySQL, SpatiaLite, PGRaster (natif)

Teste si le rectangle englobant du champ géométrique ou matriciel contient complètement le rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__bbcontains=geom)
Moteur Équivalent SQL
PostGIS poly ~ geom
MySQL MBRContains(poly, geom)
SpatiaLite MbrContains(poly, geom)

bboverlaps

Disponibilité : PostGIS, MySQL, SpatiaLite, PGRaster (natif)

Teste si le rectangle englobant du champ géométrique recouvre partiellement le rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__bboverlaps=geom)
Moteur Équivalent SQL
PostGIS poly && geom
MySQL MBROverlaps(poly, geom)
SpatiaLite MbrOverlaps(poly, geom)

contained

Disponibilité : PostGIS, MySQL, SpatiaLite, PGRaster (natif)

Teste si le rectangle englobant du champ géométrique est complètement contenu dans le rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__contained=geom)
Moteur Équivalent SQL
PostGIS poly @ geom
MySQL MBRWithin(poly, geom)
SpatiaLite MbrWithin(poly, geom)

contains

Disponibilité : PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (bilatéral)

Teste si le champ géométrique contient spatialement l’objet géométrique de la recherche.

Exemple :

Zipcode.objects.filter(poly__contains=geom)
Moteur Équivalent SQL
PostGIS ST_Contains(poly, geom)
Oracle SDO_CONTAINS(poly, geom)
MySQL MBRContains(poly, geom)
SpatiaLite Contains(poly, geom)

contains_properly

Disponibilité : PostGIS, PGRaster (bilatéral)

Renvoie True si l’objet géométrique de la recherche a une intersection avec l’intérieur du champ géométrique, mais pas avec ses limites (ou extérieur).

Exemple :

Zipcode.objects.filter(poly__contains_properly=geom)
Moteur Équivalent SQL
PostGIS ST_ContainsProperly(poly, geom)

coveredby

Disponibilité : PostGIS, Oracle, PGRaster (bilatéral)

Teste si aucun point du champ géométrique n’est en dehors de l’objet géométrique de la recherche. [3]

Exemple :

Zipcode.objects.filter(poly__coveredby=geom)
Moteur Équivalent SQL
PostGIS ST_CoveredBy(poly, geom)
Oracle SDO_COVEREDBY(poly, geom)

covers

Disponibilité : PostGIS, Oracle, PGRaster (bilatéral)

Teste si aucun point de l’objet géométrique de la recherche n’est en dehors du champ géométrique. [3]

Exemple :

Zipcode.objects.filter(poly__covers=geom)
Moteur Équivalent SQL
PostGIS ST_Covers(poly, geom)
Oracle SDO_COVERS(poly, geom)

crosses

Disponibilité : PostGIS, SpatiaLite, PGRaster (conversion)

Teste si le champ géométrique se croise spatialement avec l’objet géométrique de la recherche.

Exemple :

Zipcode.objects.filter(poly__crosses=geom)
Moteur Équivalent SQL
PostGIS ST_Crosses(poly, geom)
SpatiaLite Crosses(poly, geom)

disjoint

Disponibilité : PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (bilatéral)

Teste si le champ géométrique est spatialement distinct de l’objet géométrique de la recherche.

Exemple :

Zipcode.objects.filter(poly__disjoint=geom)
Moteur Équivalent SQL
PostGIS ST_Disjoint(poly, geom)
Oracle SDO_GEOM.RELATE(poly, 'DISJOINT', geom, 0.05)
MySQL MBRDisjoint(poly, geom)
SpatiaLite Disjoint(poly, geom)

equals

Disponibilité : PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (conversion)

exact, same_as

Disponibilité : PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (bilatéral)

intersects

Disponibilité: PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (bilatéral)

Teste si le champ géométrique possède une intersection spatiale avec l’objet géométrique de la recherche.

Exemple :

Zipcode.objects.filter(poly__intersects=geom)
Moteur Équivalent SQL
PostGIS ST_Intersects(poly, geom)
Oracle SDO_OVERLAPBDYINTERSECT(poly, geom)
MySQL MBRIntersects(poly, geom)
SpatiaLite Intersects(poly, geom)

isvalid

New in Django 1.10.

Disponibilité : PostGIS, Oracle, SpatiaLite

Teste si l’objet géométrique est valide.

Exemple :

Zipcode.objects.filter(poly__isvalid=True)
Moteur Équivalent SQL
PostGIS, SpatiaLite ST_IsValid(poly)
Oracle SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(poly, 0.05) = 'TRUE'
Changed in Django 1.11:

La prise en charge de SpatiaLite et d’Oracle a été ajoutée.

overlaps

Disponibilité : PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (bilatéral)

relate

Disponibilité : PostGIS, Oracle, SpatiaLite, PGRaster (conversion)

Teste si le champ géométrique possède une liaison spatiale avec l’objet géométrique de la recherche en fonction des valeurs indiquées dans le motif donné. Cette recherche nécessite un paramètre sous forme de tuple (géom, motif); la forme de motif dépend du moteur spatial :

PostGIS et SpatiaLite

Pour ces moteurs spatiaux, le motif d’intersection est une chaîne de neuf caractères qui définissent les intersections entre l’intérieur, les limites et l’extérieur du champ géométrique et de l’objet géométrique de la recherche. La matrice d’intersection ne peut utiliser que les caractères suivants : 1, 2, T, F ou *. Ce type de recherche permet d’affiner une relation géométrique spécifique en cohérence avec le modèle DE-9IM. [1]

Exemple géométrique :

# A tuple lookup parameter is used to specify the geometry and
# the intersection pattern (the pattern here is for 'contains').
Zipcode.objects.filter(poly__relate=(geom, 'T*T***FF*'))

Équivalent SQL PostGIS :

SELECT ... WHERE ST_Relate(poly, geom, 'T*T***FF*')

Équivalent SQL SpatiaLite :

SELECT ... WHERE Relate(poly, geom, 'T*T***FF*')

Exemple matriciel :

Zipcode.objects.filter(poly__relate=(rast, 1, 'T*T***FF*'))
Zipcode.objects.filter(rast__2__relate=(rast, 1, 'T*T***FF*'))

Équivalent SQL PostGIS :

SELECT ... WHERE ST_Relate(poly, ST_Polygon(rast, 1), 'T*T***FF*')
SELECT ... WHERE ST_Relate(ST_Polygon(rast, 2), ST_Polygon(rast, 1), 'T*T***FF*')

Oracle

Ici, le motif de relation comprend au moins une des neuf chaînes de relation possibles : TOUCH, OVERLAPBDYDISJOINT, OVERLAPBDYINTERSECT, EQUAL, INSIDE, COVEREDBY, CONTAINS, COVERS, ON et ANYINTERACT. Plusieurs chaînes peuvent être combinées par l’opérateur logique booléen OR, par exemple 'inside+touch'. [2] Les chaînes de relation sont insensibles à la casse.

Exemple :

Zipcode.objects.filter(poly__relate=(geom, 'anyinteract'))

Équivalent SQL Oracle :

SELECT ... WHERE SDO_RELATE(poly, geom, 'anyinteract')

touches

Disponibilité : PostGIS, Oracle, MySQL, SpatiaLite

Teste si le champ géométrique touche spatialement l’objet géométrique de la recherche.

Exemple :

Zipcode.objects.filter(poly__touches=geom)
Moteur Équivalent SQL
PostGIS ST_Touches(poly, geom)
MySQL MBRTouches(poly, geom)
Oracle SDO_TOUCH(poly, geom)
SpatiaLite Touches(poly, geom)

within

Disponibilité : PostGIS, Oracle, MySQL, SpatiaLite, PGRaster (bilatéral)

Teste si le champ géométrique est spatialement à l’intérieur de l’objet géométrique de la recherche.

Exemple :

Zipcode.objects.filter(poly__within=geom)
Moteur Équivalent SQL
PostGIS ST_Within(poly, geom)
MySQL MBRWithin(poly, geom)
Oracle SDO_INSIDE(poly, geom)
SpatiaLite Within(poly, geom)

left

Disponibilité : PostGIS, PGRaster (conversion)

Teste si le rectangle englobant du champ géométrique est strictement à gauche du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__left=geom)

Équivalent PostGIS :

SELECT ... WHERE poly << geom

right

Disponibilité : PostGIS, PGRaster (conversion)

Teste si le rectangle englobant du champ géométrique est strictement à droite du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__right=geom)

Équivalent PostGIS :

SELECT ... WHERE poly >> geom

overlaps_left

Disponibilité : PostGIS, PGRaster (bilatéral)

Teste si le rectangle englobant du champ géométrique recouvre ou est à gauche du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__overlaps_left=geom)

Équivalent PostGIS :

SELECT ... WHERE poly &< geom

overlaps_right

Disponibilité : PostGIS, PGRaster (bilatéral)

Teste si le rectangle englobant du champ géométrique recouvre ou est à droite du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__overlaps_right=geom)

Équivalent PostGIS :

SELECT ... WHERE poly &> geom

overlaps_above

Disponibilité : PostGIS, PGRaster (conversion)

Teste si le rectangle englobant du champ géométrique recouvre ou est au-dessus du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__overlaps_above=geom)

Équivalent PostGIS :

SELECT ... WHERE poly |&> geom

overlaps_below

Disponibilité : PostGIS, PGRaster (conversion)

Teste si le rectangle englobant du champ géométrique recouvre ou est au-dessous du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__overlaps_below=geom)

Équivalent PostGIS :

SELECT ... WHERE poly &<| geom

strictly_above

Disponibilité : PostGIS, PGRaster (conversion)

Teste si le rectangle englobant du champ géométrique est strictement au-dessus du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__strictly_above=geom)

Équivalent PostGIS :

SELECT ... WHERE poly |>> geom

strictly_below

Disponibilité : PostGIS, PGRaster (conversion)

Teste si le rectangle englobant du champ géométrique est strictement au-dessous du rectangle englobant de la recherche géométrique.

Exemple :

Zipcode.objects.filter(poly__strictly_below=geom)

Équivalent PostGIS :

SELECT ... WHERE poly <<| geom

Recherches de distance

Disponibilité : PostGIS, Oracle, SpatiaLite, PGRaster (natif)

Pour un aperçu sur la construction de requêtes de distance, référez-vous à l”introduction sur les requêtes de distance.

Les requêtes de distance se font sous la forme suivante :

<field>__<distance lookup>=(<geometry/raster>, <distance value>[, 'spheroid'])
<field>__<distance lookup>=(<raster>, <band_index>, <distance value>[, 'spheroid'])
<field>__<band_index>__<distance lookup>=(<raster>, <band_index>, <distance value>[, 'spheroid'])

La valeur transmise à une requête de distance est un tuple ; les deux premières valeurs sont obligatoires et représentent respectivement l’objet géométrique vers lequel la distance doit être calculée et la valeur de distance (soit un nombre dans l’unité du champ, un objet Distance ou une expression de requête <ref/models/expressions>). Pour transmettre un indice de bande à la requête, utilisez un tuple à 3 éléments où le deuxième est l’indice de bande.

Pour toutes les recherches de distance à l’exception de dwithin, une valeur facultative, 'spheroid', peut être ajoutée pour utiliser les fonctions de calcul de distance sphéroïde pour les champs ayant un système de coordonnées géodétique.

Avec PostgreSQL, l’option 'spheroid' utilise ST_DistanceSpheroid au lieu de ST_DistanceSphere. La fonction plus simple ST_Distance est utilisée avec les systèmes de coordonnées projetées. Les matrices sont converties en géométries pour les requêtes basées sur la sphéroïde.

New in Django 1.10:

La capacité de transmettre une expression comme valeur de distance a été ajoutée.

New in Django 1.11:

La prise en charge de l’option spheroid a été ajoutée avec SQLite.

distance_gt

Renvoie les objets pour lesquels la distance entre le champ géométrique et l’objet géométrique de recherche est plus grande que la valeur de distance donnée.

Exemple :

Zipcode.objects.filter(poly__distance_gt=(geom, D(m=5)))
Moteur Équivalent SQL
PostGIS ST_Distance/ST_Distance_Sphere(poly, geom) > 5
Oracle SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) > 5
SpatiaLite Distance(poly, geom) > 5

distance_gte

Renvoie les objets pour lesquels la distance entre le champ géométrique et l’objet géométrique de recherche est plus grande ou égale à la valeur de distance donnée.

Exemple :

Zipcode.objects.filter(poly__distance_gte=(geom, D(m=5)))
Moteur Équivalent SQL
PostGIS ST_Distance/ST_Distance_Sphere(poly, geom) >= 5
Oracle SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) >= 5
SpatiaLite Distance(poly, geom) >= 5

distance_lt

Renvoie les objets pour lesquels la distance entre le champ géométrique et l’objet géométrique de recherche est plus petite que la valeur de distance donnée.

Exemple :

Zipcode.objects.filter(poly__distance_lt=(geom, D(m=5)))
Moteur Équivalent SQL
PostGIS ST_Distance/ST_Distance_Sphere(poly, geom) < 5
Oracle SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) < 5
SpatiaLite Distance(poly, geom) < 5

distance_lte

Renvoie les objets pour lesquels la distance entre le champ géométrique et l’objet géométrique de recherche est plus petite ou égale à la valeur de distance donnée.

Exemple :

Zipcode.objects.filter(poly__distance_lte=(geom, D(m=5)))
Moteur Équivalent SQL
PostGIS ST_Distance/ST_Distance_Sphere(poly, geom) <= 5
Oracle SDO_GEOM.SDO_DISTANCE(poly, geom, 0.05) <= 5
SpatiaLite Distance(poly, geom) <= 5

dwithin

Renvoie les objets pour lesquels la distance entre le champ géométrique et l’objet géométrique de recherche ne dépasse pas la valeur de distance donnée. Notez que vous ne pouvez fournir des objets Distance que si les objets géométriques concernés sont dans un système de coordonnées projeté. Pour des objets géométriques de type géographique, il faut utiliser l’unité du champ géométrique (par exemple des degrés pour WGS84).

Exemple :

Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
Moteur Équivalent SQL
PostGIS ST_DWithin(poly, geom, 5)
Oracle SDO_WITHIN_DISTANCE(poly, geom, 5)
SpatiaLite PtDistWithin(poly, geom, 5)
Changed in Django 1.11:

La prise en charge de SpatiaLite a été ajoutée.

Méthodes GeoQuerySet

Obsolète depuis la version 1.9: L’utilisation des méthodes GeoQuerySet est dorénavant obsolète et doit être remplacée par les nouvelles Fonctions de base de données géographiques. Bien qu’un peu moins concises, elles sont beaucoup plus puissantes dans la manière de les combiner pour construire des requêtes plus complexes.

Les méthodes de GeoQuerySet appliquent une opération spatiale sur chaque champ géographique du jeu de requête et stockent le résultat dans un nouvel attribut du modèle (qui correspond généralement au nom de la méthode GeoQuerySet).

Il existe également des méthodes GeoQuerySet d’agrégation qui renvoient une valeur unique au lieu d’un jeu de requête. Cette section documente l’API et la disponibilité de chaque méthode de GeoQuerySet dans GeoDjango.

Note

Les méthodes disponibles dépendent du moteur spatial utilisé. Consultez le tableau de compatibilité pour plus de détails.

À quelques exceptions près, les paramètres nommés suivants peuvent être utilisés avec toutes les méthodes de GeoQuerySet:

Paramètre nommé Description
field_name

Par défaut, les méthodes de GeoQuerySet utilisent le premier champ géométrique défini dans un modèle. Ce paramètre peut être utilisé pour désigner un autre champ géométrique (par ex. field_name='point2') lorsqu’un modèle possède plusieurs champs géométriques.

Avec PostGIS, le paramètre field_name peut aussi contenir des champs géométriques provenant de modèles liés par une relation ForeignKey (par ex. field_name='champfk__point').

model_att

Par défaut, les méthodes de GeoQuerySet ajoutent typiquement leur résultat dans un attribut du même nom que la méthode elle-même. Ce comportement par défaut peut être modifié en définissant ce paramètre avec un nom d’attribut différent. Par exemple, qs = Zipcode.objects.centroid(model_att='c') ajoute le centroïde (barycentre) du champ géométrique de Zipcode dans un attribut c de chaque modèle, plutôt que dans un attribut centroid.

Ce paramètre est obligatoire quand un nom de modèle entre en conflit avec une méthode GeoQuerySet existante ; par exemple si vous utilisez la méthode area() avec un modèle contenant un champ PolygonField nommé area.

Mesures

Disponibilité : PostGIS, Oracle, SpatiaLite

area

GeoQuerySet.area(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Area.

Écrit l’aire du champ géométrique dans un attribut area de chaque élément du GeoQuerySet.

distance

GeoQuerySet.distance(geom, **kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Distance.

Cette méthode accepte un objet géométrique en paramètre et ajoute un attribut distance à chaque modèle du jeu de requête, attribut contenant la distance entre le champ concerné du modèle et l’objet géométrique donné (sous forme d’objet Distance).

Dans l’exemple suivant (tiré des tests de distance de GeoDjango), on calcule la distance entre la ville tasmanienne de Hobart vers tous les autres champs PointField du jeu de requête AustraliaCity:

>>> pnt = AustraliaCity.objects.get(name='Hobart').point
>>> for city in AustraliaCity.objects.distance(pnt): print(city.name, city.distance)
Wollongong 990071.220408 m
Shellharbour 972804.613941 m
Thirroul 1002334.36351 m
Mittagong 975691.632637 m
Batemans Bay 834342.185561 m
Canberra 598140.268959 m
Melbourne 575337.765042 m
Sydney 1056978.87363 m
Hobart 0.0 m
Adelaide 1162031.83522 m
Hillsdale 1049200.46122 m

Note

Comme l’attribut distance est un objet Distance, il est facile d’exprimer cette valeur dans l’unité de son choix. Par exemple, city.distance.mi est la valeur de distance en milles et city.distance.km est la valeur de distance en kilomètres. Consultez Objets de mesure pour des détails d’utilisation et la liste des Unités prises en charge.

length

GeoQuerySet.length(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Length.

Écrit la longueur du champ géométrique dans un attribut length de chaque élément du jeu de requête (un objet Distance).

perimeter

GeoQuerySet.perimeter(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Perimeter.

Écrit le périmètre du champ géométrique dans un attribut perimeter de chaque élément du jeu de requête (un objet Distance).

Relations géométriques

Les méthodes suivantes ne demandent aucun paramètre et ajoutent un objet géométrique à chaque élément du jeu de requête GeoQuerySet , objet qui est le résultat d’une fonction de relation évaluée sur le champ géométrique.

centroid

GeoQuerySet.centroid(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Centroid.

Disponibilité : PostGIS, Oracle, SpatiaLite

Écrit la valeur de centroïde du champ géométrique dans un attribut centroid de chaque élément du GeoQuerySet.

envelope

GeoQuerySet.envelope(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Envelope.

Disponibilité : PostGIS, SpatiaLite

Écrit un objet géométrique représentant le rectangle englobant du champ géométrique dans un attribut envelope de chaque élément du GeoQuerySet.

point_on_surface

GeoQuerySet.point_on_surface(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction PointOnSurface.

Disponibilité : PostGIS, Oracle, SpatiaLite

Écrit un objet géométrique Point se trouvant de manière certaine dans la surface du champ géométrique dans un attribut point_on_surface de chaque élément du jeu de requête.

Éditeurs géométriques

force_rhr

GeoQuerySet.force_rhr(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction ForceRHR.

Disponibilité : PostGIS

Calcule une version modifiée du (multi)polygone pour lequel toutes les arêtes suivent la « règle de la main droite » et place cet objet dans un attribut force_rhr pour chaque élément du jeu de requête.

reverse_geom

GeoQuerySet.reverse_geom(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Reverse.

Disponibilité : PostGIS, Oracle

Inverse l’ordre des coordonnées du champ géométrique et place l’objet résultant dans un attribut reverse pour chaque élément du jeu de requête.

scale

GeoQuerySet.scale(x, y, z=0.0, **kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Scale.

Disponibilité : PostGIS, SpatiaLite

snap_to_grid

GeoQuerySet.snap_to_grid(*args, **kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction SnapToGrid.

Fait glisser tous les points du champ géométrique selon une grille. La manière d’ajuster l’objet géométrique à la grille dépend du nombre de paramètres numériques fournis (des nombres à virgule, entiers ou entiers longs).

Nombre de paramètres Description
1 Une seule taille de cellule de grille (à la fois pour la taille X et Y).
2 Tailles X et Y de cellule de grille.
4 Tailles de cellule X et Y ainsi que coordonnées X et Y de l’origine de la grille.

transform

GeoQuerySet.transform(srid=4326, **kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Transform.

Disponibilité : PostGIS, Oracle, SpatiaLite

La méthode transform transforme le champ géométrique d’un modèle dans le système de référence spatiale indiqué par le paramètre srid. Si ce paramètre est absent, c’est le SRID 4326 (WGS84) qui est utilisé par défaut.

Note

Au contraire des autres méthodes GeoQuerySet, transform effectue son travail sur l’objet lui-même. En d’autres termes, l’objet géométrique transformé n’est pas placé dans un nouvel attribut des modèles.

Note

La correspondance entre les numéros de SRID et les systèmes de référence spatiale peut dépendre du moteur spatial utilisé. Par exemple, les numéros SRID utilisés par Oracle ne sont pas forcément les mêmes que ceux utilisés par PostGIS.

Exemple :

>>> qs = Zipcode.objects.all().transform() # Transforms to WGS84
>>> qs = Zipcode.objects.all().transform(32140) # Transforming to "NAD83 / Texas South Central"
>>> print(qs[0].poly.srid)
32140
>>> print(qs[0].poly)
POLYGON ((234055.1698884720099159 4937796.9232223574072123 ...

translate

GeoQuerySet.translate(x, y, z=0.0, **kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Translate.

Disponibilité : PostGIS, SpatiaLite

Effectue une translation du champ géométrique vers un nouvel emplacement en utilisant les paramètres numériques donnés comme vecteurs.

Opérations géométriques

Disponibilité : PostGIS, Oracle, SpatiaLite

Les méthodes suivantes demandent toutes un objet géométrique en paramètre et ajoutent un objet géométrique à chaque élément du jeu de requête GeoQuerySet résultant de l’opération.

difference

GeoQuerySet.difference(geom)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Difference.

Effectue la différence spatiale entre le champ géométrique et l’objet géométrique donné et écrit le résultat dans un attribut difference de chaque élément du GeoQuerySet.

intersection

GeoQuerySet.intersection(geom)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Intersection.

Effectue l’intersection spatiale entre le champ géométrique et l’objet géométrique donné et écrit le résultat dans un attribut intersection de chaque élément du GeoQuerySet.

sym_difference

GeoQuerySet.sym_difference(geom)

Obsolète depuis la version 1.9: Utilisez à la place la fonction SymDifference.

Effectue la différence symétrique entre le champ géométrique et l’objet géométrique donné et écrit le résultat dans un attribut sym_difference de chaque élément du GeoQuerySet.

union

GeoQuerySet.union(geom)

Obsolète depuis la version 1.9: Utilisez à la place la fonction Union.

Effectue l’union du champ géométrique avec l’objet géométrique donné et écrit le résultat dans un attribut union de chaque élément du GeoQuerySet.

Sorties géométriques

Les méthodes GeoQuerySet suivantes créent pour chaque modèle un nouvel attribut contenant la valeur du champ géométrique converti dans le format de sortie demandé.

geohash

GeoQuerySet.geohash(precision=20, **kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction GeoHash.

Ajoute pour chaque modèle du jeu de requête un attribut geohash contenant la représentation GeoHash du champ géométrique.

geojson

GeoQuerySet.geojson(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction AsGeoJSON.

Disponibilité : PostGIS, SpatiaLite

Ajoute pour chaque modèle du jeu de requête un attribut geojson contenant la représentation GeoJSON du champ géométrique.

Paramètre nommé Description
precision Peut être utilisé pour indiquer le nombre de chiffres significatifs des coordonnées de la représentation GeoJSON, la valeur par défaut étant 8.
crs À définir à True pour que le système de référence de coordonnées soit inclus dans le format GeoJSON renvoyé.
bbox À définir à True pour que le rectangle englobant soit inclus dans le contenu GeoJSON renvoyé.

gml

GeoQuerySet.gml(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction AsGML.

Disponibilité : PostGIS, Oracle, SpatiaLite

Ajoute pour chaque modèle du jeu de requête un attribut gml contenant la représentation Geographic Markup Language (GML) du champ géométrique.

Exemple :

>>> qs = Zipcode.objects.all().gml()
>>> print(qs[0].gml)
<gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ...  -147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon>
Paramètre nommé Description
precision Ce paramètre n’est valable que pour PostGIS. Il peut être utilisé pour indiquer le nombre de chiffres significatifs des coordonnées de la représentation GML, la valeur par défaut étant 8.
version Ce paramètre n’est valable que pour PostGIS. Il peut être utilisé pour indiquer la version GML utilisée (2 ou 3). La valeur par défaut est 2.

kml

GeoQuerySet.kml(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction AsKML.

Disponibilité : PostGIS, SpatiaLite

Ajoute pour chaque modèle du jeu de requête un attribut kml contenant la représentation Keyhole Markup Language (KML) du champ géométrique. Il faut relever que le contenu KML est transformé en WGS84 si nécessaire.

Exemple :

>>> qs = Zipcode.objects.all().kml()
>>> print(qs[0].kml)
<Polygon><outerBoundaryIs><LinearRing><coordinates>-103.04135,36.217596,0 ... -103.04135,36.217596,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
Paramètre nommé Description
precision Ce paramètre peut être utilisé pour indiquer le nombre de chiffres significatifs des coordonnées de la représentation KML, la valeur par défaut étant 8.

svg

GeoQuerySet.svg(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction AsSVG.

Disponibilité : PostGIS, SpatiaLite

Ajoute pour chaque modèle du jeu de requête un attribut svg contenant les données de chemin Scalable Vector Graphics (SVG) du champ géométrique.

Paramètre nommé Description
relative Si défini à True, les données de chemin sont représentées en termes de déplacements relatifs. La valeur par défaut est False ce qui signifie que ce sont les déplacements absolus qui sont utilisés.
precision Ce paramètre peut être utilisé pour indiquer le nombre de chiffres significatifs des coordonnées de la représentation SVG, la valeur par défaut étant 8.

Divers

mem_size

GeoQuerySet.mem_size(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction MemSize.

Disponibilité : PostGIS

Calcule la taille mémoire (nombre d’octets) consommée par le champ géométrique et écrit le résultat dans un attribut mem_size de chaque élément du GeoQuerySet.

num_geom

GeoQuerySet.num_geom(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction NumGeometries.

Disponibilité : PostGIS, Oracle, SpatiaLite

Écrit le nombre d’éléments géométriques dans un attribut num_geom de chaque élément du GeoQuerySet, pour autant que le champ géométrique soit une collection (par ex. un champ GEOMETRYCOLLECTION ou MULTI*) ; sinon, l’attribut contiendra None.

num_points

GeoQuerySet.num_points(**kwargs)

Obsolète depuis la version 1.9: Utilisez à la place la fonction NumPoints.

Disponibilité : PostGIS, Oracle, SpatiaLite

Calcule le nombre de points du premier élément ligne (linestring) du champ géométrique et écrit le résultat dans un attribut num_points de chaque élément du GeoQuerySet. L’attribut contiendra None s’il n’y a pas de ligne.

Fonctions d’agrégation

Django fournit quelques fonctions d’agrégation spécifiques aux données géographiques. Pour plus de détails sur l’usage de ces fonctions, consultez le guide thématique sur l’agrégation.

Paramètre nommé Description
tolerance Ce paramètre n’est valable que pour Oracle. Il s’agit de la valeur de tolérance utilisée par la procédure SDOAGGRTYPE; la documentation Oracle contient plus de détails.

Exemple :

>>> from django.contrib.gis.db.models import Extent, Union
>>> WorldBorder.objects.aggregate(Extent('mpoly'), Union('mpoly'))

Collect

class Collect(geo_field)

Disponibilité : PostGIS, SpatiaLite

Renvoie un objet géométrique GEOMETRYCOLLECTION ou MULTI à partir de la colonne géométrique. C’est un peu comme une version simplifiée de l’agrégation Union, sauf qu’elle peut être vraiment plus rapide qu’une union car elle ne fait qu’accumuler les objets géométriques dans une collection ou une géométrie multiple sans se préoccuper de fusionner les objets.

Extent

class Extent(geo_field)

Disponibilité : PostGIS, Oracle, SpatiaLite

Renvoie l’étendue de tous les champs geo_field du QuerySet sous forme de tuple à 4 éléments formé des coordonnées inférieure gauche et supérieure droite.

Exemple :

>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(Extent('poly'))
>>> print(qs['poly__extent'])
(-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)

Extent3D

class Extent3D(geo_field)

Disponibilité : PostGIS

Renvoie l’étendue 3D de tous les champs geo_field du QuerySet sous forme de tuple à 6 éléments formé des coordonnées inférieure gauche et supérieure droite (chaque fois avec les coordonnées x, y et z).

Exemple :

>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(Extent3D('poly'))
>>> print(qs['poly__extent3d'])
(-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)

MakeLine

class MakeLine(geo_field)

Disponibilité : PostGIS, SpatiaLite

Renvoie une ligne LineString construite à partir des champs de type point du QuerySet. Actuellement, le tri du jeu de requête n’a pas d’effet.

Changed in Django 1.10:

La prise en charge de SpatiaLite a été ajoutée.

Exemple :

>>> qs = City.objects.filter(name__in=('Houston', 'Dallas')).aggregate(MakeLine('poly'))
>>> print(qs['poly__makeline'])
LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)

Union

class Union(geo_field)

Disponibilité : PostGIS, Oracle, SpatiaLite

Cette méthode renvoie un objet GEOSGeometry formé de l’union de tous les objets géométriques du jeu de requête. Sachez que l’emploi de Union est très consommateur de ressources et peut prendre un temps considérable pour de gros jeux de requête.

Note

Si le temps de calcul lors de l’utilisation de cette méthode est trop important, envisagez d’utiliser plutôt Collect.

Exemple :

>>> u = Zipcode.objects.aggregate(Union(poly))  # This may take a long time.
>>> u = Zipcode.objects.filter(poly__within=bbox).aggregate(Union(poly))  # A more sensible approach.

Notes de bas de page

[1]Voir OpenGIS Simple Feature Specification For SQL, chap. 2.1.13.2, p. 2-13 (The Dimensionally Extended Nine-Intersection Model).
[2]Voir la documentation de SDO_RELATE dans le guide de développement spatial et graphique d’Oracle.
[3](1, 2) Pour une explication de cette routine, lisez Quirks of the « Contains » Spatial Predicate par Martin Davis (un développeur PostGIS).
Back to Top