百度地图 java 数据

hello_final 2017-11-01 11:04:11
客户需求:
用户在地图上指定一个位置,根据这个位置画一个半径为5公里的圆
计算这个圆里面的所有存在数据库里面的点(客户的数据是以经纬度的形式存储),然后列出来,显示每个点
...全文
236 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_final 2017-11-03
  • 打赏
  • 举报
回复
需要的是地理围栏效果
110成成 2017-11-03
  • 打赏
  • 举报
回复
引用 2 楼 hello_final 的回复:
还有其它方法吗?最好是后台就判断完
那你去看下百度有没有提供这样的API 既然提供了js版本的,其他版本相应也应该有的。
hello_final 2017-11-01
  • 打赏
  • 举报
回复
还有其它方法吗?最好是后台就判断完
110成成 2017-11-01
  • 打赏
  • 举报
回复
第一个需求,画圆,百度之间有这样的接口 第二个需求,百度有类似的功能,类似电子围栏,判断数据中的点 在所画区域内。 给一段代码给你参考下,这是我以前做电子围栏写的。
//获取修改后的多边形的经纬度信息,以及判断给定的GPS经纬度是否越界
	function isInsidePolygon(point, polygon) {
		var pts = polygon.getPath();
		var N  = pts.length;
		for(var i = 1; i <= N; ++i){//check all rays            
		  alert("第"+i+"次"+pts[i-1].lng+"纬度"+pts[i-1].lat);
		}
		 
		if(!(point instanceof BMap.Point) ||
            !(polygon instanceof BMap.Polygon)){
             return false;
        }
      //首先判断点是否在多边形的外包矩形内,如果在,则进一步判断,否则返回false
         var polygonBounds = polygon.getBounds();
          if (!(point instanceof BMap.Point) || 
              !(polygonBounds instanceof BMap.Bounds)) {
              return false;
          }
          var sw = polygonBounds.getSouthWest(); //西南脚点
          var ne = polygonBounds.getNorthEast(); //东北脚点
          var tt= (point.lng >= sw.lng && point.lng <= ne.lng && point.lat >= sw.lat && point.lat <= ne.lat);  
         if(!tt){
         alert("false");
         return false;//不在区域内
        }
         var pts = polygon.getPath();//获取多边形点
        
         //下述代码来源:http://paulbourke.net/geometry/insidepoly/,进行了部分修改
         //基本思想是利用射线法,计算射线与多边形各边的交点,如果是偶数,则点在多边形外,否则
         //在多边形内。还会考虑一些特殊情况,如点在多边形顶点上,点在多边形边上等特殊情况。
         
         var N = pts.length;
         var boundOrVertex = true; //如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true
         var intersectCount = 0;//cross points count of x 
         var precision = 2e-10; //浮点类型计算时候与0比较时候的容差
         var p1, p2;//neighbour bound vertices
         var p = point; //测试点
         
         p1 = pts[0];//left vertex        
        for(var i = 1; i <= N; ++i){//check all rays            
             if(p.equals(p1)){
                 alert("true");
                 return boundOrVertex;//p is an vertex
             }      
             p2 = pts[i % N];//right vertex  
             if(p.lat < Math.min(p1.lat, p2.lat) || p.lat > Math.max(p1.lat, p2.lat)){//ray is outside of our interests                
                 p1 = p2; 
                 continue;//next ray left point
             }
            
            if(p.lat > Math.min(p1.lat, p2.lat) && p.lat < Math.max(p1.lat, p2.lat)){//ray is crossing over by the algorithm (common part of)
                if(p.lng <= Math.max(p1.lng, p2.lng)){//x is before of ray                    
                     if(p1.lat == p2.lat && p.lng >= Math.min(p1.lng, p2.lng)){//overlies on a horizontal ray
                          alert("true");
                         return boundOrVertex;
                     }        
                     if(p1.lng == p2.lng){//ray is vertical                        
                         if(p1.lng == p.lng){//overlies on a vertical ray
                             return boundOrVertex;
                        }else{//before ray
                            ++intersectCount;
                        } 
                    }else{//cross point on the left side                        
                        var xinters = (p.lat - p1.lat) * (p2.lng - p1.lng) / (p2.lat - p1.lat) + p1.lng;                    
                        if(Math.abs(p.lng - xinters) < precision){  
                                alert("true");
                                 return boundOrVertex;                
                        }
                        
                      if(p.lng < xinters){
                           ++intersectCount;                 
                        } 
                     }
                }
             }else{           
                if(p.lat == p2.lat && p.lng <= p2.lng){                 
                    var p3 = pts[(i+1) % N];        
                    if(p.lat >= Math.min(p1.lat, p3.lat) && p.lat <= Math.max(p1.lat, p3.lat)){
                       ++intersectCount;
                    }else{
                      intersectCount += 2;
                    }
                }
             }            
            p1 = p2;
        }
          alert("number"+intersectCount);
         if(intersectCount % 2 == 0){//偶数在多边形外
             alert("false");  //  在区域外
            return false;
        } else {
        alert("true");//在区域内
        return true;
     
         }            
		
	}
最后根据经纬度显示点,这很简单了。

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧