0

我正在尝试将 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 来映射它可以完美地工作,但为了使形状可编辑,我需要将图层添加到 drawItems

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

但是我收到一条错误消息:

类型错误:i.editing 未定义。

当我尝试访问图层坐标以自己创建对象并将它们添加到drawedItems时,我似乎无法这样做,因为我找不到访问对象坐标的方法。

当我尝试访问图层时,它们显示为空

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

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

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

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

有什么建议么?

4

1 回答 1

1

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

关于 JavaScript 中的异步任务的更多详细信息,请参阅:如何从异步调用返回响应?

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

如果您只需要在数据正确下载并转换为 Leaflet 层后才需要执行某些操作,请使用.on("ready", fn)语法,如插件 README 中所述

至于将生成的图层添加到功能组中(以供以后与 Leaflet.draw 插件一起使用),请注意,您可以直接提供您的功能作为omnivore.kml().

于 2016-07-26T16:02:08.870 回答