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

news2024/12/28 20:11:56
首先,来看下效果图

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Python小项目] 利用Python进行彩票选择方案及分析

利用Python进行彩票选择方案及分析 一、前言 你是否曾梦想过一夜暴富&#xff1f;是否曾想过如果能幸运地中得大奖&#xff0c;生活会有怎样的改变&#xff1f;彩票&#xff0c;这个看似简单的游戏&#xff0c;却可能为我们带来巨大的财富。然而&#xff0c;如何选择号码&…

【Android】Intel HAXM installation failed!

Android Studio虚拟机配置出现Intel HAXM installation failed 如果方案一解决没有作用&#xff0c;就用方案二再试一遍 解决方案一&#xff1a; 1.打开控制面板 2.点击左侧下面最后一个程序 3.点击启用或关闭Windows功能 4.勾选Windows虚拟机监控程序平台 5.接下来重启电脑…

4.2 网际协议IP

思维导图&#xff1a; 前言&#xff1a; **笔记 4.2 - 网际协议IP** 1. **定义与重要性**&#xff1a; - 网际协议IP是TCP/IP体系中的核心协议之一。 - 它是互联网的关键标准协议。 2. **发展背景**&#xff1a; - 又被称为Kahn-Cerf协议。 - 由Robert Kahn和…

并发数计算方法

1、性能测试计算TPS 性能测试的TPS,大都是根据用户真实的业务数据(运营数据)来计算的 普通计算方式:TPS=总请求数/总时间 二八原则计算方法:TPS=总请求*0.8/总时间*0.2 (二八原则就是指80%的请求在20%的时间内完成) 总结:普通计算方式只能满足基本的要求,但是不能很好覆…

为什么使用C#开发软件的公司和程序员都很少?

为什么使用C#开发软件的公司和程序员都很少&#xff1f; 讲几个故事吧&#xff01;如果不爱听&#xff0c;就当个故事。 一个老东家做互联网的&#xff0c;java大概四五十人&#xff0c;四五十个前端&#xff0c;十个左右的c# &#xff0c;那年做点播机&#xff0c;招了两个嵌入…

常见的8个JMeter压测问题

为什么在JMeter中执行压力测试时&#xff0c;出现连接异常或连接重置错误&#xff1f; 答案&#xff1a;连接异常或连接重置错误通常是由于服务器在处理请求时出现问题引起的。这可能是由于服务器过载、网络故障或配置错误等原因导致的。 解决方法&#xff1a; 确定服务器的负载…

嵌入式软件行业真的没前途吗?

嵌入式软件行业真的没前途吗&#xff1f; 嵌入式对新人极不友好&#xff0c;前途是非常好的&#xff0c;问题是你光混日子等不到&#xff0c;没有靠谱的职业路径&#xff0c;你也学不成。最近很多小伙伴找我&#xff0c;说想要一些嵌入式资料&#xff0c;然后我根据自己从业十年…

广州股票开户怎么选择券商最好?炒股开户佣金最低是多少?

广州股票开户怎么选择券商最好&#xff1f;炒股开户佣金最低是多少&#xff1f; 开设股票账户通常需要以下步骤&#xff1a; 1.选择证券公司或经纪商。您可以通过互联网搜索或参考朋友的推荐&#xff0c;选择一家有信誉且服务良好的证券公司或经纪商。 2.填写开户申请表。您…

多用户多回路宿舍用电管理解决方案-安科瑞黄安南

01 引言 近几年来&#xff0c;因违规使用大功率恶性负载电器导致宿舍失火的安全事故在各大高校时有发生&#xff0c;给学生和学校都带来了巨大的损失。北京大学、哈尔滨工业大学、上海商学院以及俄罗斯人民友谊大学等高校学生公寓发生的火灾给高校学生公寓的安全用电敲响…

「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. DOMContentLoaded 1.1 属性 1.2 A…

3500/15 106M1079-01 支持先进和复杂的人工智能计算

3500/15 106M1079-01 支持先进和复杂的人工智能计算 耐能NPU IP系列允许ResNet、YOLO和其他深度学习网络在离线环境下的边缘设备上运行。耐能NPU IP为edge AI提供完整的硬件解决方案&#xff0c;包括硬件IP、编译器、模型压缩。它支持各种类型的卷积神经网络(CNN)模型&#xf…

去雨去雪去雾算法程序中断问题解决方法

中断问题 在进行去雨去雾去雪算法的实验过程中&#xff0c;时常会由于各种意外情况导致实验中断&#xff0c;而在该源码中&#xff0c;并没有对应的中断应对策略&#xff0c;这就导致该源码的健壮性太差&#xff0c;而且博主在实验时也确实遇到多次这种情况&#xff0c;这让博…

数据结构之手撕顺序表(讲解➕源代码)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…

2.DApp-编写和运行solidity智能合约

题记 演示如何编写solidity智能合约&#xff0c;以及在remix中运行solidity代码。 准备Remix环境 在浏览器中搜索remix&#xff0c;找到remix官网&#xff0c;并打开 由于是国内网络&#xff0c;所以访问国外网站较慢&#xff0c;可以耐心等待加载完成&#xff0c;或者科学上网…

2023_Spark_实验十五:自定义法创建Dataframe及SQL操作

方式二&#xff1a;SQL方式操作 1.实例化SparkContext和SparkSession对象 2.创建case class Emp样例类&#xff0c;用于定义数据的结构信息 3.通过SparkContext对象读取文件&#xff0c;生成RDD[String] 4.将RDD[String]转换成RDD[Emp] 5.引入spark隐式转换函数&#xff08…

Linux入门攻坚——3、基础命令学习-文件管理、别名、glob、重定向、管道、用户及组管理、权限管理

文件管理&#xff1a;cp&#xff0c;mv&#xff0c;rm cp&#xff1a;复制命令&#xff0c;copy cp [OPTION]... [-T] SRC DEST cp [OPTION]... SRC... DIRECTORY cp [OPTION]... -t DIRECTORY DEST... 如果目标不存在&#xff0c;新建DEST&#xff0c;并将…

Motorola IPMC761 使用边缘TPU加速神经网络

Motorola IPMC761 使用边缘TPU加速神经网络 人工智能(AI)和机器学习(ML)正在塑造和推进复杂的自动化技术解决方案。将这些功能集成到硬件中&#xff0c;解决方案可以识别图像中的对象&#xff0c;分析和检测模式中的异常或找到关键短语。这些功能对于包括但不限于自动驾驶汽车…

易点易动设备管理平台:高效设备一站式管理助力企业成功

在现代企业运营中&#xff0c;设备管理是一个至关重要的任务。无论是生产设备、办公设备还是信息技术设备&#xff0c;高效的设备管理对于企业的生产效率和运营成本都具有重要影响。然而&#xff0c;传统的设备管理方式往往繁琐且容易出错&#xff0c;给企业带来了许多挑战。为…

为什么STM32的HAL库那么难用?

为什么STM32的HAL库那么难用&#xff1f; 在使用q banks和hell库时&#xff0c;开发速度简直快到让人觉得不可思议。最近我要开发一款三十八千赫兹红外应用。之前从未接触过这。最近很多小伙伴找我&#xff0c;说想要一些HAL库资料&#xff0c;然后我根据自己从业十年经验&…

如何使用本地PHP搭建本地Imagewheel云图床在公网远程访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…