echarts如何下载geojson数据?这篇文章直接告诉你怎么获取最新的地图文件,解决地图显示不全或加载失败的问题。别再到处找那些过时的json文件了,跟着做,五分钟搞定。
做前端可视化,最烦的就是地图配不好。昨天有个哥们问我,echarts如何下载geojson数据,说他的地图一片空白。我一看代码,好家伙,用的还是三年前的阿里DataV的旧接口,那肯定不行啊。现在百度地图、高德地图的数据更新频率很快,旧的json文件根本对不上现在的行政区划。
先说核心问题,echarts官方其实没有直接提供“下载按钮”。你要自己去GitHub或者专门的地图数据站找。我推荐大家去阿里云的DataV.GeoAtlas,虽然它叫DataV,但里面的geojson资源是最全的。搜索的时候,直接搜“中国”或者具体的省份,比如“广东省”。
这里有个大坑,很多人下载下来直接扔进项目里,结果报错。为什么?因为格式不对。有些文件是json,有些是geojson,虽然后缀一样,但内部结构差之千里。echarts需要的是标准的GeoJSON格式,必须包含features数组,每个feature里要有geometry和properties。properties里必须有name字段,这是echarts匹配地图的关键。
我之前踩过这个坑,下载了一个文件,发现地图只有轮廓,没有内部细分。查了半天发现,那个文件是简化版,把乡镇级别的细节都去掉了。如果你需要做精细到街道的地图,必须找完整版的geojson。这时候你就得去GitHub上搜“echarts geojson”,有很多大神维护的仓库,比如echarts-map这个库,里面按省份分类得很清楚。
具体操作步骤:第一步,打开阿里云GeoAtlas,选择你要的省份,点击“查看源码”或者“下载JSON”。第二步,用VS Code打开这个文件,Ctrl+F搜索“name”。如果你发现name的值是“广东省”,那没问题。如果你发现name是“440000”这种代码,那赶紧换文件,echerts不认代码,只认名字。
第三步,在代码里引入。别用require,直接import或者script标签引入。我一般喜欢把json文件放在static或者public目录下,然后通过fetch去请求,这样动态加载比较灵活。比如:
fetch('/data/guangdong.json').then(res => res.json()).then(geoJson => {
myChart.setOption({
geo: {
map: 'guangdong',
roam: true,
label: { show: true }
}
});
});
注意,这里有个细节,map的值必须和json文件里properties.name完全一致,包括大小写和空格。哪怕多一个空格,地图都显示不出来。我上次就是因为“广东 ”后面多了一个空格,调试了两个小时,差点把电脑砸了。
还有,现在很多人问echarts如何下载geojson数据,其实不仅仅是下载,还要处理坐标系。如果你发现地图位置偏了,或者变形了,那可能是坐标系的问题。国内一般用GCJ-02或者BD-09,而标准的geojson是WGS-84。如果你做的地图涉及具体点位,一定要做坐标转换。不然你的散点图会飘到海里去。
最后,提醒一下,别用那些所谓的“一键生成工具”,很多都是骗流量的,生成的文件全是乱码或者损坏。一定要手动检查文件结构。实在搞不定,就去GitHub上找现成的,虽然可能不是最新,但能用。毕竟,稳定第一。
总之,echarts如何下载geojson数据,不是点一个按钮那么简单。你要懂结构,懂匹配,懂坐标系。希望这篇干货能帮你省下 debugging 的时间。别偷懒,多检查几遍文件内容,比什么都强。