2016-07-26 66 views
0

我試圖將KML文件導入單張並使其可以編輯爲單張繪圖。我正在使用leaflet-omnivore導入KML。將KML文件添加到單張繪製的繪製項目

<script src='https://api.mapbox.com/mapbox.js/plugins/leaflet-omnivore/v0.2.0/leaflet-omnivore.min.js'></script> 
var kmlFile = omnivore.kml('Point.kml') 

如果我添加了kmlFile映射它完美,而是爲了使形狀可編輯我需要將圖層添加到drawnItems

var drawnItems = new L.FeatureGroup(); 
omnivore.kml('Point.kml').addTo(drawnItems); 

不過,我得到一個錯誤信息:

TypeError: i.editing is undefined.

當我嘗試訪問圖層座標來自己創建對象並將它們添加到drawnItems時,我似乎無法這樣做,因爲我無法找到訪問對象座標的方法。

當我嘗試訪問層出現空洞

console.dir(omnivore.kml('Point.kml').getLayers()); 

但是,當我檢查雜食動物KML對象,我可以看到_layers包含的對象和座標。

console.dir(omnivore.kml('Point.kml')); 

但是,執行getLayers方法時,layers數組顯示爲空。

有什麼建議嗎?

回答

1

請注意,Leaflet omnivore插件提供了異步方法,因爲它必須下載文件才能解析它們並創建Leaflet圖層。

有關JavaScript的異步任務的詳細信息,請參閱:How do I return the response from an asynchronous call?

這就是爲什麼你的圖層組看上去是空的,當你試着讀它的時候了。

如果只有在數據正確下載並轉換爲Leaflet圖層後才需要執行某些操作,請使用.on("ready", fn)語法as explained in the plugin README

至於將產生的圖層添加到要素組(以備稍後與Leaflet.draw插件一起使用),請注意,您可以直接將您的要素組提供爲3rd argumentomnivore.kml()