最近在用AngularJS+ECharts做图表,要用到镇街一级的当地地图,无奈ECharts只能提供到市一级(demo里有一个能显示到县/区一级,here),故要用到ECharts的扩展地图功能。
扩展方法官方doc说得很明白了,here;
PS:官方doc里只提供了jQuery的写法,我这里补充一个AngularJS的写法:
jQuery(官网写法):
| 
 | 
 | 
AngularJS:
| 
 | 
 | 
但我手头上只有shp的地图格式,而ECharts要用到geojson格式。百度google一番后,大致有如下两种方法:
- 用工具转换,例如GDAL的ogr2ogr,下载地址:here; 
- 在线转换,地址如下: 
- http://ogre.adc4gis.com(可能墙)
- http://converter.mygeodata.eu(可能墙)
- http://www.mapshaper.org (备注:这个不知道是我不懂得用还是本身有缺陷,转换后的geojson不能用,而且会丢失字段,列在这里仅供参考)
- http://vis.sccas.cn/demo/map(ECharts作者@Kener-林峰 提供的)
先说一下背景:
我的shp文件的地理坐标是GCS_WGS1984,投影坐标系是WGS_1984_UTM_Zone_49N(Transverse_Mercator)。
ogr2ogr:
完整命令如下(Mac版,其他版本估计差异不大):
| 
 | 
 | 
重点是-s_srs的参数;
ogre.adc4gis.com:
- 按网站上的说明,把 - .shp, .dbf, .shx, .prj(可选)打包成zip;
- 在Convert to GeoJSON框里选择刚才打包的zip包; 
- 在Target SRS里输入“WGS84”(关键步骤); 
- 点击“CONVERT TO GEOJSON”按钮,然后就会生成相应的geoJSON; 
converter.mygeodata.eu
- 同上,将shp、dbf等打包成zip包并上传提交; 
- 上传成功后,理论上能在地图里预览你的shp文件对应的区域; 
- 在Target vector format选项框里,选择GeoJSON(.json); 
- 在Output coordinate system选项框里,选择WGS 84(关键步骤); 
- 点击Convert now!; 
adc4gis功能比较基本,mygeodata功能比较丰富(支持Vecotr data的编辑),大家各取所需吧。
不知道是不是编码方式没选对,我在两个网站转换出来的geojson中的中文都是乱码,不过我的字段也不多,手动改也不是很麻烦(但后来用ogr2ogr转换出来的就没问题)。
其实这三种方法的关键一步都是要把输出的坐标系统设置为WGS 84,其他都比较好理解。
由于本人对GIS不是很熟悉,光是google以上东西这些就花了我半天的时间了,在这里mark一下,希望有需要的人能少走弯路,毕竟大部分都不需要研究GIS,而只是单纯的想要个geojson文件而已(新版本的arcGIS的arcToolbox好像有转换成geojson的工具)。