2025年实时最新获取地图边界数据方法,省市区县街道多级联动【附实时geoJson数据下载】

首先,来看下效果图

map.gif

在线体验地址: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的option
        var 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

截止2020-06-10全国各省市geo数据json格式。 全国 北京市 东城区 西城区 朝阳区 丰台区 石景山区 海淀区 门头沟区 房山区 通州区 顺义区 昌平区 大兴区 怀柔区 平谷区 密云区 延庆区 天津市 和平区 河东区 河西区 南开区 河北区 红桥区 东丽区 西青区 津南区 北辰区 武清区 宝坻区 滨海新区 宁河区 静海区 蓟州区 河北省 石家庄市 长安区 桥西区 新华区 井陉矿区 裕华区 藁城区 鹿泉区 栾城区 井陉 正定 行唐 灵寿 高邑 深泽 赞皇 无极 平山 元氏 辛集市 晋州市 新乐市 唐山市 路南区 路北区 古冶区 开平区 丰南区 丰润区 曹妃甸区 滦南 乐亭 迁西 玉田 遵化市 迁安市 滦州市 秦皇岛市 海港区 山海关区 北戴河区 抚宁区 青龙满族自治 昌黎 卢龙 邯郸市 邯山区 丛台区 复兴区 峰峰矿区 肥乡区 永区 临漳 成安 大名 鸡泽 广平 馆陶 曲周 武安市 邢台市 桥东区 桥西区 邢台 临城 内丘 柏乡 隆尧 南和 宁晋 巨鹿 新河 广宗 平乡 清河 临西 南宫市 沙河市 保定市 竞秀区 莲池区 满城区 清苑区 徐水区 涞水 阜平 定兴 高阳 容城 涞源 望都 安新 曲阳 顺平 博野 涿州市 定州市 安国市 高碑店市 张家口市 桥东区 桥西区 宣化区 下花园区 万全区 崇礼区 张北 康保 沽源 尚义 阳原 怀安 怀来 涿鹿 赤城 承德市 双桥区 双滦区 鹰手营子矿区 承德 兴隆 滦平 隆化 丰宁满族自治 宽城满族自治 围场满族蒙古族自治 平泉市 沧州市 新华区 运河区 沧 东光 海兴 盐山 肃宁 南皮 吴桥 孟村回族自治 泊头市 任丘市 黄骅市 河间市 廊坊市 安次区 广阳区 固安 永清 香河 大城 文安 大厂回族自治 霸州市 三河市 衡水市 桃城区 冀州区 枣强 武邑 武强 饶阳 安平 故城 阜城 深州市 山西省 太原市 小店区 迎泽区 杏花岭区 尖草坪区 万柏林区 晋源区 清徐 阳曲 娄烦 古交市 大同市 新荣区 平城区 云冈区 云州区 阳高 天镇 广灵 灵丘 浑源 左云 阳泉市 城区 矿区 郊区 平定 长治市 潞州区 上党区 屯留区 潞城区 襄垣 平顺 黎城 壶关 长子 武乡 沁源 晋城市 城区 沁水 阳城 陵川 泽州 高平市 朔州市 朔城区 平鲁区 山阴 右玉 怀仁市 晋中市 榆次区 榆社 左权 和顺 昔阳 寿阳 太谷 平遥 灵石 介休市 运城市 盐湖区 临猗 万荣 闻喜 稷山 新绛 垣曲 平陆 芮城 永济市 河津市 忻州市 忻府区 定襄 五台 繁峙 宁武 静乐 神池 五寨 岢岚 河曲 保德 偏关 原平市 临汾市 尧都区 曲沃 翼城 襄汾 洪洞 安泽 浮山 乡宁 大宁 永和 汾西 侯马市 霍州市 吕梁市 离石区 文水 交城 柳林 石楼 方山 中阳 交口 孝义市 汾阳市 内蒙古自治区 呼和浩特市 新城区 回民区 玉泉区 赛罕区 土默特左旗 托克托 和林格尔 清水河 武川 包头市 东河区 昆都仑区 青山区 石拐区 白云鄂博矿区 九原区 土默特右旗 固阳 达尔罕茂明安联合旗 乌海市 海勃湾区 海南区 乌达区 赤峰市 红山区 元宝山区 松山区 阿鲁科尔沁旗 巴林左旗 巴林右旗 林西 克什克腾旗 翁牛特旗 喀喇沁旗 宁城 敖汉旗 通辽市 科尔沁区 科尔沁左翼中旗 科尔沁左翼后旗 开鲁 库伦旗 奈曼旗 扎鲁特旗 霍林郭勒市 鄂尔多斯市 东胜区 康巴什区 达拉特旗 准格尔旗 鄂托克前旗 鄂托克旗 杭锦旗 乌审旗 伊金霍洛旗 呼伦贝尔市 海拉尔区 扎赉诺尔区 阿荣旗 莫力达瓦达斡尔族自治旗 鄂伦春自治旗 鄂温克族自治旗 陈巴尔虎旗 新巴尔虎左旗 新巴尔虎右旗 满洲里市 牙克石市 扎兰屯市 额尔古纳市 根河市 巴彦淖尔市 临河区 五原 磴口 乌拉特前旗 乌拉特中旗 乌拉特后旗 杭锦后旗 乌兰察布市 集宁区 卓资 化德 商都 兴和 凉城 察哈尔右翼前旗 察哈尔右翼中旗 察哈尔右翼后旗 四子王旗 丰镇市 兴安盟 乌兰浩特市 阿尔山市 科尔沁右翼前旗 科尔沁右翼中旗 扎赉特旗 突泉 锡林郭勒盟 二连浩特市 锡林浩特市 阿巴嘎旗 苏尼特左旗 苏尼特右旗 东乌珠穆沁旗 西乌珠穆沁旗 太仆寺旗 镶黄旗 正镶白旗 正蓝旗 多伦 阿拉善盟 阿拉善左旗 阿拉善右旗 额济纳旗 辽宁省 沈阳市 和平区 沈河区 大东区 皇姑区 铁西区 苏家屯区 浑南区 沈北新区 于洪区 辽中区 康平 法库 新民市 大连市 中山区 西岗区 沙河口区 甘井子区 旅顺口区 金州区 普兰店区 长海 瓦房店市 庄河市 鞍山市 铁东区 铁西区 立山区 千山区 台安 岫岩满族自治 海城市 抚顺市 新抚区 东洲区 望花区 顺城区 抚顺 新宾满族自治 清原满族自治 本溪市 平山区 溪湖区 明山区 南芬区 本溪满族自治 桓仁满族自治 丹东市 元宝区 振兴区 振安区 宽甸满族自治 东港市 凤城市 锦州市 古塔区 凌河区 太和区 黑山 凌海市 北镇市 营口市 站前区 西市区 鲅鱼圈区 老边区 盖州市 大石桥市 阜新市 海州区 新邱区 太平区 清河门区 细河区 阜新蒙古族自治 彰武 辽阳市 白塔区 文圣区 宏伟区 弓长岭区 太子河区 辽阳 灯塔市 盘锦市 双台子区 兴隆台区 大洼区 盘山 铁岭市 银州区 清河区 铁岭 西丰 昌图 调兵山市 开原市 朝阳市 双塔区 龙城区 朝阳 建平 喀喇沁左翼蒙古族自治 北票市 凌源市 葫芦岛市 连山区 龙港区 南票区 绥中 建昌 兴城市 吉林省 长春市 南关区 宽城区 朝阳区 二道区 绿园区 双阳区 九台区 农安 榆树市 德惠市 吉林市 昌邑区 龙潭区 船营区 丰满区 永吉 蛟河市 桦甸市 舒兰市 磐石市 四平市 铁西区 铁东区 梨树 伊通满族自治 公主岭市 双辽市 辽源市 龙山区 西安区 东丰 东辽 通化市 东昌区 二道江区 通化 辉南 柳河 梅河口市 集安市 白山市 浑江区 江源区 抚松 靖宇 长白朝鲜族自治 临江市 松原市 宁江区 前郭尔罗斯蒙古族自治 长岭 乾安 扶余市 白城市 洮北区 镇赉 通榆 洮南市 大安市 延边朝鲜族自治州 延吉市 图们市 敦化市 珲春市 龙井市 和龙市 汪清 安图 黑龙江省 哈尔滨市 道里区 南岗区 道外区 平房区 松北区 香坊区 呼兰区 阿城区 双城区 依兰 方正 巴彦 木兰 通河 延寿 尚志市 五常市 齐齐哈尔市 龙沙区 建华区 铁锋区 昂昂溪区 富拉尔基区 碾子山区 梅里斯达斡尔族区 龙江 依安 泰来 甘南 富裕 克山 克东 拜泉 讷河市 鸡西市 鸡冠区 恒山区 滴道区 梨树区 城子河区 麻山区 鸡东 虎林市 密山市 鹤岗市 向阳区 工农区 南山区 兴安区 东山区 兴山区 萝北 绥滨 双鸭山市 尖山区 岭东区 四方台区 宝山区 集贤 友谊 宝清 饶河 大庆市 萨尔图区 龙凤区 让胡路区 红岗区 大同区 肇州 肇源 林甸 杜尔伯特蒙古族自治 伊春市 伊春区 南岔区 友好区 西林区 翠峦区 新青区 美溪区 金山屯区 五营区 乌马河区 汤旺河区 带岭区 乌伊岭区 红星区 上甘岭区 嘉荫 铁力市 佳木斯市 向阳区 前进区 东风区 郊区 桦南 桦川 汤原 同江市 富锦市 抚远市 七台河市 新兴区 桃山区 茄子河区 勃利 牡丹江市 东安区 阳明区 爱民区 西安区 林口 绥芬河市 海林市 宁安市 穆棱市 东宁市 黑河市 爱辉区 嫩江市 逊克 孙吴 北安市 五大连池市 绥化市 北林区 望奎 兰西 青冈 庆安 明水 绥棱 安达市 肇东市 海伦市 大兴安岭地区 漠河市 加格达奇区 呼玛 塔河 上海市 黄浦区 徐汇区 长宁区 静安区 普陀区 虹口区 杨浦区 闵行区 宝山区 嘉定区 浦东新区 金山区 松江区 青浦区 奉贤区 崇明区 江苏省 南京市 玄武区 秦淮区 建邺区 鼓楼区 浦口区 栖霞区 雨花台区 江宁区 六合区 溧水区 高淳区 无锡市 锡山区 惠山区 滨湖区 梁溪区 新吴区 江阴市 宜兴市 徐州市 鼓楼区 云龙区 贾汪区 泉山区 铜山区 丰 睢宁 新沂市 邳州市 常州市 天宁区 钟楼区 新北区 武进区 金坛区 溧阳市 苏州市 虎丘区 吴中区 相城区 姑苏区 吴江区 苏州工业园区 常熟市 张家港市 昆山市 太仓市 南通市 崇川区 港闸区 通州区 如东 启东市 如皋市 海门市 海安市 连云港市 连云区 海州区 赣榆区 东海 灌云 灌南 淮安市 淮安区 淮阴区 清江浦区 洪泽区 涟水 盱眙 金湖 盐城市 亭湖区 盐都区 大丰区 响水 滨海 阜宁 射阳 建湖 东台市 扬州市 广陵区 邗江区 江都区 宝应 仪征市 高邮市 镇江市 京口区 润州区 丹徒区 丹阳市 扬中市 句容市 泰州市 海陵区 高港区 姜堰区 兴化市 靖江市 泰兴市 宿迁市 宿城区 宿豫区 沭阳 泗阳 泗洪 浙江省 杭州市 上城区 下城区 江干区 拱墅区 西湖区 滨江区 萧山区 余杭区 富阳区 临安区 桐庐 淳安 建德市 宁波市 海曙区 江北区 北仑区 镇海区 鄞州区 奉化区 象山 宁海 余姚市 慈溪市 温州市 鹿城区 龙湾区 瓯海区 洞头区 永嘉 平阳 苍南 文成 泰顺 瑞安市 乐清市 龙港市 嘉兴市 南湖区 秀洲区 嘉善 海盐 海宁市 平湖市 桐乡市 湖州市 吴兴区 南浔区 德清 长兴 安吉 绍兴市 越城区 柯桥区 上虞区 新昌 诸暨市 嵊州市 金华市 婺城区 金东区 武义 浦江 磐安 兰溪市 义乌市 东阳市 永康市 衢州市 柯城区 衢江区 常山 开化 龙游 江山市 舟山市 定海区 普陀区 岱山 嵊泗 台州市 椒江区 黄岩区 路桥区 三门 天台 仙居 温岭市 临海市 玉环市 丽水市 莲都区 青田 缙云 遂昌 松阳 云和 庆元 景宁畲族自治 龙泉市 安徽省 合肥市 瑶海区 庐阳区 蜀山区 包河区 长丰 肥东 肥西 庐江 巢湖市 芜湖市 镜湖区 弋江区 鸠江区 三山区 芜湖 繁昌 南陵 无为 蚌埠市 龙子湖区 蚌山区 禹会区 淮上区 怀远 五河 固镇 淮南市 大通区 田家庵区 谢家集区 八公山区 潘集区 凤台 寿 马鞍山市 花山区 雨山区 博望区 当涂 含山 淮北市 杜集区 相山区 烈山区 濉溪 铜陵市 铜官区 义安区 郊区 枞阳 安庆市 迎江区 大观区 宜秀区 怀宁 太湖 宿松 望江 岳西 桐城市 潜山市 黄山市 屯溪区 黄山区 徽州区 歙 休宁 祁门 滁州市 琅琊区 南谯区 来安 全椒 定远 凤阳 天长市 明光市 阜阳市 颍州区 颍东区 颍泉区 临泉 太和 阜南 颍上 界首市 宿州市 埇桥区 砀山 灵璧 六安市 金安区 裕安区 叶集区 霍邱 舒城 金寨 霍山 亳州市 谯城区 涡阳 蒙城 利辛 池州市 贵池区 东至 石台 青阳 宣城市 宣州区 郎溪 广德市 泾 绩溪 旌德 宁国市 福建省 福州市 鼓楼区 台江区 仓山区 马尾区 晋安区 长乐区 闽侯 连江 罗源 闽清 永泰 平潭 福清市 厦门市 思明区 海沧区 湖里区 集美区 同安区 翔安区 莆田市 城厢区 涵江区 荔城区 秀屿区 仙游 三明市 梅列区 三元区
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值