2017-02-24 10 views
0

OpenLayersを使用して地図上に機能を作成、表示、編集しています。機能はDjangoにJSONFieldとして保存されます。投稿保存JSONにdjango_pkというキーを追加します。このdjanog_pkを機能から直接取得するにはどうすればよいですか?GeoJSONのキーと値をOpenlayersの機能から読み取る

私はこれを行う必要があります。その機能を編集するときに、私はDjangoでどのような機能を更新するのか知っています。以下

マイJSコード:

<script> 
     var raster = new ol.layer.Tile({ 
     source: new ol.source.OSM() 
     }); 

     var source = new ol.source.Vector({wrapX: false}); 

     var vector = new ol.layer.Vector({ 
     source: source 
     }); 

     var format = new ol.format.GeoJSON(); 

     var select = new ol.interaction.Select({ 
     wrapX: false 
     }); 

     var modify = new ol.interaction.Modify({ 
     features: select.getFeatures() 
     }); 



     var map = new ol.Map({ 
     interactions: ol.interaction.defaults().extend([select, modify]), 
     layers: [raster, vector], 
     target: 'map', 
     view: new ol.View({ 
      center: [-11000000, 4600000], 
      zoom: 4 
     }) 
     }); 

     var features = new ol.source.Vector({ 
      projection: 'EPSG:4326' 
     }); 

     {% for polygon in polygons.0.gates %} 
     console.log(format.readFeature({{ polygon|safe }}).getProperties())) 
     {% endfor %} 

     features.addFeature(format.readFeature({{ polygons.0.protected_area|safe }})); 
     {% for polygon in polygons.0.gates %} 
     features.addFeature(format.readFeature({{ polygon|safe }})); 
     console.log(format.readFeature({{ polygon|safe }})) 
     {% endfor %} 

     var featureOverlay = new ol.layer.Vector({ 
     source: features, 
     style: new ol.style.Style({ 
      fill: new ol.style.Fill({ 
      color: 'rgba(255, 255, 255, 0.2)' 
      }), 
      stroke: new ol.style.Stroke({ 
      color: '#ff78d1', 
      width: 2 
      }), 
      image: new ol.style.Circle({ 
      radius: 6, 
      fill: new ol.style.Fill({ 
       color: '#4ca6b6' 
      }), 
      }) 
     }) 
     }); 
     featureOverlay.setMap(map); 


</script> 

Iこれは試み:

select.on( '選択'、関数(E){ はconsole.log(:それだけジオメトリを返すBuyt e.selected [0] .getProperties()) });

ジャンゴでJSONFieldは次のようになります。

{ 
    "geometry":{ 
    "type":"Polygon", 
    "coordinates":[ 
     [ 
     [ 
      -11156543.033928039, 
      6698655.0485978 
     ], 
     [ 
      -11410925.464061106, 
      5896371.999716589 
     ], 
     [ 
      -9972686.33984723, 
      5084305.011214877 
     ], 
     [ 
      -9512841.177683609, 
      6649735.350495286 
     ], 
     [ 
      -10090093.61529326, 
      6972605.357971871 
     ], 
     [ 
      -11156543.033928039, 
      6698655.0485978 
     ] 
     ] 
    ] 
    }, 
    "type":"Feature", 
    "properties":null, 
    "django_pk":10 
} 

だから私はそれを削除するのot、それを選択し、それを編集するときに機能のdjango_pkを見つける必要があります。

この情報を取得する方法がわからない

答えて

0

[OK]を、私は実際には簡単です。

あなたがにGeoJSON形式の任意のプロパティを読み取ることができます。

select.on('select', function(e) { 
    console.log(e.selected[0].getProperties()) 
}); 

選択ビーイング:

var select = new ol.interaction.Select({ 
     wrapX: false 
     }); 

そして、私のDjangoのコードでは、私はちょうどpost_saveでこれを行う:

@receiver(post_save, sender=ProtectedArea) 
def update_json(sender, instance, created, **kwargs): 
    post_save.disconnect(update_json, sender=ProtectedArea) 
    try: 
     instance.polygone = literal_eval("%s" % instance.geojson_file.read()) 
    except: 
     pass 

    if instance.polygone['properties'] == None: 
     instance.polygone['properties'] = {} 
     instance.polygone['properties']['pk'] = instance.pk 
    else: 
     instance.polygone['properties']['pk'] = instance.pk 
    instance.save() 
    post_save.connect(update_json, sender=ProtectedArea) 
関連する問題