API des formulaires GeoDjangoLien vers cette rubrique

GeoDjango propose quelques champs et composants de formulaires spécialisés afin d’afficher et de modifier visuellement des données géolocalisées sur une carte. Par défaut, ils utilisent des cartes motorisées par OpenLayers, avec une couche de base WMS fournie par la NASA.

Paramètres de champsLien vers cette rubrique

En plus des paramètres de champs de formulaires habituels, les champs de formulaires GeoDjango acceptent les paramètres facultatifs suivants.

sridLien vers cette rubrique

Field.sridLien vers cette définition

Il s’agit du code SRID utilisé pour transformer la valeur du champ. Par exemple, si le SRID du composant de carte est différent du SRID utilisé plus généralement par votre application ou base de données, le champ convertit automatiquement les valeurs d’entrée dans ce SRID.

geom_typeLien vers cette rubrique

Field.geom_typeLien vers cette définition

Cet attribut n’a généralement pas besoin d’être défini ou modifié, car il est automatiquement défini en fonction de la classe du champ. Il correspond au nom d’objet géométrique du standard OpenGIS.

max_geom_collectionsLien vers cette rubrique

Field.max_geom_collectionsLien vers cette définition

The maximum number of geometry collections the field accepts before refusing to parse the input and raising a ValidationError. This guards against crashes in the underlying GEOS library when parsing deeply nested GEOMETRYCOLLECTION input. It defaults to 198.

The limit is applied differently depending on the input format: for well-known text (WKT) it bounds the nesting depth, while for well-known binary (WKB and hex-encoded WKB) it bounds the total number of geometry collections (both breadth and depth). As a result, the same value may accept a wide, shallow collection as WKT but reject it as WKB. For GeoJSON, the limit is not applied at all, since GDAL parses that input type instead.

Increase this value (or set to None) only if you must accept legitimately deep geometries, since doing so reduces protection against fatal errors.

Classes de champs de formulairesLien vers cette rubrique

GeometryFieldLien vers cette rubrique

class GeometryFieldLien vers cette définition

PointFieldLien vers cette rubrique

class PointFieldLien vers cette définition

LineStringFieldLien vers cette rubrique

class LineStringFieldLien vers cette définition

PolygonFieldLien vers cette rubrique

class PolygonFieldLien vers cette définition

MultiPointFieldLien vers cette rubrique

class MultiPointFieldLien vers cette définition

MultiLineStringFieldLien vers cette rubrique

class MultiLineStringFieldLien vers cette définition

MultiPolygonFieldLien vers cette rubrique

class MultiPolygonFieldLien vers cette définition

GeometryCollectionFieldLien vers cette rubrique

class GeometryCollectionFieldLien vers cette définition

Composants de formulairesLien vers cette rubrique

Les composants de formulaires GeoDjango permettent d’afficher et de modifier des données géographiques visuellement sur une carte. Notez qu’aucun des composants actuellement disponibles ne prend en charge les objets géométriques 3D, ce qui fait que les champs géométriques se rabattent sur un composant Textarea s’ils ont affaire à de tels objets.

Attributs de composantsLien vers cette rubrique

Les composants GeoDjango sont basés sur les gabarits, ce qui fait que leurs attributs sont majoritairement différents des autres attributs de composants Django.

BaseGeometryWidget.base_layerLien vers cette définition

Une chaîne indiquant l’identifiant de la couche cartographique de base par défaut à utiliser par le composant de carte JavaScript correspondant. Elle est transmise dans les options du composant au moment du rendu, permettant à MapWidget de déterminer quel fournisseur de tuiles de carte ou de couche de base à initialiser (vaut None par défaut).

BaseGeometryWidget.geom_typeLien vers cette définition

Le type de géométrie OpenGIS, généralement défini par le champ de formulaire.

BaseGeometryWidget.map_sridLien vers cette définition

Code SRID utilisé par la carte (la valeur par défaut est 4326).

BaseGeometryWidget.display_rawLien vers cette définition

Valeur booléenne indiquant si une boîte de saisie de texte affichant la représentation sérialisée de l’objet géométrique en cours est visible, principalement à des fins de débogage (la valeur par défaut est False).

BaseGeometryWidget.supports_3dLien vers cette définition

Indique si le composant prend en charge l’édition de données 3D (la valeur par défaut est False).

BaseGeometryWidget.template_nameLien vers cette définition

Le gabarit utilisé pour produire le composant de carte.

Vous pouvez transmettre des attributs de composants de la même façon que pour tout autre composant Django. Par exemple :

Code
from django.contrib.gis import forms


class MyGeoForm(forms.Form):
    point = forms.PointField(widget=forms.OSMWidget(attrs={"display_raw": True}))

Classes de composantsLien vers cette rubrique

BaseGeometryWidget

class BaseGeometryWidgetLien vers cette définition

Il s’agit d’un composant de base abstrait contenant la logique nécessaire aux sous-classes. Il n’est pas possible d’utiliser directement ce composant pour un champ géométrique. Notez que la production de composants GeoDjango est basée sur un nom de couche de base, identifié par l’attribut de classe base_layer.

OpenLayersWidget

class OpenLayersWidgetLien vers cette définition

Il s’agit du composant par défaut utilisé par tous les champs de formulaires GeoDjango. Ses attributs sont :

base_layerLien vers cette définition

nasaWorldview

template_nameLien vers cette définition

gis/openlayers.html.

map_sridLien vers cette définition

3857

OpenLayersWidget et OSMWidget incluent les fichiers ol.js et ol.css hébergés sur le réseau de diffusion de contenu cdn.jsdelivr.net. Ces fichiers peuvent être surchargés en créant une sous-classe du composant et en définissant les propriétés js et css de la classe Media interne (voir Fichiers annexes définis statiquement).

OSMWidget

class OSMWidgetLien vers cette définition

Ce composant spécialise OpenLayersWidget en utilisant une couche de base OpenStreetMap pour afficher les objets géographiques. Ses attributs sont :

base_layerLien vers cette définition

osm

default_latLien vers cette définition
default_lonLien vers cette définition

Les latitude et longitude du centre sont respectivement 47 et 5 par défaut, ce qui correspond à un emplacement à l’est de la France.

default_zoomLien vers cette définition

Le zoom de carte par défaut est 12.

La note OpenLayersWidget au sujet des fichiers statiques externes est aussi valable dans ce cas. Voir aussi cette réponse de FAQ au sujet de l’accès https aux tuiles de cartes.

Personnalisation de la couche de base utilisée dans les composants basés sur OpenLayersLien vers cette rubrique

Pour personnaliser la couche de base affichée dans les composants géométriques basés sur OpenLayers, définissez un nouveau constructeur de couche dans un fichier JavaScript personnalisé. Par exemple :

chemin-vers-fichier.js
JavaScript
 MapWidget.layerBuilder.custom_layer_name = function () {
     // Return an OpenLayers layer instance.
     return new ol.layer.Tile({source: new ol.source.<ChosenSource>()});
 };

Puis, créez une sous-classe du composant géométrique standard et définissez l’attribut base_layer:

Code
from django.contrib.gis.forms.widgets import OpenLayersWidget


class YourCustomWidget(OpenLayersWidget):
    base_layer = "custom_layer_name"

    class Media:
        js = ["path-to-file.js"]