GeoDjango Forms API
GeoDjango предоставляет специализированные поля форм и виджеты для визуального отображения и редактирования геолокализованных данных на карте. По умолчанию они используют карты на основе OpenLayers, с базовым слоем WMS, предоставляемым Metacarta.
Аргументы поля
В дополнение к стандартным аргументам полей форм, поля форм 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, размещённый на веб-сайте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.Примечание о размещении файлов JavaScript, описанное выше для
OpenLayersWidget, также относится и к этому случаю. Также см. этот ответ на часто задаваемый вопрос обhttpsдоступе к тайлам карты.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/1.8/ref/contrib/gis/forms-api/