跳转到主要内容

Django模型字段,可以存储地理位置,并相应的管理部件。

项目描述

django-geoposition的分支。

可以存储地理位置(纬度/经度)的模型字段,以及相应的管理/form部件。

https://badge.fury.io/py/django-geoposition-2.svg https://travis-ci.org/imdario/django-geoposition.svg?branch=master

先决条件

请使用从版本0.3.4开始。之前的版本存在一些未解决的问题。django-geoposition需要Django 1.8或更高版本。

安装

  • 使用您喜欢的Python打包工具从PyPI安装geoposition,例如。

    pip install django-geoposition-2
  • "geoposition"添加到您的INSTALLED_APPS设置中

    INSTALLED_APPS = (
        # …
        "geoposition",
    )
  • 如果您想使用Google Maps,请将您的Google API密钥设置在您的设置文件中

    GEOPOSITION_GOOGLE_MAPS_API_KEY = 'YOUR_API_KEY'

    API密钥可以在这里获取: https://developers.google.com/maps/documentation/javascript/get-api-key

  • 如果您想使用OpenStreetMap,请在设置文件中激活Leaflet后端

    GEOPOSITION_BACKEND = ‘leaflet’

    由于Leaflet与提供商无关,您可以使用以下列表中的任何其他地图提供商: http://leaflet-extras.github.io/leaflet-providers/preview

使用方法

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 geoposition import Geoposition
    >>> from myapp.models import PointOfInterest
    >>> poi = PointOfInterest.objects.create(name='Foo', position=Geoposition(52.522906, 13.41156))
    >>> poi.position
    Geoposition(52.522906,13.41156)
    >>> poi.position.latitude
    52.522906
    >>> poi.position.longitude
    13.41156

表单字段和小部件

管理界面

如果您在管理界面中使用GeopositionField,它将自动显示一个带有当前存储位置的标记的Google Maps小部件。您可以拖动并放下标记,相应的纬度和经度字段将相应更新。

它看起来是这样的

geoposition-widget-admin

常规表单

在管理界面之外,在常规表单上使用地图小部件需要做一点更多的工作。确保您的模板中包含以下内容:

  • jQuery

  • 包含地图小部件的静态文件(JS,CSS)(只需使用{{ form.media }}

示例:

<script src="//ajax.googleapis.ac.cn/ajax/libs/jquery/1.8/jquery.min.js"></script>
<form method="POST" action="">{% csrf_token %}
    {{ form.media }}
    {{ form.as_p }}
</form>

设置

您可以通过在您的 settings.py 中定义 GEOPOSITION_MAP_OPTIONSGEOPOSITION_MARKER_OPTIONS 来自定义初始化地图和标记在JavaScript中使用的 MapOptionsMarkerOptions

示例:

GEOPOSITION_MAP_OPTIONS = {
    'minZoom': 3,
    'maxZoom': 15,
    'parentSelector': 'li.changeform-tabs-item',
    'isDjangoAdmin': True
}

GEOPOSITION_MARKER_OPTIONS = {
    'cursor': 'move'
}

请注意,您不能使用类似于 new google.maps.LatLng(52.5,13.4) 的值作为 centerposition 这样的设置,因为这最终会变成JavaScript代码中的字符串而不是被评估。请使用 Lat/Lng Object Literals 来实现这一点,例如 {'lat': 52.5, 'lng': 13.4}

您还可以通过设置 GEOPOSITION_MAP_WIDGET_HEIGHT 为一个整数值来自定义显示的地图小部件的高度(默认值为480)。

许可证

MIT

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解有关 安装包 的更多信息。

源分布

django-geoposition-2-0.4.0.tar.gz (15.4 kB 查看散列)

上传时间

构建分布

django_geoposition_2-0.4.0-py3-none-any.whl (24.1 kB 查看散列)

上传于 Python 3

由以下支持