API форм GeoDjango
GeoDjango предоставляет специализированные поля форм и виджеты для визуального отображения и редактирования геолокационных данных на карте. По умолчанию они используют карты на основе OpenLayers с базовым слоем WMS, предоставляемым NASA.
Аргументы полей
В дополнение к обычным аргументам полей форм, поля форм GeoDjango принимают следующие необязательные аргументы.
srid
-
Field.srid -
Это код SRID, к которому должно быть преобразовано значение поля. Например, если SRID виджета карты отличается от SRID, используемого в вашей приложении или базе данных, поле автоматически преобразует входные значения в этот SRID.
geom_type
-
Field.geom_type -
Как правило, вам не нужно устанавливать или изменять этот атрибут, который должен быть настроен в зависимости от класса поля. Он соответствует стандартному имени геометрии OpenGIS.
Классы полей форм
GeometryField
-
class GeometryField
PointField
-
class PointField
LineStringField
-
class LineStringField
PolygonField
-
class PolygonField
MultiPointField
-
class MultiPointField
MultiLineStringField
-
class MultiLineStringField
MultiPolygonField
-
class MultiPolygonField
GeometryCollectionField
-
class GeometryCollectionField
Виджеты форм
Виджеты форм GeoDjango позволяют отображать и редактировать географические данные на визуальной карте. Обратите внимание, что ни один из доступных виджетов не поддерживает 3D-геометрии, поэтому поля геометрии будут использовать простой виджет Textarea для таких данных.
Атрибуты виджетов
Виджеты GeoDjango основаны на шаблонах, поэтому их атрибуты в основном отличаются от атрибутов других виджетов Django.
-
BaseGeometryWidget.geom_type -
Тип геометрии OpenGIS, как правило, задается полем формы.
-
BaseGeometryWidget.map_height
-
BaseGeometryWidget.map_width -
Высота и ширина карты виджета (по умолчанию 400x600).
-
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={'map_width': 800, 'map_height': 500}))
Классы виджетов
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(см. Ассеты как статическое определение).Изменено в Django 1.11:Старые версии используют
OpenLayers.jsизopenlayers.org, что непригодно для использования в производстве, так как не гарантирует бесперебойной работы и работает на медленном сервере.Также виджет теперь использует OpenLayers 3 вместо OpenLayers 2.
OSMWidget
-
class OSMWidget -
Этот виджет использует базовый слой OpenStreetMap для отображения географических объектов. Атрибуты:
-
template_name -
gis/openlayers-osm.html
-
default_lat
-
default_lon -
По умолчанию центральная широта и долгота —
47и5соответственно, что является местоположением во Франции.
Примечание о размещении файлов JavaScript, приведенное выше для
OpenLayersWidget, также относится сюда. Также см. этот ответ FAQ об доступеhttpsк плиткам карты.Изменено в Django 1.11:OpenLayers 2.x был исключен в пользу OpenLayers 3. Если вы расширяете шаблон
gis/openlayers-osm.html, проверьте свой настраиваемый шаблон. -
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.11/ref/contrib/gis/forms-api/