判斷地圖上的點是否在圓形,多邊形,區域內

GeoUtils.js

這是官方提供的一個js 
能夠從我gihub下載: https://github.com/liaotuo/BMapAPI/js 
js行數過多就不展現了javascript

效果圖

 

源碼

  • 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/52661934css

相關文章
相關標籤/搜索