如何使用geojson从Django正确获取坐标到传单

时间:2019-10-27 11:00:40

标签: django leaflet geojson shapefile geodjango

我将一些Shapefile多多边形加载到Geodjango中,以将它们显示为Leaflet地图上的图层。但是在网站上,没有图层出现,只有地图本身。

几何数据按如下方式存储在Geodjango数据库中:

from django.contrib.gis.db import models

class wgo(models.Model):
    (some more variables)
    poly = models.MultiPolygonField(srid=4326)

我用geojson传递了多面体,并像这样进行序列化:

wcrds = wgo.objects.filter(id=wid)
gridone = serialize('geojson', wcrds.all())

return render(request, 'result.html', {'gridone': gridone})

当我检查页面时,我可以看到geojson数据确实将其发送到html:

var Hlayer = new L.GeoJSON(

    {"type": "FeatureCollection", "crs": {"type": "name", "properties": {"name": "EPSG:4326"}}, "features": [{"type": "Feature", "properties": {"wijkcode": "WK036356", "wijknaam": "Middenmeer", "poly": "SRID=4326;MULTIPOLYGON (((4.93714288723798 52.3576900936898, 4.93742729807085 52.3577390397678,)))", "pk": "909"}, "geometry": null}]} 
    , {
        style: Hstyle
    }
);

var mymap = L.map('mapid').setView([52.3701, 4.8967], 13);

var OpenStreetMap_Mapnik = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
  maxZoom: 19,
  attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(mymap);

(为简便起见,我取出了大部分坐标)。看起来geojson并没有意识到poly变量是带有几何图形的那个。

在示例站点上,我看到geojson坐标周围带有方括号,而在我的站点上则与圆形坐标相反。

我在Geodjango tutorial之后直接通过Geodjango的图层映射导入了shapefile。另外,我使用ogrinfo,ogr2ogr和Python中的GDAL osgeo查看并操纵了此Shapefile,没有任何问题。

有什么想法可以让Geodjango和geojson将正确格式的坐标传递给Leaflet吗?预先谢谢你。

1 个答案:

答案 0 :(得分:0)

我的错误在这里。序列化geojson时,显然应该告诉它哪个变量包含几何。代替

gridone = serialize('geojson', wcrds.all())

做到:

gridone = serialize('geojson', wcrds.all(), geometry_field='poly')

它有效。 Read the docs,正如他们所说的...