使用高德地图js api 自动画出电子围栏

因直接画多边形不太准确,需要沿路来画围栏

电子围栏思路:

1. 找到原点经纬度 xconst CENTER = [116.397504,39.89619]

const DISTANCE = 300 //单位m

const map = new AMap.Map("container", {

center: CENTER,

zoom: 14

});

2. 根据x点在地图上画出一个圆const circle = new AMap.Circle({

center: CENTER,

radius: DISTANCE, //半径

borderWeight: 3,

strokeColor: "#FF33FF",

strokeOpacity: 1,

strokeWeight: 6,

strokeOpacity: 0.2,

fillOpacity: 0.4,

strokeStyle: 'dashed',

strokeDasharray: [10, 10],

fillColor: '#1791fc',

zIndex: 50

})

circle.setMap(map)

// 缩放地图到合适的视野级别

map.setFitView([ circle ])

3. 在圆边线上 分别找到向 东、东南、南、西南、西、西北、北、东北 8个方向的位置

得到 x1,y1 ~ x8,y8 ,8个 位置的 经纬度,定义为 A1 ~ A8 的坐标

先根据圆的公式,找到圆上的各点,再用各点转换成地图的经纬度/**

*

* 获取圆上的点(步长 45度)

*

**/

function setCirclePoint(centerpoint = CENTER, radius = DISTANCE) {

const r = 6371000; //地球的平均半径

const numpoints = 360;

const phase = 2 * Math.PI / numpoints;

let pointArr = []

//画点

for (let i = 0; i < numpoints; i+=45) {

// 计算坐标点

let dx = (radius * Math.cos(i * phase));

let dy = (radius * Math.sin(i * phase));

// 转换成经纬度

let dlng = dx / (r * Math.cos(centerpoint.lat * Math.PI / 180) * Math.PI / 180);

let dlat = dy / (r * Math.PI / 180);

let newlng = centerpoint.lng + dlng;

let newlag = centerpoint.lat + dlat;

pointArr.push([newlng,newlag])

// 实例化点标记

const marker = new AMap.Marker({

position: [newlng, newlag],

icon: startIcon,

offset: new AMap.Pixel(-13, -30)

});

markers.push(marker);

marker.setMap(map);

}

return pointArr

}

如图:

4. 搜索 A1 ~ A8 8个坐标最近的 POI点,A1 = “国贸三期”,A2 = “东直门”,A3 = “奥体森林公园”。。。。类推// 高德地图查询周边

function aMapSearchNearBy(centerPoint) {

return new Promise((resolve,reject)=>{

AMap.service(["AMap.PlaceSearch"], () => {

const placeSearch = new AMap.PlaceSearch({

pageSize: 10, // 每页10条

pageIndex: 1, // 获取第一页

});

// 第一个参数是关键字,这里传入的空表示不需要根据关键字过滤

// 第二个参数是经纬度,数组类型

// 第三个参数是半径,周边的范围

// 第四个参数为回调函数

placeSearch.searchNearBy('', centerPoint, 1000, (status, result) => {

if(result.info === 'OK') {

const locationList = result.poiList.pois; // 周边地标建筑列表

resolve(locationList[0])

} else {

console.log('获取位置信息失败!');

reject()

}

});

});

})

}

因必须是A1-A8顺序返回POI结果,高德API为异步,所以使用Promise进行同步处理//获取POI信息

const POIArr = await Promise.all(points.map(async (item)=>{

return await aMapSearchNearBy(item)

}))

5. 将这8个POI点依次相连(A1-A2,A2-A3,A3-A4,...A8-A1)用导航路径画出 (步行),得到 L1 ~ L8 这 8条路径/**

* 绘制路线(步行)

*/

function drawWalk(data, i){

return new Promise((resolve,reject)=>{

//步行导航

const walking = new AMap.Walking({

map: map,

panel: "panel",

hideMarkers: true, //设置隐藏路径规划的起始点图标

});

let start = [POIArr[i].location.lng, POIArr[i].location.lat]

let end = i === POIArr.length-1 ? [POIArr[0].location.lng, POIArr[0].location.lat] : [POIArr[i+1].location.lng, POIArr[i+1].location.lat]

//根据起终点坐标规划步行路线

walking.search(start, end, (status, result) => {

resolve(result)

if (status === 'complete') {

log.success('绘制步行路线完成')

} else {

log.error('步行路线数据查询失败' + result)

}

});

});

}

依次画出步行路径const walkRes = await Promise.all(POIArr.map(async (item, index)=>{

return await drawWalk(item, index)

}))

如图:

6. 存储8条路线的拐点

根据各步行路径返回的信息找到路的拐点,并保存起来,保存之前需要去重。walkRes.map((key)=>{

const steps = key.routes[0].steps

steps.map((item, index)=>{

item.path.map((pos)=>{

formatData(pos)

})

})

})

7. 验证保存的拐点数据,画出的多边形是否和路线一致

第一次取的值为steps属性下的start_location,但出如下图

但不是沿路的,也缺失了一些拐点

第二次取steps下的path中的路线,搞定

8. 完成。

注:代码不全,仅供参考

设置电子围栏 高德地图_高德地图 自动生成电子围栏相关推荐

  1. 地图上分成一块一块区域 高德地图_高德导航定位错误致拥堵,景区发文呼吁游客别用高德地图,回应来了...

    10月4日下午,青城山都江堰景区与高德地图"怼"上了.该景区官方公众号"青城山都江堰"发文称,近来,青城山都江堰景区频繁接到游客反映,使用"高德地图& ...

  2. react 逆地理 高德地图_高德官宣!海外地图服务年内上线:首批覆盖亚洲多个国家...

    1月8日消息,在2020CES期间,高德与HERE Technologies(以下简称"HERE地图")共同宣布,双方将基于海外地图及动态信息服务展开合作. HERE地图将为高德地 ...

  3. ios 点生成线路 百度地图_网站地图全面解析

    网站地图相信大家都不陌生,但对于一些刚刚接触seo的小伙伴来说可能会有些疑惑.这段时间我也时常听到有学员说网站地图怎么去制作分析,搞得也是非常的头痛,现在就来带大家全面透析网站地图吧. 一.什么是网站 ...

  4. 百度离线地图_这个地图APP,专注于地图软件该做的事!

    Bmap Bmap,简单的双地图应用.可任意切换/高德地图数据源,致力满足日常生活的出行需求.具有步行.公交.骑行.驾驶等出行方案,查看街景. 新版特性 1.升级百度地图sdk6.0.0 2.升级高德 ...

  5. python下载arcgis地图_互联网地图矢量数据Python获取方法

    原标题:互联网地图矢量数据Python获取方法 慧天地"即可订阅 1.获取高德地图路况信息 1)不使用密钥的方法(5分钟获取一次,只有全国主要城市) 主要利用的网址是 http://repo ...

  6. 高精地图_语义地图_众包地图相关论文笔记

    1.20220618_LT-mapper: A Modular Framework for LiDAR-based Lifelong Mapping 2021 3d-Lidar构建long-term地 ...

  7. react 谷歌地图_谷歌地图与React

    react 谷歌地图 情况(The Situation) Your working on a React-based application and you want to implement Goo ...

  8. 读取word对应页码_毕业论文怎样自动生成目录及从任意页开始排页码

    怎样自动生成目录及从任意页开始排页码微软WORD这个软件大家都很熟悉,但有不少功能我们并没有用到,其中不乏非常实用的.今儿个我给大家介绍一下如何用WORD自动生成目录.这对那些用WORD写书,写论文的 ...

  9. 快递取件码生成软件_一种自动生成取件码的快递柜及其使用方法与流程

    本发明涉及快递柜技术领域,尤其是自动生成取件码的快递柜及其使用方法. 背景技术: 近年来,随着快递业的迅速发展,快递柜的应用也越发广泛.为了解决快递智能存储问题,许多小区已经安装了智能快递柜,快递员将 ...

  10. python利用什么写模板_利用python自动生成verilog模块例化模板

    一.前言 初入职场,一直忙着熟悉工作,就没什么时间更新博客.今天受"利奇马"的影响,只好宅在家中,写写技术文章.芯片设计规模日益庞大,编写脚本成了芯片开发人员必要的软技能.模块端口 ...

最新文章

  1. linux服务器挂载不上nfs,我遇上的挂载不上NFS文件系统的坑
  2. BugkuCTF-Misc:白哥的鸽子
  3. 探索7.x, 全面解析Activity启动框架 (2)
  4. Servlet规范定义的Servlet 生命周期
  5. 同步本地远程分支 git remote prune origin
  6. lisp的vla函数画矩形_利用Lisp做Tin三角网建模(源代码)
  7. 重写重载与重定义的区别
  8. 转载 JavaScript的24条实用建议
  9. 用友NC系统安装部署指南
  10. html页面广告5秒之后跳过
  11. PS制作个人LOGO技术总结
  12. java jnlp_使用Java 7启动JNLP时的NoSuchAlgorithmException
  13. Java程序员是考研还是毕业就就业?
  14. linux的dhcp服务
  15. 大数据之------------数据中台
  16. 看伊朗黑客组织OilRig如何在实施攻击前测试他们的诱饵文档
  17. 虚电路和数据报的区别以及应用
  18. 关于京牌“以家庭为单位摇号”“京牌可以继承”的不合理性分析
  19. 华为设备OSPF多区域配置
  20. 计算机节约ip,浅谈节约IP地址方法.doc

热门文章

  1. PAT a1138
  2. 数仓 - 生命周期、用户价值、忠诚度、活跃度计算
  3. 关于百度SDK的返回错误-PERMISSION UNFINISHED
  4. python自动发送微信文件_Python脚本定期发送微信文件,定时
  5. 使用两个FBO互相绑定实现PS液化效果
  6. 无限乱斗连接服务器失败,LOL新版无限乱斗模式服务器挤爆怎么办 客户端哪些功能被限制...
  7. python中base函数_详细的python basemap中各函数的所有参量注释
  8. Makerbase_ODrive常见驱动问题及解决
  9. 终端数据防泄漏案例分析
  10. 「硅仙人」吉姆 · 凯勒