GeoDjango Forms API
GeoDjango предоставляет специализированные поля и виджеты форм для визуального отображения и редактирования геолокализованных данных на карте. По умолчанию они используют карты на основе OpenLayers, с базовым слоем WMS, предоставленным Metacarta.
Аргументы поля
Помимо стандартных аргументов полей формы, поля форм GeoDjango принимают следующие необязательные аргументы.
srid
-
Field.srid -
Это код SRID, к которому должно быть преобразовано значение поля. Например, если SRID виджета карты отличается от SRID, используемого вашей приложением или базой данных, поле автоматически преобразует входные значения в этот SRID.
geom_type
-
Field.geom_type -
Как правило, вам не нужно устанавливать или изменять этот атрибут, который должен быть настроен в зависимости от класса поля. Он соответствует стандартному имени геометрии OpenGIS.
Классы полей формы
GeometryField
-
class GeometryField[source]
PointField
-
class PointField[source]
LineStringField
-
class LineStringField[source]
PolygonField
-
class PolygonField[source]
MultiPointField
-
class MultiPointField[source]
MultiLineStringField
-
class MultiLineStringField[source]
MultiPolygonField
-
class MultiPolygonField[source]
GeometryCollectionField
-
class GeometryCollectionField[source]
Виджеты формы
Виджеты форм 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, размещенный на сайтеopenlayers.org. Это работает для базового использования во время разработки, но не подходит для развертывания в рабочей среде, так как уopenlayers.org/api/нет гарантированной доступности и медленный сервер. Поэтому рекомендуется подклассировать эти виджеты, чтобы указать собственную версию файлаopenlayers.jsв свойствеjsвнутреннего классаMedia(см. Активы как статическое определение). Вы можете разместить копиюopenlayers.jsнастроенную под ваши нужды на вашем собственном сервере или обратиться к копии с сети доставки контента, например, https://cdnjs.com/. Это также позволит вам обслуживать файлы JavaScript с использованием протоколаhttpsпри необходимости.
OSMWidget
-
class OSMWidget -
Этот виджет использует базовый слой OpenStreetMap (Mapnik) для отображения географических объектов.
template_nameпо умолчаниюgis/openlayers-osm.html.Примечание
OpenLayersWidgetотносительно размещения файла JavaScript выше также относится и к этому случаю. Также см. этот ответ на часто задаваемый вопрос о доступе к тайлам картыhttps.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.10/ref/contrib/gis/forms-api/