高德地图看各省分界线_从高德采集最新的省市区三级坐标和行政区域边界,用js在浏览器中运行...

本文描述的是对国家统计局于2019-01-31发布的《2018年统计用区划代码和城乡划分代码(截止2018年10月31日)》中省市区三级的坐标和行政区域边界的采集。随着时间变化,本文内容会逐渐变旧或失效,请到GitHub仓库查阅最新更新数据。

边界效果预览

数据来源

坐标和边界是高德地图提供的数据接口;可通过方法转换成其他坐标系的坐标,比如百度地图的。

数据采集

1. 调用高德地图接口抓取原始数据

进入高德地图测试页面,执行代码即可完成抓取,开了4个模拟的线程,采集了3300+数据,首次运行大概2分多钟完成采集。

抓取完成后会自动弹出保存文件数据。

源码里面包含了对不同地名的处理,有些城市不能直接通过编码或城市名称来查询,高德地图相对于统计局还是有些滞后。

2. 处理数据和导出CSV

这个代码比较简单,目前只是起到把数据导出来的作用,里面写了一大堆方法,但运行过一次后发现,基本上可以不用了,因为对数据进行验证部分发现高德的数据非常完美。

代码运行完成就自动弹出保存csv文件数据了。

为什么不采百度的

使用高德接口采集是后面才决定的,因为本来是用百度地图的接口,但数据全部搞完,经过使用发现百度地图数据有严重问题:

参考 肃宁县(右下方向那块飞地)、路南区(唐山科技职业技术学院那里一段诡异的边界) 边界,百度数据大量线段交叉的无效polygon(百度地图测试),没有人工无法修正,高德没有这个问题(高德地图测试);

并且高德对镂空性质的地块处理比百度强,参考天津市对唐山大块飞地的处理,高德数据只需要Union操作就能生成polygon,百度既有Union操作又有Difference操作,极其复杂数据还无效。

所以放弃使用百度地图数据。

如何使用这些数据

坐标和边界数据和省市区数据是分开存储的,通过ID来进行关联。

采集到的csv文件可以导入到数据库内使用,由于POLYGON需要解析,蛮复杂的,可以参考src/map_geo_格式化.js内的SQL Server导入用的SQL语句的例子。

如果需要特定的POLYGON格式,可以根据库里面介绍的字段格式,自行进行解析和验证。

使用过程中如果遇到多种不同坐标系的问题,比如请求的参数是WGS-84坐标(GPS),我们后端存储的是高德的坐标,可以通过将WGS-84坐标转成高德坐标后进行处理,百度的坐标一样。转换有相应方法,转换精度一般可以达到预期范围,可自行查找。或者直接把高德的原始坐标数据转换成目标坐标系后再存储(精度?)。

SQL Server中的运行结果(大概2分钟完成POLYGON的转换,表数据物理存储空间大概300M):

最后

releases内除了有省市区三级坐标和行政区域边界csv数据外,还有处理好的3级或者4级省市区镇 csv数据提供下载。

如果这个库有帮助到您,请 Star 一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用高德地图 JavaScript API 绘制指定公里数圆形边界的简单示例: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>绘制指定公里数圆形边界</title> <style type="text/css"> #mapContainer { width: 100%; height: 600px; } </style> </head> <body> <div id="mapContainer"></div> <script src="https://webapi.amap.com/maps?v=1.4.15&key=您的密钥"></script> <script> // 初始化地图 var map = new AMap.Map('mapContainer', { center: [116.397428, 39.90923], // 北京心点坐标 zoom: 13 // 缩放级别 }); // 绘制指定公里数的圆形边界 function drawBoundary(lng, lat, radius) { // 创建圆形边界 var boundary = new AMap.Circle({ center: [lng, lat], // 心点坐标 radius: radius * 1000, // 半径(注意:高德地图使用米为单位) strokeColor: "#FF0000", strokeWeight: 2, fillOpacity: 0 }); boundary.setMap(map); } // 示例:绘制以北京心点为心,半径为5公里的圆形边界 drawBoundary(116.397428, 39.90923, 5); </script> </body> </html> ``` 在上面的示例,我们首先使用 `AMap.Map` 创建了一个地图实例,并设置了地图心点和缩放级别。接着,我们定义了一个 `drawBoundary` 函数,该函数接受三个参数:心点经度、心点纬度和半径,然后使用 `AMap.Circle` 创建一个圆形对象来绘制圆形边界。最后,我们调用 `drawBoundary` 函数来绘制指定公里数的圆形边界。 需要注意的是,上面的示例使用了 `AMap.Circle` 来绘制圆形边界,使用这种方法绘制出来的圆形边界会比较精确。另外,示例的半径是以公里为单位的,而 `AMap.Circle` 使用的是以米为单位的半径,因此需要将半径乘以1000来转换为米。如果需要更精确的圆形边界,可以使用更复杂的算法,或者考虑使用高德地图提供的服务来获取更精确的边界信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值