123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- ===================
- GeoDjango Forms API
- ===================
- .. module:: django.contrib.gis.forms
- :synopsis: 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 `NASA`_.
- .. _OpenLayers: https://openlayers.org/
- .. _NASA: https://www.earthdata.nasa.gov/
- Field arguments
- ===============
- In addition to the regular :ref:`form field arguments <core-field-arguments>`,
- GeoDjango form fields take the following optional arguments.
- ``srid``
- --------
- .. attribute:: Field.srid
- This is the SRID code that the field value should be transformed to. For
- example, if the map widget SRID is different from the SRID more generally
- used by your application or database, the field will automatically convert
- input values into that SRID.
- ``geom_type``
- -------------
- .. attribute:: Field.geom_type
- You generally shouldn't have to set or change that attribute which should
- be set up depending on the field class. It matches the OpenGIS standard
- geometry name.
- Form field classes
- ==================
- ``GeometryField``
- -----------------
- .. class:: GeometryField
- ``PointField``
- --------------
- .. class:: PointField
- ``LineStringField``
- -------------------
- .. class:: LineStringField
- ``PolygonField``
- ----------------
- .. class:: PolygonField
- ``MultiPointField``
- -------------------
- .. class:: MultiPointField
- ``MultiLineStringField``
- ------------------------
- .. class:: MultiLineStringField
- ``MultiPolygonField``
- ---------------------
- .. class:: MultiPolygonField
- ``GeometryCollectionField``
- ---------------------------
- .. class:: GeometryCollectionField
- Form widgets
- ============
- .. module:: django.contrib.gis.forms.widgets
- :synopsis: GeoDjango widgets API.
- 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 ``Textarea`` widget for such data.
- Widget attributes
- -----------------
- GeoDjango widgets are template-based, so their attributes are mostly different
- from other Django widget attributes.
- .. attribute:: BaseGeometryWidget.geom_type
- The OpenGIS geometry type, generally set by the form field.
- .. attribute:: BaseGeometryWidget.map_srid
- SRID code used by the map (default is 4326).
- .. attribute:: 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``).
- .. attribute:: BaseGeometryWidget.supports_3d
- Indicates if the widget supports edition of 3D data (default is ``False``).
- .. attribute:: 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={"display_raw": True}))
- 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 :attr:`template_name` class attribute.
- ``OpenLayersWidget``
- .. class:: OpenLayersWidget
- This is the default widget used by all GeoDjango form fields.
- ``template_name`` is ``gis/openlayers.html``.
- ``OpenLayersWidget`` and :class:`OSMWidget` use the ``ol.js`` file hosted
- on the ``cdn.jsdelivr.net`` content-delivery network. You can subclass
- these widgets in order to specify your own version of the ``ol.js`` file in
- the ``js`` property of the inner ``Media`` class (see
- :ref:`assets-as-a-static-definition`).
- ``OSMWidget``
- .. class:: OSMWidget
- This widget uses an OpenStreetMap base layer to display geographic objects
- on. Attributes are:
- .. attribute:: template_name
- ``gis/openlayers-osm.html``
- .. attribute:: default_lat
- .. attribute:: default_lon
- The default center latitude and longitude are ``47`` and ``5``,
- respectively, which is a location in eastern France.
- .. attribute:: default_zoom
- The default map zoom is ``12``.
- The :class:`OpenLayersWidget` note about JavaScript file hosting above also
- applies here. See also this `FAQ answer`_ about ``https`` access to map
- tiles.
- .. _FAQ answer: https://help.openstreetmap.org/questions/10920/how-to-embed-a-map-in-my-https-site
|