将 KML 文件添加到 leaflet-draw drawnItems

Adding KML file to leaflet-draw drawnItems

我正在尝试将 KML 文件导入到传单中,并使其可编辑以用于传单绘制。我正在使用 leaflet-omnivore 导入 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());

但是当我检查 omnivore kml 对象时,我可以看到 _layers 包含对象和坐标。

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

但是执行getLayers方法时,layers数组显示为空

有什么建议吗?

请注意Leaflet omnivore插件提供异步方法,因为它必须先下载文件才能解析文件并创建传单层。

JavaScript中关于异步任务的详细介绍,请参考:How do I return the response from an asynchronous call?

这就是为什么当您尝试立即阅读时您的图层组看起来是空的。

如果您只需要在数据正确下载并转换为 Leaflet 图层后执行某些操作,请使用 .on("ready", fn) 语法,as explained in the plugin README.

至于将生成的层添加到特征组中(供以后与 Leaflet.draw 插件一起使用),请注意,您可以直接将特征组提供为 3rd argument of omnivore.kml()