GeoDjango Forms API

GeoDjango предоставляет некоторые специализированные поля форм и виджеты для визуального отображения и редактирования геолокализованных данных на карте. По умолчанию они используют карты на основе OpenLayers, с базовым слоем WMS, предоставляемым NASA.

Полевые аргументы

Помимо обычных form field arguments, поля формы 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).

Не рекомендуется, начиная с версии 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 используют файл ol.js, размещенный в сети доставки контента cdn.jsdelivr.net. Вы можете подклассифицировать эти виджеты, чтобы указать собственную версию файла ol.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 доступе к плиткам карты.

Вернуться на верх