使用Omnivore加载CSV转GeoJSON并添加至图层失败求助
问题原因及解决方案
嘿,我来帮你拆解下为啥这段代码没生效~
核心问题:异步加载的特性
omnivore.csv()是异步操作——它不会立刻返回解析好的GeoJSON数据,而是先返回一个空的Leaflet图层对象,之后在后台悄悄完成CSV文件的加载和解析工作。你直接把这个还没填充数据的图层对象x传给geojsonLayer.addData(),自然看不到任何内容,因为addData()需要的是标准的GeoJSON格式对象,不是Leaflet图层实例。
两种正确的解决方式
方式一:直接使用omnivore返回的图层
这是最省心的做法,omnivore已经帮你把解析后的数据封装成图层了,直接添加到地图即可:
var locations = 'locations.csv'; // 直接把omnivore创建的图层添加到地图 omnivore.csv(locations).addTo(map);
方式二:将解析后的数据加入自定义图层
如果你确实需要把数据放到自己创建的geojsonLayer里,就得利用omnivore的回调函数,等异步加载完成后再获取GeoJSON数据:
var locations = 'locations.csv'; var geojsonLayer = L.geoJson().addTo(map); // 第三个参数是加载完成后的回调,拿到解析好的GeoJSON数据再添加 omnivore.csv(locations, null, function(geojsonData) { geojsonLayer.addData(geojsonData); });
这里第二个参数是可选的解析配置项,不需要的话传null就好。回调函数里的geojsonData就是真正解析完成的GeoJSON对象,这时候调用addData()就能正常显示数据了。
内容的提问来源于stack exchange,提问作者PARTEEK KANSAL
相关产品推荐
相关产品推荐

