2017-09-29 8 views
0

リーフレットとPostgresql/PostGISを使用してDjangoアプリケーションを開発しています。 GeoJSON Feature Collectionオブジェクトを送信しているマップにMultiLineStringレイヤーを追加しようとすると、無効なオブジェクトエラーが発生します。最初に私のviews.pyで :Djangoシリアライザを使用したリーフレットマップにgeoJSONデータを追加するときに無効なオブジェクト

from geonode.geoloc.models import Transport 
from django.template import RequestContext 
from django.core.serializers import serialize 

class LookupView(FormView): 
    template_name = 'geoloc/lookupresults.html' 
    form_class = LookupForm 

    def get(self, request): 
     return render_to_response('geoloc/lookup.html',  RequestContext(request)) 

def form_valid(self, form): 
    # Get data 
    latitude = form.cleaned_data['latitude'] 
    longitude = form.cleaned_data['longitude'] 

    # Look up roads 
    roads = Transport.objects.all()[0:5] 

    roads_json = serialize('geojson', roads, 
       fields=('geom',)) 

    # Render the template 
    return self.render_to_response({ 
           'roads_json': roads_json 
          }, content_type = 'json') 

私のテンプレート形式が有効である:私はhttp://geojsonlint.com/で(Djangoのシリアライザが送信する)にGeoJSONオブジェクトをテストしたとき、私は、オブジェクトこと

{% extends "geoloc/geoloc_base.html" %} 
{% block content %} 
{% load leaflet_tags %} 
{% leaflet_js %} 
{% leaflet_css %} 

<div id="mapid" style="width: 600px; height: 400px;"></div> 
<script> 
    var geojsonFeature = "{{ roads_json }}"; 
    var mymap = L.map('mapid').setView([51.505, -0.09], 13); 
    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { 
    attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'}).addTo(mymap); 
    var myroads = L.geoJSON().addTo(mymap); 
    myroads.addData(geojsonFeature); 


</script> 
{% endblock %} 

実現

"crs": { 
"type": "name", 
"properties": { 
    "name": "EPSG:4326" 
} 

私が読んで、「古いスタイルのCRSのメンバーとはお勧めしません」ですので、次の行では無効です。上記の行を抽出しないようにシリアライザの出力をカスタマイズするか、それを成功させるための効率的な方法がありますか?

答えて

0

Iは、以下の手順に従って、上記の問題を解決:

  • を私は方法
  • )(POPを使用dicionaryから 'CRS' キーを除去Python辞書
  • 内にGeoJSONオブジェクトを変換

    :私はviews.py内にGeoJSONオブジェクト再び

修正されたコードに辞書を変換しました210

roads = Transport.objects.all()[0:5] 

roads_json = serialize('geojson', roads, 
      fields=('geom',)) 

new_roads_json = json.loads(roads_json) 
new_roads_json.pop('crs', None) 
new_roads_json = json.dumps(new_roads_json) 

# Render the template 
return self.render_to_response({ 
        'new_roads_json': new_roads_json 
         }, content_type = 'json') 
関連する問題