gpt4 book ai didi

django - 用 Django 返回 GeoJson

转载 作者:行者123 更新时间:2023-12-04 22:32:35 25 4
gpt4 key购买 nike

我正在尝试返回一组坐标以在 map 上绘制点/矩形。目前我正在使用 Polymaps,但我正在考虑转向 openlayers,它为像我这样的 javascript 新手提供了更清晰的示例。

我想为每个坐标发送一个坐标列表加上一个特定的值。而且我也在寻找在同一个 json 中发送许多坐标列表,每个列表都有另一个特定的值(时间),所以我可以每次在 map 上表示不同的点/多边形。

我已经能够用 json 返回 3 个分隔的列表,一个用于纬度,一个用于经度,另一个带有每个点的值。但是 openlayers 和 Polymaps 在他们的示例中都使用 GeoJson,这看起来是更明智的选择。

问题是,我不知道如何用 Django 生成 geoJson 响应。我找到了 django-geojson ,但没有一个明确的例子来做我想做的事,当然也不要在不同的时间返回很多集。

有什么帮助吗?我也可以接受如何只用 Json 来做到这一点。

我现在所拥有的:

#views.py

from django.shortcuts import render_to_response
from django.template import RequestContext
import myproject.databasework as databaseWork
import json

def values(request):
gpsTime = 1043366400
pls = databaseWork.getValues(gpsTime)
latitudes = []
longitudes = []
values = []

for row in pls:
pointId = row[0]
value = row[2]
lat, lon = databaseWork.getCoords(pointId)
latitudes.append(lat)
longitudes.append(lon)
values.append(value)

jsonObject = {'latitudeList': json.dumps(latitudes),
'longitudeList': json.dumps(longitudes),
'valuesList': json.dumps(values)}
return render_to_response('mytemplate.html', jsonObject, context_instance=RequestContext(request))

这是 html 的一部分:
<script type="text/javascript">
var po = org.polymaps;
var map = po.map()
.container(document.getElementById("map").appendChild(po.svg("svg")))
.add(po.interact())
.center({lat: 46, lon: 10})
.zoom(4);

var svg = document.querySelector("svg.map");
svg.setAttribute("width", "100%");
svg.setAttribute("height", "100%");
map.resize();

map.add(po.image()
.url(po.url("http://{S}tile.cloudmade.com"
+ "/1a1b06b230af4efdbb989ea99e9841af" // http://cloudmade.com/register
+ "/20760/256/{Z}/{X}/{Y}.png")
.hosts(["a.", "b.", "c.", ""])));



// Get values from django response
var latitude = "{{ latitudeList }}";
var longitude = "{{ longitudeList }}";
var vpl = "{{ vplList }}";

// Draw circles
// Don't know how to do it with Polymaps yet. Example at http://polymaps.org/ex/cluster.html

</script>

最佳答案

首先看看 the geojson spec 。这应该很清楚如何设计数据结构。

但是你的方法有几个问题,基本上是编码错误。看看你的 render_to_response 方法。您传递变量 jsonObject ,它是一个字典。在您的模板中,您尝试分配变量 latitudeList ,它实际上是 keyjsonObject

这是我如何创建一个 geojson 对象来显示一些带有传单的点几何图形的示例(值得为您检查的库)。

lati = Vsoil.objects.values_list('latitude',flat=True)
longi = Vsoil.objects.values_list('longitude',flat=True)
ids = Vsoil.objects.values_list('id',flat=True)

geo_json = [ {"type": "Feature",
"properties": {
"id": ident,
"popupContent": "id=%s" % (ident,)
},
"geometry": {
"type": "Point",
"coordinates": [lon,lat] }}
for ident,lon,lat in zip(ids,longi,lati) ]


return render_to_response('map.html',
{'geo_json': geo_json},
context_instance=RequestContext(request))

在您的模板中,您可以简单地将您的对象分配给这样的 js 变量
var geojsonFeature = {{ geo_json|safe }}

关于django - 用 Django 返回 GeoJson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16695859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com