百度地图API 地图圈区域并计算坐标点是否在区域内

Posted Objects

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百度地图API 地图圈区域并计算坐标点是否在区域内相关的知识,希望对你有一定的参考价值。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="http://cdn.bootcss.com/jquery/1.12.3/jquery.min.js"></script>
    <script type="text/javascript" src="__PUBLIC__/admin/layer/layer.js"></script>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=LiFSZdkfPQkmwmWGb2gSyzA4b6BESUaP"></script>
    <!--加载鼠标绘制工具-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script>
    <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css">
    <!--加载计算工具-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script>
    <!--加载检索信息窗口-->
    <script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>
    <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css">
</head>
<body>
<div style="margin-left: 50px;">
    <lable><input type="text" id="suggestId" placeholder="请输入关键字"></lable>
    <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;"></div>
</div>
<div id="map" style="width:1200px; height: 600px; margin-left: 50px;"></div>
<ul>
    <table>
        <tr>
            <td>序号</td>
            <td>区域名称</td>
            <td>颜色</td>
            <td>操作</td>
        </tr>
        <foreach name="positionList" item="v" key="k">
            <tr>
                <td><{$k}></td>
                <td><{$v[‘name‘]}></td>
          <!--动态设置选定区域的颜色-->
<td><input type="text" value="<{$v[‘color‘]}>" onblur="upColor(<{$v[‘id‘]}>,$(this))"><span style="display: inline-block;width: 20px;height:20px;background-color:<{$v[‘color‘]}>"></span></td> <td>
            <!--删除数据中中的指定区域--> <a src="">删除</a> </td> </tr> </foreach> </table> </ul> </body> <script>
   //更新数据库中的颜色 function upColor(id,event){ var color = event.val(); var id = id; $.ajax({ url:<{:U("map/upColor")}>, type:post, dataType:json, data:{ color:color, id:id }, success:function(res){ if(res.status){ window.location.reload(); } } }); }

   $(
function(){
     //实例化百度地图 
var map = new BMap.Map("map"); map.enableScrollWheelZoom(); //启用滚轮放大缩小,默认禁用 map.enableContinuousZoom(); //启用地图惯性拖拽,默认禁用 map.centerAndZoom("包头",15);  //设置地图中心和地图显示等级      //页面加载先后端请求区域坐标点 并且循环在地图画出已选定区域  $.ajax({ url:<{:U("map/poList")}>, type:post, dataType:json, success:function(res){ if(res){ console.log(res); var polygon = []; for(var i=0;i<res.length;i++){ var arr = []; for(var x=0; x<res[i][position].length;x++){ let poi = new BMap.Point(parseFloat(res[i][position][x].lng),parseFloat(res[i][position][x].lat)); arr.push(poi); } polygon[i] = new BMap.Polygon(arr, //设置区域样式 {strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5,fillColor:res[i][color],fillOpacity:0.3} ); map.addOverlay(polygon[i]); } } } }); function G(id) { return document.getElementById(id); } //建立一个自动完成的对象 var ac = new BMap.Autocomplete({ "input" : "suggestId", "location" : map }); ac.addEventListener("onhighlight", function(e) { //鼠标放在下拉列表上的事件 var str = ""; var _value = e.fromitem.value; var value = ""; if (e.fromitem.index > -1) { value = _value.province + _value.city + _value.district + _value.street + _value.business; } str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value; value = ""; if (e.toitem.index > -1) { _value = e.toitem.value; value = _value.province + _value.city + _value.district + _value.street + _value.business; } str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value; G("searchResultPanel").innerHTML = str; }); var myValue; ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件 var _value = e.item.value; myValue = _value.province + _value.city + _value.district + _value.street + _value.business; G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue; setPlace(); }); function setPlace(){ map.clearOverlays(); //清除地图上所有覆盖物 function myFun(){ var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果 map.centerAndZoom(pp, 16); map.addOverlay(new BMap.Marker(pp)); //添加标注 } var local = new BMap.LocalSearch(map, { //智能搜索 onSearchComplete: myFun }); local.search(myValue); } //右键菜单 var menu = new BMap.ContextMenu(); var item1=new BMap.MenuItem("撤销" ,function(location){ map.removeOverlay(overlays[overlays.length-1]);overlays.splice(overlays.length-1,1) }); menu.addItem(item1); map.addContextMenu(menu); var overlays = []; var overlaycomplete = function(e){ var position = []; overlays.push(e.overlay); //获取多边形端点坐标 // if (e.drawingMode == BMAP_DRAWING_RECTANGLE ) { //alert(‘ 所画的点个数:‘ + e.overlay.getPath().length); for(var i=0;i<e.overlay.getPath().length;i++){ let coordinate = new Object(); coordinate.lng = e.overlay.getPath()[i].lng; coordinate.lat = e.overlay.getPath()[i].lat; position.push(coordinate); // alert(" 点"+(i+1)+":经度"+e.overlay.getPath()[i].lng+" 纬度:"+e.overlay.getPath()[i].lat); } //prompt层 // alert("面积:"+BMapLib.GeoUtils.getPolygonArea(e.overlay)); // } //关闭绘制模式 drawingManager.close(); layer.prompt( {title: 添加区域名称}, function(val, index){ if(val!==‘‘){ $.ajax({ url:<{:U("map/pushPosition")}>, type:post, dataType:json, data:{ position:JSON.stringify(position), name:val }, success:function(res){ if(res.status){ layer.close(index); window.location.reload(); } } }); }else{ layer.close(index); } } ); }; //绘制样式 var styleOptions = { strokeColor:"red", //边线颜色。 fillColor:"red", //填充颜色。当参数为空时,圆形将没有填充效果。 strokeWeight: 3, //边线的宽度,以像素为单位。 strokeOpacity: 0.8, //边线透明度,取值范围0 - 1。 fillOpacity: 0.6, //填充的透明度,取值范围0 - 1。 strokeStyle: solid //边线的样式,solid或dashed。 }; //实例化鼠标绘制工具 var drawingManager = new BMapLib.DrawingManager(map, { isOpen: false, //是否开启绘制模式 enableDrawingTool: true, //是否显示工具栏 drawingToolOptions: { anchor: BMAP_ANCHOR_TOP_RIGHT, //位置 offset: new BMap.Size(5, 5), //偏离值 drawingModes: [//画覆盖物工具栏上显示的可选项 BMAP_DRAWING_MARKER, BMAP_DRAWING_CIRCLE, BMAP_DRAWING_POLYLINE, BMAP_DRAWING_POLYGON, BMAP_DRAWING_RECTANGLE ] }, circleOptions: styleOptions, //圆的样式 polylineOptions: styleOptions, //线的样式 polygonOptions: styleOptions, //多边形的样式 rectangleOptions: styleOptions //矩形的样式 }); //添加鼠标绘制工具监听事件,用于获取绘制结果 drawingManager.addEventListener(overlaycomplete, overlaycomplete); function clearAll() { for(var i = 0; i < overlays.length; i++){ map.removeOverlay(overlays[i]); } overlays.length = 0 }
     //坐标点
     var lng,lat;
     point = [
     new BMap.Point(lng,lat),
     ];
      
//计算坐标point 是否在polygon区域中 接口使用请查看百度地图api
     BMapLib.GeoUtils.isPointInPolygon(point[0],polygon[i]);
  }) </script> </html>

 













以上是关于百度地图API 地图圈区域并计算坐标点是否在区域内的主要内容,如果未能解决你的问题,请参考以下文章

C# 计算地图上某个坐标点的是否在多边形内

百度地图Api 根据两个坐标点计算距离

百度地图api 如何判断一个座标属于哪一个行政区

php验证地图坐标在某片坐标区域内

php实现 计算坐标点在某区域

百度地图行政区绘制