GeoDjango Forms API¶
GeoDjango provides some specialized form fields and widgets in order to visually display and edit geolocalized data on a map. By default, they use OpenLayers-powered maps, with a base WMS layer provided by Metacarta.
Field arguments¶
In addition to the regular form field arguments, GeoDjango form fields take the following optional arguments.
Form field classes¶
GeometryField
¶
-
class
GeometryField
[código fonte]¶
PointField
¶
-
class
PointField
[código fonte]¶
LineStringField
¶
-
class
LineStringField
[código fonte]¶
PolygonField
¶
-
class
PolygonField
[código fonte]¶
MultiPointField
¶
-
class
MultiPointField
[código fonte]¶
MultiLineStringField
¶
-
class
MultiLineStringField
[código fonte]¶
MultiPolygonField
¶
-
class
MultiPolygonField
[código fonte]¶
GeometryCollectionField
¶
-
class
GeometryCollectionField
[código fonte]¶
“widgets” de formulários¶
GeoDjango form widgets allow you to display and edit geographic data on a
visual map.
Note that none of the currently available widgets supports 3D geometries, hence
geometry fields will fallback using a simple Textarea
widget for such data.
Atributos de “widget”¶
GeoDjango widgets are template-based, so their attributes are mostly different from other Django widget attributes.
-
BaseGeometryWidget.
geom_type
¶ The OpenGIS geometry type, generally set by the form field.
-
BaseGeometryWidget.
map_height
¶
-
BaseGeometryWidget.
map_width
¶ Height and width of the widget map (default is 400x600).
-
BaseGeometryWidget.
map_srid
¶ SRID code used by the map (default is 4326).
-
BaseGeometryWidget.
display_raw
¶ Boolean value specifying if a textarea input showing the serialized representation of the current geometry is visible, mainly for debugging purposes (default is
False
).
-
BaseGeometryWidget.
supports_3d
¶ Indicates if the widget supports edition of 3D data (default is
False
).
-
BaseGeometryWidget.
template_name
¶ The template used to render the map widget.
You can pass widget attributes in the same manner that for any other Django widget. For example:
from django.contrib.gis import forms
class MyGeoForm(forms.Form):
point = forms.PointField(widget=
forms.OSMWidget(attrs={'map_width': 800, 'map_height': 500}))
Widget classes¶
BaseGeometryWidget
-
class
BaseGeometryWidget
¶ This is an abstract base widget containing the logic needed by subclasses. You cannot directly use this widget for a geometry field. Note that the rendering of GeoDjango widgets is based on a template, identified by the
template_name
class attribute.
OpenLayersWidget
-
class
OpenLayersWidget
¶ This is the default widget used by all GeoDjango form fields.
template_name
isgis/openlayers.html
.OpenLayersWidget
andOSMWidget
use theopenlayers.js
file hosted on theopenlayers.org
website. This works for basic usage during development, but isn’t appropriate for a production deployment asopenlayers.org/api/
has no guaranteed uptime and runs on a slow server. You are therefore advised to subclass these widgets in order to specify your own version of theopenlayers.js
file in thejs
property of the innerMedia
class (see Assets as a static definition). You can host a copy ofopenlayers.js
tailored to your needs on your own server or refer to a copy from a content-delivery network like https://cdnjs.com/. This will also allow you to serve the JavaScript file(s) using thehttps
protocol if needed.
OSMWidget
-
class
OSMWidget
¶ This widget uses an OpenStreetMap base layer (Mapnik) to display geographic objects on.
template_name
isgis/openlayers-osm.html
.The
OpenLayersWidget
note about JavaScript file hosting above also applies here. See also this FAQ answer abouthttps
access to map tiles.