Django模型字段,它可以保存一个地理位置,以及相应的管理小部件。
django-geoposition的Python项目详细描述
可以保存地理位置(纬度/经度)和相应管理/表单小部件的模型字段。
先决条件
从0.3版开始,django geopposition需要django 1.8或更高版本。 如果您需要支持1.8之前的django版本,请使用django geopposition 0.2.3。 对于1.4.10之前的django版本,请使用django geopposition 0.1.5。
安装
使用您喜爱的python打包工具安装geoposition 来自PyPI,例如:
pip install django-geoposition
将"geoposition"添加到INSTALLED_APPS设置:
INSTALLED_APPS = ( # … "geoposition", )
在设置文件中设置google api密钥:
GEOPOSITION_GOOGLE_MAPS_API_KEY = 'YOUR_API_KEY'
api密钥可以在这里获得:https://developers.google.com/maps/documentation/javascript/get-api-key
如果您仍在使用django<;1.3,建议您安装 django-staticfiles用于静态文件服务。
用法
django-geoposition附带了一个模型字段,使其非常漂亮 很容易将地理位置字段添加到模型中。利用 信息:
在您的myapp/models.py:
from django.db import models from geoposition.fields import GeopositionField class PointOfInterest(models.Model): name = models.CharField(max_length=100) position = GeopositionField()
这将启用以下简单的API:
>>> from myapp.models import PointOfInterest >>> poi = PointOfInterest.objects.get(id=1) >>> poi.position Geoposition(52.522906,13.41156) >>> poi.position.latitude 52.522906 >>> poi.position.longitude 13.41156
表单域和小部件
管理
如果在管理中使用GeopositionField,它将自动 在当前存储的 位置。您可以使用鼠标和 相应的纬度和经度字段将被更新 因此。
看起来是这样的:
正则形式
在管理之外的常规表单上使用map小部件需要 再做一点工作。在模板中确保
- jQuery包括在内
- map小部件的静态文件(js,css)包括在内(只需使用 {{ form.media }})
示例:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script> <form method="POST" action="">{% csrf_token %} {{ form.media }} {{ form.as_p }} </form>
设置
您可以自定义用于初始化 通过定义GEOPOSITION_MAP_OPTIONS或 GEOPOSITION_MARKER_OPTIONS在您的settings.py中。
示例:
GEOPOSITION_MAP_OPTIONS = { 'minZoom': 3, 'maxZoom': 15, } GEOPOSITION_MARKER_OPTIONS = { 'cursor': 'move' }
请注意,不能使用类似^{tt11}的值$ 对于像center或position这样的设置,因为这最终会成为 javascript代码中的字符串,不进行计算。请使用 Lat/Lng Object Literals为此目的,例如{'lat': 52.5, 'lng': 13.4}。
还可以通过设置自定义显示的地图小部件的高度 GEOPOSITION_MAP_WIDGET_HEIGHT为整数值(默认值为480)。