GeoDjango 表单 API

GeoDjango 提供了一些专门的表单字段和小部件,以便在地图上直观地显示和编辑地理位置数据。默认情况下,它们使用由 OpenLayers 提供支持的地图,以及由 NASA 提供的基本 WMS 图层。

字段参数

除了常规的 表单字段参数 之外,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_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[source]

这是一个抽象基小部件,包含子类所需的逻辑。您不能直接将此小部件用于几何字段。请注意,GeoDjango 小部件的渲染基于模板,由 template_name 类属性标识。

OpenLayersWidget

class OpenLayersWidget[source]

这是所有 GeoDjango 表单字段使用的默认小部件。template_namegis/openlayers.html

OpenLayersWidgetOSMWidget 使用托管在 cdn.jsdelivr.net 内容交付网络上的 ol.js 文件。您可以对这些小部件进行子类化,以便在内部 Media 类的 js 属性中指定您自己的 ol.js 文件版本(请参见 静态定义中的资源)。

OSMWidget

class OSMWidget[source]

此小部件使用 OpenStreetMap 底图来显示地理对象。属性为:

template_name

gis/openlayers-osm.html

default_lat
default_lon

默认中心经纬度分别为475,位于法国东部。

default_zoom

默认地图缩放级别为12

关于上面JavaScript文件托管的OpenLayersWidget说明也适用于此处。另请参见此关于https访问地图瓦片的FAQ解答

返回顶部