GeoDjango Forms API¶
GeoDjango предоставляет некоторые специализированные поля форм и виджеты для визуального отображения и редактирования геолокализованных данных на карте. По умолчанию они используют карты на основе OpenLayers, с базовым слоем WMS, предоставляемым NASA.
Полевые аргументы¶
Помимо обычных form field arguments, поля формы GeoDjango принимают следующие необязательные аргументы.
srid
¶
-
Field.
srid
¶ Это код SRID, в который должно быть преобразовано значение поля. Например, если SRID виджета карты отличается от SRID, обычно используемого вашим приложением или базой данных, поле будет автоматически преобразовывать вводимые значения в этот SRID.
Виджеты форм¶
Виджеты форм GeoDjango позволяют отображать и редактировать географические данные на визуальной карте. Обратите внимание, что ни один из доступных в настоящее время виджетов не поддерживает 3D-геометрию, поэтому для таких данных в полях геометрии будет использоваться виджет Textarea
.
Атрибуты виджета¶
Виджеты GeoDjango основаны на шаблонах, поэтому их атрибуты в основном отличаются от атрибутов других виджетов Django.
-
BaseGeometryWidget.
geom_type
¶ Тип геометрии OpenGIS, обычно задаваемый полем формы.
-
BaseGeometryWidget.
map_height
¶
-
BaseGeometryWidget.
map_width
¶ Высота и ширина карты виджета (по умолчанию 400x600).
Не рекомендуется, начиная с версии 4.2: Атрибуты
map_height
иmap_width
устарели, вместо них используйте CSS для определения размера виджетов карты.
-
BaseGeometryWidget.
map_srid
¶ Код SRID, используемый картой (по умолчанию 4326).
-
BaseGeometryWidget.
display_raw
¶ Булево значение, определяющее, виден ли текстовый блок, показывающий сериализованное представление текущей геометрии, в основном для целей отладки (по умолчанию
False
).
-
BaseGeometryWidget.
supports_3d
¶ Указывает, поддерживает ли виджет редактирование 3D-данных (по умолчанию
False
).
-
BaseGeometryWidget.
template_name
¶ Шаблон, используемый для отображения виджета карты.
Вы можете передавать атрибуты виджета таким же образом, как и для любого другого виджета Django. Например:
from django.contrib.gis import forms
class MyGeoForm(forms.Form):
point = forms.PointField(widget=
forms.OSMWidget(attrs={'display_raw': True}))
Классы виджетов¶
BaseGeometryWidget
-
class
BaseGeometryWidget
¶ Это абстрактный базовый виджет, содержащий логику, необходимую подклассам. Вы не можете напрямую использовать этот виджет для геометрического поля. Обратите внимание, что рендеринг виджетов GeoDjango основан на шаблоне, определяемом атрибутом класса
template_name
.
OpenLayersWidget
-
class
OpenLayersWidget
¶ Это виджет по умолчанию, используемый всеми полями формы GeoDjango.
template_name
- этоgis/openlayers.html
.OpenLayersWidget
иOSMWidget
используютopenlayers.js
файл, размещенный вcdnjs.cloudflare.com
сети доставки контента. Вы можете подклассифицировать эти виджеты, чтобы указать свою собственную версиюOpenLayers.js
файла в свойствеjs
внутреннегоMedia
класса (см. Активы как статическое определение).
OSMWidget
-
class
OSMWidget
¶ Этот виджет использует базовый слой OpenStreetMap для отображения географических объектов. Атрибутами являются:
-
template_name
¶ gis/openlayers-osm.html
-
default_lat
¶
-
default_lon
¶ По умолчанию широта и долгота центра равны
47
и5
, соответственно, что является местоположением в восточной Франции.
-
default_zoom
¶ По умолчанию масштаб карты составляет
12
.
Примечание
OpenLayersWidget
о размещении файлов JavaScript выше также применимо здесь. См. также здесь FAQ answer оhttps
доступе к плиткам карты.-