首先,来看下效果图

在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载

可下载的数据包含省级geojson行政边界数据、市级geojson行政边界数据、区/县级geojson行政边界数据、省市区县街道行政编码四级联动数据(可精确到乡镇/街道级)、省市区县街道乡村五级行政编码。

前段时间给公司弄了一套基于echarts map的地图数据展示的平台,开发过程中发现百度官方已经不提供地图下载了,于是只能期望能在网上搜到哪位大佬帮忙收集的json文件。找是找到了,然鹅发现大部分都年代久远了,很多地区其实已经重新划分行政区划了。
所以,只能想想其他办法了,回想起平常使用高德地图搜索某个地名的时候,好像会有个边界区域给我们绘制出来,然后我就觉得它既然能画出来,应该会有办法从某些渠道获取,或者高德地图会提供相应的API。于是乎,去到了高德开放平台仔细的查看了一下他提供的api,哈哈,果然有!有了接口,接下来就是撸码了。

第一步,通过高德api获取边界数据

通过查阅API文档可以知道,获取边界数据的接口为行政区查询服务(AMap.DistrictSearch)。使用该服务之前记得去申请一个key,用于调用高德接口,申请地址直通车:https://lbs.amap.com/dev/key/app。

1、在页面添加 JS API 的入口脚本标签,并将其中「您申请的key值」替换为您刚刚申请的 key;
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.11&key=「您申请的key值」&plugin=AMap.DistrictSearch"></script>
2、通过以下方式获取数据,以获取中国地图为例;
this.opts = {subdistrict: 1,   //返回下一级行政区showbiz: false  //最后一级返回街道信息
};
this.district = new AMap.DistrictSearch(this.opts);//注意:需要使用插件同步下发功能才能这样直接使用
this.district.search('中国', (status, result) => {if (status == 'complete') {this.getData(result.districtList[0], '', 100000);}
});
getData(data, level, adcode) {//处理获取出来的边界数据var subList = data.districtList;if (subList) {var curlevel = subList[0].level;if (curlevel === 'street') {//为了配合echarts地图区县名称显示正常,这边街道级别数据需要特殊处理let mapJsonList = this.geoJsonData.features;let mapJson = {};for (let i in mapJsonList) {if (mapJsonList[i].properties.name == this.cityName) {mapJson.features = [].concat(mapJsonList[i]);}}this.mapData = [];//这个mapData里包含每个区域的code、名称、对应的等级,实现第三步功能时能用上this.mapData.push({name: this.cityName, value: Math.random() * 100, level: curlevel});this.loadMap(this.cityName, mapJson);this.geoJsonData = mapJson;return;}//街道级以上的数据处理方式this.mapData = [];for (var i = 0, l = subList.length; i < l; i++) {var name = subList[i].name;var cityCode = subList[i].adcode;//这个mapData里包含每个区域的code、名称、对应的等级,实现第三步功能时能用上this.mapData.push({name: name,value: Math.random() * 100,cityCode: cityCode,level: curlevel});}this.loadMapData(adcode);}
},
3、接下来,利用 AMapUI.loadUI 可以构造一个创建一个 DistrictExplorer 实例,然后利用 DistrictExplorer 的实例,可以根据当前需要加载城市的 areaCode获取到该城市的 geo 数据
loadMapData(areaCode) {AMapUI.loadUI(['geo/DistrictExplorer'], DistrictExplorer => {//创建一个实例var districtExplorer = window.districtExplorer = new DistrictExplorer({eventSupport: true, //打开事件支持map: this.map});districtExplorer.loadAreaNode(areaCode, (error, areaNode) => {if (error) {console.error(error);return;}let mapJson = {};//特别注意这里哦,如果查看过正常的geojson文件,都会发现,文件都是以features 字段开头的,所以这里要记得加上mapJson.features = areaNode.getSubFeatures();this.loadMap(this.cityName, mapJson);});});
},

第二步,用echarts把边界数据渲染出来

我这边使用的echarts版本为当前的最新版4.2.0,相关文档查阅地址传送门:https://echarts.baidu.com/option.html#series-map。千万别看错文档了,他好几个版本放在一起,关键是每个版本某些属性会不一样,所以要特别注意文档的版本与引入的echarts版本保持一致。

1、在页面引入JS文件,我这边引入的bootstrap cdn提供的文件
<script src="https://cdn.bootcss.com/echarts/4.2.0-rc.2/echarts.min.js"></script>
2、注册echarts并使用刚刚通过高德API获取的数据渲染成map
//html
<div id="map"></div>//注册并赋值给echartsMap
this.echartsMap = this.$echarts.init(document.getElementById('map'));//通过loadMap函数加载地图
loadMap(mapName, data) {if (data) {this.$echarts.registerMap(mapName, data);//把geoJson数据注入echarts//配置echarts的optionvar option = {visualMap: {type: 'piecewise',pieces: [{max: 30, label: '安全', color: '#2c9a42'},{min: 30, max: 60, label: '警告', color: '#d08a00'},{min: 60, label: '危险', color: '#c23c33'},],color: '#fff',textStyle: {color: '#fff',},visibility: 'off'},series: [{name: '数据名称',type: 'map',roam: false,mapType: mapName,selectedMode: 'single',showLegendSymbol: false,visibility: 'off',itemStyle: {normal: {color: '#ccc',areaColor: '#fff',borderColor: '#fff',borderWidth: 0.5,label: {show: true,textStyle: {color: "rgb(249, 249, 249)"}}},emphasis: {areaColor: false,borderColor: '#fff',areaStyle: {color: '#fff'},label: {show: true,textStyle: {color: "rgb(249, 249, 249)"}}}},data: this.mapData,//这个data里包含每个区域的code、名称、对应的等级,实现第三步功能时能用上}]};this.echartsMap.setOption(option);}
},

做完这一步,如果不出问题,中国地图已经安静的躺在你的屏幕上了!

第三步,实现省市区县下探功能

1、添加点击事件
this.echartsMap.on('click', this.echartsMapClick);echartsMapClick(params) {//地图点击事件if (params.data.level == 'street') return;//此处的params.data为this.mapData里的数据this.cityCode = params.data.cityCode;//行政区查询//按照adcode进行查询可以保证数据返回的唯一性this.district.search(this.cityCode, (status, result) => {if (status === 'complete') {this.getData(result.districtList[0], params.data.level, this.cityCode);//这个getData函数在前面已经定义过了}});
},

此项目这边是基于VUE开发的,看完之后有什么不懂的,可以留言说明.

项目GitHub地址:https://github.com/TangSY/echarts-map-demo
省市区县geojson边界数据下载地址:https://geojson.hxkj.vip/
乡镇街道geojson下载地址:https://map.hxkj.vip

2023年6月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】相关推荐

  1. 2023年4月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

    首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据.市级geojson行政边界数据 ...

  2. 2023年3月实时获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

    首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据.市级geojson行政边界数据 ...

  3. 2023年实时获取地图边界数据方法,省市区县多级联动【附区县乡镇街道geoJson文件下载】

    首先,来看下效果图 在线体验地址:https://geojson.hxkj.vip,并提供实时geoJson数据文件下载 可下载的数据包含省级geojson行政边界数据.市级geojson行政边界数据 ...

  4. 可视化大屏地图json数据(省市区县街道)

    1. 各省市地区的json数据 DataV.GeoAtlas地理小工具:http://datav.aliyun.com/portal/school/atlas/area_selector Geojso ...

  5. 提取某一个镇的行政边界_高德地图api获取行政边界矢量方法

    高德地图api获取行政边界矢量方法 发布时间:2018-09-07 17:51, 浏览次数:2170 , 标签: api 1.获取高德地图web服务key 2.行政区域查询API服务地址: https ...

  6. 百度地图--展示行政区划(省市区县)和添加多个标注点案例

    百度地图JavaScript API支持HTTP和HTTPS,免费对外开放,可直接使用.接口使用无次数限制.在使用前,您需先申请密钥(ak)才可使用. 申请密钥链接: http://lbsyun.ba ...

  7. echarts实现河南各省市区县地图(河南省各省市区县地图json文件可以在我博客里下载)

    前言:最近公司项目有个需求,展示河南省各省市区县的地图,并展示相应的数据,看了些资料决定用echarts实现. 一.完成之后的效果图 点击市的模块显示对应的市,并显示对应市的数据 点击区县的模块显示对 ...

  8. matlab获取地图边界,科学网—提取百度地图县域的矢量边界 - 张乐乐的博文

    (1) 将以下代码存储为txt文件,后缀名改为html 获取地区轮廓线 var map = new BMap.Map("container"); map.centerAndZoom ...

  9. 简化行政地图边界 简化地图边界的方法 GeoPandas

    最开始想用GeoPandas造轮子,但大可不必: https://docs.mapbox.com/mapbox-tiling-service/examples/natural-earth-countr ...

最新文章

  1. java 提取内容并排序
  2. IDEA中创建maven项目后解决main文件夹下目录不全的问题
  3. IJCAI 2021 ICAPS 2021自动强化学习挑战赛正式开赛
  4. 跟我学 Java 8 新特性之 Stream 流(五)映射
  5. Java微服务篇1——SpringBoot
  6. 【动态规划】数位DP入门题:不要62
  7. python拟合曲线求方程_matplotlib中对数曲线拟合及lin方程的求解
  8. 关于打印出来的字符串,最后的逗号改为句号的解决办法
  9. 利用C++的多态写一个电脑组装的具体实现
  10. 第三方登录/分享最佳实践
  11. JNI 静态注册和动态注册
  12. 刚刚搬进公寓,应该每个月交100块网费好还是买个随身WiFi?
  13. 西游之路——python全栈——django中orm的使用(1)
  14. STM32/APM32 用DMA采集ADC1多通道--标准库
  15. Cat3.0.0监控本地部署+springboot接入cat例子
  16. 从Q9XXX系统CPU看温度过高问题
  17. 【大数据分析1】大数据基础理论
  18. Linux系统双显示器4K分辨率配置
  19. 【那些年我们一起看过的论文】之《ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation》
  20. Elasticsearch大数据量写入调优和原理解析

热门文章

  1. graphviz php,Graphviz
  2. smartsvn 忽略文件夹_svn ignore 的用法(忽略文件及目录)
  3. 跟着王进老师学开发之C#篇:基础语法-王进-专题视频课程
  4. 最容易理解的反射机制的底层原理
  5. 搜索评价指标——NDCG
  6. 如果你需要我回答你的问题
  7. Vue报错: Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘protocol‘)
  8. 前端(vue)实现图形(拼图等)验证码
  9. linux运行input文件路径,new FileInputStream(filePath)方法在linux下执行不正确 | ZPY博客...
  10. HTML_页面点击按钮关闭页面的几种方式