总安装量
70
今日新增
+0
用户评分
- / 5.0 (0)
当前版本
1.1
高德地图多边形搜索
一、算法原理
由于高德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