高德地图POI多边形采集

创建于 25 天前
更新于 23 天前
调用AMap,日上限1000次/天
总安装量
70
今日新增
+0
用户评分
- / 5.0 (0)
当前版本
1.1
脚本详情
适用网站
许可协议MIT

高德地图多边形搜索

一、算法原理

由于高德API在选择的区域比较大的时候,即使是分页请求返回的数据也常有漏点,因此使用动态规划,每页最大数量为50条。
首先请求多边形搜索的POI数据,若返回的count>50,按count的值,对 (count ÷ 每页条数) 取以 2 为底的对数,然后向下取整得到可能深度,把区域分割,然后继续使用分割后的区域请求POI数据,直到请求完毕,不过还是有些POI高德单页50条的情况下也不提供出来

二、适用范围

  • 高德地图:尽量不要在高德页面使用搜索POI,避免触发风控
  • 适用高德JS API编写容器id为amap-global-container的页面,需要自行在脚本中增加对应@match标签,样例如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>高德API版</title>
    <style>
        #amap-global-container {
            width: 100%;
            height: 100vh;
        }
    </style>
    <script type="text/javascript">
        const _config = {
            publicKey: "控制台申请JS API的key",
            securityKey: "配套的私钥",
        }
        if (_config.securityKey)
            window._AMapSecurityConfig = { securityJsCode: _config.securityKey }
    </script>
</head>

<body>
    <div id="amap-global-container"></div>

    <script>
        window.onLoad = function () {
            new AMap.Map('amap-global-container', { zoom: 15 })
        }
        document.head.appendChild(
            Object.assign(document.createElement("script"), {
                charset: "utf-8",
                src: `https://webapi.amap.com/maps?v=2.0&key=${_config.publicKey}&callback=onLoad`,
            })
        )
    </script>
</body>
</html>

三、功能说明

  • 绘制多边形:点击绘制,未选中已保存的区域情况下,左键增加点,右键退出增加进入调整模式;已选中区域情况下,直接进入调整模式,区域相同名称会覆盖数据
  • 缓存数据查询:选中已保存的区域或者类型,会触发缓存读取与筛选,筛选结果可导出,建议搭配Kahuna扩展备份IndexedDB数据库
  • 重新分区:把缓存数据按当前已保存的区域重新分区,要确保区域无重叠,选的是最先匹配到的区域,区域名称存储在pois.area