本人近期因为项目需要,尝试把百度的js地理围栏算法改成java实现,测试过程中发现有bug存在,一开始以为是转换过程中出现了问题,后来测试了原生js,发现问题确实存在。此处demo我参照了网上的示例原demo,后来我将测试数据稍微变更便发现了问题。

测试代码:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>GeoUtils示例</title><script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script><script type="text/javascript" src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script><style type="text/css">table {font-size: 14px;}</style>
</head><body><div style="float:left;width:600px;height:500px;border:1px solid gray" id="container"></div><div style="float:left;width:300px;height:500px;border:1px solid gray" id="control"><table style="width:100%;"><tr><td colspan="2">判断点是否在多边形内:</td></tr><tr><td><input type="button" value="多边形1" οnclick="polygon1()" /></td></tr><tr><td><input type="button" value="多边形2" οnclick="polygon2()" /></td></tr><tr><td>经度<input type="text" value="" id="lng"></td></tr><tr><td>纬度<input type="text" value="" id="lat"></td></tr><tr><td>结果:</td></tr><tr><td><p id="result" style="color:red"></p></td></tr><table></div>
</body></html>
<script type="text/javascript">var map = new BMap.Map("container");var pt = new BMap.Point(116.404, 39.915);var mkr = new BMap.Marker(pt);var ply;  //多边形map.centerAndZoom(pt, 16);map.enableScrollWheelZoom(); //开启滚动缩放map.enableContinuousZoom(); //开启缩放平滑//初始化为多边形1polygon1();//生成多边形1function polygon1() {var pts = [];var pt1 = new BMap.Point(116.395, 39.910);var pt2 = new BMap.Point(116.394, 39.914);var pt3 = new BMap.Point(116.403, 39.920);var pt4 = new BMap.Point(116.402, 39.914);var pt5 = new BMap.Point(116.410, 39.913);pts.push(pt1);pts.push(pt2);pts.push(pt3);pts.push(pt4);pts.push(pt5);ply = new BMap.Polygon(pts);//演示:将面添加到地图上map.clearOverlays();map.addOverlay(ply);}//生成多边形2function polygon2() {var pts = [];var pt1 = new BMap.Point(116.395, 39.910);var pt2 = new BMap.Point(116.411, 39.910);var pt3 = new BMap.Point(116.411, 39.915);var pt4 = new BMap.Point(116.416, 39.915);var pt5 = new BMap.Point(116.416, 39.920);pts.push(pt1);pts.push(pt2);pts.push(pt3);pts.push(pt4);pts.push(pt5);ply = new BMap.Polygon(pts);//演示:将多边形添加到地图上map.clearOverlays();map.addOverlay(ply);}map.addEventListener("click", function (e) {mkr.setPosition(e.point);map.addOverlay(mkr);//将点击的点的坐标显示在页面上document.getElementById("lng").value = e.point.lng;document.getElementById("lat").value = e.point.lat;InOrOutPolygon(e.point.lng, e.point.lat);});function InOrOutPolygon(lng, lat){var pt = new BMap.Point(lng, lat);var result = BMapLib.GeoUtils.isPointInPolygon(pt, ply);if (result == true) {document.getElementById("result").innerHTML = "点在多边形内";} else {document.getElementById("result").innerHTML = "点在多边形外";}}</script>

直接将代码复制到本地html文件运行即可,得到如下页面

其中多边形1测试用例没有问题,但是多边形2测试时,只需要将点选在一些特殊位置就会判断错误,如图

此处的射线法求证时,没有考虑到这种情况,所选点的纬度为39.915时,与多边形2的pt3,pt4纬度一致,就会发生错误判断,即使点明显在范围内,也会得出在范围外的结论。而网上的demo基本都是采用这种射线法求证,希望百度地图可以对此算法的bug进行纠正,以保证准确性,如果文中有错误的地方随时发邮件联系547255628@qq.com,我会及时更改

百度地图js中地理围栏算法bug相关推荐

  1. 百度地图API实现地理围栏

    地理围栏(Geo-fencing)是LBS的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界.当手机进入.离开某个特定地理区域,或在该区域内活动时,手机可以接收自动通知和警告.简单来说就是判断一个 ...

  2. 基于百度地图js进行地理定位

    http://www.mengxiangchaoren.com/jquery.select.position.min.js 使用方法 $("#myCity").renderSele ...

  3. 地理围栏算法解析(Geo-fencing)

    地理围栏算法解析 http://www.cnblogs.com/LBSer/p/4471742.html 地理围栏(Geo-fencing)是LBS的一种应用,就是用一个虚拟的栅栏围出一个虚拟地理边界 ...

  4. HTML5+百度地图API实现地理定位

    背景 如果知道用户在哪里,往往会提高很多Web应用的体验,比如为用户指明方向,对它们要去的地方给出建议,让用户知道它们所在的区域内有哪些人可能会对某个活动感兴趣等等.现在,利用HTML5(以及基于Ja ...

  5. android百度地图覆盖物异步加载图片,Android 百度地图marker中图片不显示的解决方法(推荐)...

    目的: 根据提供的多个经纬度,显示所在地的marker样式,如下: 问题: 1.发现marker中在线加载的图片无法显示出来: 2.获取多个对象后,却只显示出了一个marker: 以下为官网实现方法: ...

  6. 【招聘内推】百度地图招聘推荐推送算法工程师

    百度地图招聘推荐&推送算法工程师,Base 北京,感兴趣的小伙伴可以发邮件至zhangtai01@baidu.com联系.(联系时可备注来自智能推荐系统公众号) 工作内容&岗位优势: ...

  7. python百度地图api经纬度_详解用Python调用百度地图正/逆地理编码API

    一.背景 (正)地理编码指的是:将地理位置名称转换成经纬度: 逆地理编码指的是:将经纬度转换成地理位置信息,如地名.所在的省份或城市等 百度地图提供了相应的API,可以方便调用.相应的说明文档如下: ...

  8. java 地理围栏算法,计算几何(1)——地理围栏相关算法

    一 前言 维基百科上面是英文,所有找了一段百度百科的定义 地理围栏(Geo-fencing)是LBS的一种应用, 就是用一个虚拟的栅栏围出一个虚拟地理边界. 当手机进入, 离开某个特定地理区域, 或在 ...

  9. 百度地图坐标转换为gps_百度地图与中交兴路合作,为大卡司机提供专业导航服务...

    美股研究社消息,日前中交兴路旗下的车旺大卡APP宣布正式与百度地图达成合作,将联网617万辆重卡动静态数据以及车辆位置等多种数据,通过结合百度地图的全国实时路网数据和货车导航能力,共同为货车司机提供更 ...

最新文章

  1. css float left right 中间空间城数据无法显示
  2. 【spring-boot】启用数据缓存功能
  3. OneOfT1,…,Tn清新
  4. MATLAB常用算法与应用实例分享来袭!
  5. mongodb mongoose 常用操作符号 整理
  6. s5pv210开发板、原理图、刷机和数据手册
  7. pytorch resnet50_用Pytorch手工实现ResNet50
  8. java puzzlers英文版_java puzzlers [更新至14.04.03]
  9. vs2010变的特别卡解决办法
  10. win下常用快捷鍵及其作用
  11. python使用BeautifulSoup的prettify功能来处理HTML文档,之后使用Levenshtein编辑距离计算文档间的相似度
  12. zookeeper集群节点为什么是奇数个
  13. cisco交换机配置方法
  14. powerpoint ppt 点击放映后黑屏 解决办法
  15. 爬虫英雄联盟官网的全英雄介绍和技能介绍
  16. Verilog中reg和wire的区别
  17. 疫情下的生鲜配送,数字供应链发挥了重大作用
  18. 简单的图像相似度计算方法
  19. 银联在线支付5100030异常
  20. SAP常用需求关闭预留未清的处理方法

热门文章

  1. win10系统如何恢复服务器,win10如何打开恢复选项_网站服务器运行维护
  2. 涉嫌出售 50 亿个人数据,甲骨文面临集体诉讼
  3. Emscripten 单词_北师大版|高中英语必修1选修8单词听力汇总|Unit1—Unit24
  4. 贝叶斯公式的简单理解
  5. [日推荐] 『色盲自测』测测你是不是色狼,敢测吗?
  6. freemarker 比较 Boolean 类型
  7. 运动式蓝牙耳机怎么选择,分享几款好用的运动耳机
  8. Android开发调试必备 - DDMS
  9. mybatis二级缓存架构原理
  10. 好妈妈胜过好老师-允许孩子慢点长大