ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

判断地图上的点是否在圆形,多边形,区域内

2019-06-16 11:38:20  阅读:270  来源: 互联网

标签:多边形 Point 地图 js 圆形 BMap var new


GeoUtils.js

这是官方提供的一个js 
可以从我gihub下载: https://github.com/liaotuo/BMapAPI/js 
js行数过多就不展示了

效果图

 

源码

  • github https://github.com/liaotuo/BMapAPI
  • Tips

    • 要注意Point和Circle 都必须是:BMap.Point和BMap.Bounds对象
    • 此案例只展示了多边形和圆形 GeoUtils.js还提供了 矩形 等其他判断API

    判断在圆形内

  • <!-- 
        liaotuo 
        2016.09.25 
        判断点是否在圆形区域内(用于电子围栏)
    -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
    body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=百度地图API开发者密钥AK"></script>
    <script type="text/javascript" src="js/GeoUtils.js"></script>
    
    
    <title>圆形区域判断</title>
    </head>
    <body>
    <div id="allmap"></div>
    </body>
    </html>
    <script type="text/javascript">
    //创建地图
    var map = new BMap.Map("allmap");  
    //创建一个圆
    var circle = new BMap.Circle(new BMap.Point(112.595384,26.904631),1000,{fillColor:"blue", strokeWeight: 1 ,fillOpacity: 0.3, strokeOpacity: 0.3});
    
     var point2s = [  
          new BMap.Point(112.586149,26.913201),  
          new BMap.Point(112.58464,26.909432),  
          new BMap.Point(112.585143,26.899219),  
          new BMap.Point(112.600953,26.898832),  
          new BMap.Point(112.607421,26.900572),  
          new BMap.Point(112.606631,26.904825),  
          new BMap.Point(112.606523,26.909142),  
          new BMap.Point(112.59772,26.909399),
          ];
    //创建标注点并添加到地图中
    function addMarker(points) {
        //循环建立标注点
        for(var i=0, pointsLen = points.length; i<pointsLen; i++) {
            var marker = new BMap.Marker(points[i]); //将点转化成标注点
            map.addOverlay(marker);  //将标注点添加到地图上
            //添加监听事件
            (function() {
                var thePoint = points[i];
                marker.addEventListener("click",
                    function() {
                    showInfo(this,thePoint);
                });
             })();  
        }
    }
    
    function showInfo(thisMarker,point) {
    
        //判断点是否在
        if(BMapLib.GeoUtils.isPointInCircle(point,circle)){
          var infoWindow = new BMap.InfoWindow("在圆形区域内");
          thisMarker.openInfoWindow(infoWindow); //图片加载完后重绘infoWindow
      }else
      {
         var infoWindow = new BMap.InfoWindow("不在圆形区域内");
          thisMarker.openInfoWindow(infoWindow); //图片加载完后重绘infoWindow
      }
    }
    
    
    function initialize() {  
        alert("点击标注点可以显示是否在区域内");
      // 百度地图API功能  
      map.addControl(new BMap.NavigationControl());               // 添加平移缩放控件  
      map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件  
      map.addControl(new BMap.OverviewMapControl());              //添加缩略地图控件  
      map.enableScrollWheelZoom();                            //启用滚轮放大缩小  
      map.addControl(new BMap.MapTypeControl());          //添加地图类型控件  
    
        var point = new BMap.Point(112.595384,26.904631);    // 创建点坐标  
            map.centerAndZoom(point,15);                      // 初始化地图,设置中心点坐标和地图级别。  
            addMarker(point2s); 
      map.addOverlay(circle);
    }  
    
    initialize();
    
    </script>

    判断在多边形内

  • <!-- 
        liaotuo 
        2016.09.11 
        判断点在多边形内
    -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
    body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=百度地图API开发者密钥AK"></script>
    <script type="text/javascript" src="js/GeoUtils.js"></script>
    
    
    <title>圆形区域判断</title>
    </head>
    <body>
    <div id="allmap"></div>
    </body>
    </html>
    <script type="text/javascript">
    //创建地图
    var map = new BMap.Map("allmap");  
    //创建一个多边形
    
    //创建多边形  
    var polygon2 = new BMap.Polygon([  
          new BMap.Point(112.579325,26.915291),  
          new BMap.Point(112.584967,26.899086),  
          new BMap.Point(112.608287,26.898023),  
          new BMap.Point(112.605035,26.90764),  
          new BMap.Point(112.602825,26.914356),  
          new BMap.Point(112.588254,26.909862),  
          ], {strokeColor:"#f50704",fillColor:"#cfcfcf", strokeWeight:5, strokeOpacity:0,fillOpacity:0,});  
    
     var point2s = [  
          new BMap.Point(112.586149,26.913201),  
          new BMap.Point(112.58464,26.909432),  
          new BMap.Point(112.585143,26.899219),  
          new BMap.Point(112.600953,26.898832),  
          new BMap.Point(112.607421,26.900572),  
          new BMap.Point(112.606631,26.904825),  
          new BMap.Point(112.606523,26.909142),  
          new BMap.Point(112.59772,26.909399),
          ];
    //创建标注点并添加到地图中
    function addMarker(points) {
        //循环建立标注点
        for(var i=0, pointsLen = points.length; i<pointsLen; i++) {
            var marker = new BMap.Marker(points[i]); //将点转化成标注点
            map.addOverlay(marker);  //将标注点添加到地图上
            //添加监听事件
            (function() {
                var thePoint = points[i];
                marker.addEventListener("click",
                    function() {
                    showInfo(this,thePoint);
                });
             })();  
        }
    }
    
    function showInfo(thisMarker,point) {
    
        //判断点是否在
        if(BMapLib.GeoUtils.isPointInPolygon(point,polygon2)){
          var infoWindow = new BMap.InfoWindow("在区域内");
          thisMarker.openInfoWindow(infoWindow); //图片加载完后重绘infoWindow
      }else
      {
         var infoWindow = new BMap.InfoWindow("不在区域内");
          thisMarker.openInfoWindow(infoWindow); //图片加载完后重绘infoWindow
      }
    }
    
    
    function initialize() {  
        alert("点击标注点可以显示是否在区域内");
      // 百度地图API功能  
      map.addControl(new BMap.NavigationControl());               // 添加平移缩放控件  
      map.addControl(new BMap.ScaleControl());                    // 添加比例尺控件  
      map.addControl(new BMap.OverviewMapControl());              //添加缩略地图控件  
      map.enableScrollWheelZoom();                            //启用滚轮放大缩小  
      map.addControl(new BMap.MapTypeControl());          //添加地图类型控件  
    
        var point = new BMap.Point(112.595384,26.904631);    // 创建点坐标  
            map.centerAndZoom(point,15);                      // 初始化地图,设置中心点坐标和地图级别。  
            addMarker(point2s); 
      map.addOverlay(polygon2);
    }  
    
    initialize();
    
    </script>

    本文转自:https://blog.csdn.net/c1481118216/article/details/52661934

标签:多边形,Point,地图,js,圆形,BMap,var,new
来源: https://www.cnblogs.com/nizuimeiabc1/p/11030983.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有