因一位EasyShu用户很热心地发问,同时提供了一个很通用性的场景,使用外部的其他地图文件,如何制作一个适合EasyShu使用的自定义地图数据包。
在知识星球上尝试简单回复了一下此用户,发现文字的力量还是很苍白,想表达一件事情不太容易,所以产生了写一篇详细一点保姆级文章的想法。
当我们手里从其他软件里得到一份地图数据,通常会是一些通用性较强的shp格式的地图文件。需要将它转换为其他软件使用的格式,例如EasyShu图表插件,使用goejson格式作为地图底图绘制地图可视化图表。
当然还可以有其他的软件使用如PowerBI等,可能会用到svg/topojson等格式。
地图文件格式转换,比较简单好用的工具是mapshaper这个工具,安装也很方便,就是下一步操作即可。
关于mapshaper的详细使用,笔者也录制过一些视频放到B站,有兴趣的可跳转链接查看下:https://space.bilibili.com/385286336/channel/seriesdetail?sid=1823268&ctype=0
使用mapshaper进行地图文件格式转换
一般来说,mapshaper也可以有网页版,直接打开网址https://mapshaper.org/就可使用。
同样地安装好mapshaper后,也可以使用本地网页版可视化操作,只需在命令提示符工具上输入:mapshaper-gui,即可打开一个http://localhost:5555/的本地网页。
将dbf、prj、shp三个成套文件同时拖入网页中
注意有些时候,文件不是默认的utf8时,要指明一下文件格式
最后,使用Export就可以导出自己想要的文件格式,给EasyShu使用,就用GeoJson格式。
导出的goejson文件如下,使用主流文本编辑器如VSCoder打开格式化后的效果:
因EasyShu是读取properties对象下的name属性,这里原始的是O_Name属性,所以将它替换为name属性即可。
最后,其实克服了对命令行工具使用的恐惧,用命令行来操作,很多时候更简单,特别是需要批量操作时,更是一大利器,只需在Excel上批量构造好命令行,就可以一次性批量转换了。
当然命令行工具,也可以使用PowerShell ISE,操作更友好。
其实命令行工具使用,和我们使用Excel函数一样,按约定的参数输入完命令内容,就可以直接跑起来。只要认真看下文档和示例,很快就可以上手,一般来说软件开发者更乐意开发强大的命令,而不是做很复杂的交互界面来实现强大功能。
打开Excel加载EasyShu插件后,打开【交互式网页图表】组下的【增强设置】菜单,选择【打开地图数据包文件夹】,将刚刚替换完name属性的json文件,复制到此文件夹中。
通常来说,标准的地图形状数据如世界各国家、中国省市区县级别、甚至中国乡镇级别的地图,EasyShu这里都有提供(乡镇级别不公开提供,可私下联系笔者获取)。
再使用【导出地图数据包地理名称清单】功能,查看此json文件里定义的name属性和其他属性信息。
这里可关键字搜索,或新文件降序排列下,即可找到对应的文件。
导出的信息如下:,如果其他列信息不需要,可以删除,或想加入其他信息如经纬度信息等,也可新建列把其他属性信息如人口、GDP等关联过来,以备日后复查。
id列是用来作后续的组合、合并地图数据包时,唯一识别当前行记录使用,所以可以建立一个唯一ID信息给它。当然多个地图数据包,id可重复,只要单个文件里不重复即可。
增删完信息后,需要将Excel表维护的信息保存到地图数据包文件中。
记住作图时,数据源里的名称,需要和name字段一致才能映射成功,如果此时的name属性不符合要求,可以此时作更改(不可同时更改id和name两列数据,否则程序没法定位到正确的记录行,可分两次更改)。
构建好地图数据包,就可以愉快地进行地图可视化作图,如本篇的着色地图。