GeoDjango 表单 API — Django 文档

来自菜鸟教程
Django/docs/3.1.x/ref/contrib/gis/forms-api
跳转至:导航、​搜索

GeoDjango 表单 API

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

字段参数

除了常规的 表单字段参数 之外,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
布尔值,指定显示当前几何的序列化表示的 textarea 输入是否可见,主要用于调试目的(默认为 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_namegis/openlayers.html

OpenLayersWidgetOSMWidget 使用托管在 cdnjs.cloudflare.com 内容交付网络上的 openlayers.js 文件。 您可以对这些小部件进行子类化,以便在内部 Media 类的 js 属性中指定您自己的 OpenLayers.js 文件版本(请参阅 Assets 作为静态定义)。

OSMWidget

class OSMWidget

此小部件使用 OpenStreetMap 基础层来显示地理对象。 属性是:

template_name

gis/openlayers-osm.html

default_lat
default_lon

默认的中心纬度和经度分别是475,这是法国东部的一个位置。

default_zoom

默认地图缩放为 12

上面关于 JavaScript 文件托管的 OpenLayersWidget 注释也适用于此。 另请参阅此 常见问题解答 关于 https 对地图图块的访问。