2016-07-26 93 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()