最近有个任务需要绘制某个乡镇的边界线,认真查看了高德开发文档之后发现,高德的DistrictSearch (通过行政区查询api)能查询的级别为国家、省/直辖市、市、区/县、商圈,查不到乡镇的数据,如下图所示:
查了很多资料,发现可以在geojson.io | powered by Mapbox上手绘边界线,但是听起来就很麻烦,所以pass。
我最终实现的方法是通过下载Bigemap GIS Office 软件生成边界数据文件(kml格式),然后在geojson.io | powered by Mapbox 上导入kml文件生成json文件拿到边界线的经纬度信息,用高德的Polygon绘制出来。
一、下载kml边界线文件
软件下载地址BIGEMAP GIS Office-全能版;
下载安装完成之后打开软件,在左上角选择地图里点击添加,弹出自定义地图管理器,点击添加在线地图源,添加百度地图的官方地址(https://map.baidu.com/)(高德好像不支持,可以先试用百度地图,后面回转化坐标系),如下图所示:
地图自定义成功后,在选择地图里点击刚刚添加的地图(没有自定义的地图不能下载文件),在右上角选择要下载的乡镇名称,地图直接出现该乡镇的边界线,双击边界线趋于,弹出下载对话框,如下图所示,点击确定会直接下载kml边界线文件;
二、kml文件转json文件
打开geojson.io | powered by Mapbox网站(反应略慢,耐心等待),在左上角点击open导入下载的kml文件,地图会展示乡镇边界信息,右侧会有边界经纬度信息,点击save 保存为json文件并存放在项目目录下;
三、地球坐标系经纬度转火星坐标系
通过geojson获取的文件中边界点位的经纬度直接放在高德地图上会有偏差,这是因为geojson获取的经纬度为地球坐标系,而高德试用的是火星坐标系,需要转换之后才能使用,转换方法参考JS不同地图坐标系经纬度转换(天地图、高德地图、百度地图、腾讯地图)_天地图坐标和高德地图坐标系-CSDN博客
四、高德地图加载边界线
引入json文件,然后使用高德开发文档提供的api即可;如图