PC端百度地图里怎么实现用户在配送范围

来源:爱站网时间:2022-01-05编辑:网友分享
我们经常点外卖的时候可以查看到自己的东西配送到哪里了,那么这个东西是怎么用百度地图PC端判断用户是否在配送范围内的呢?接下来就让爱站技术频道小编给大家说说看吧!

最近接了个项目,其中有项目需求是这样的:

在pc端设置商家的配送范围,用户在下单时,根据用户设置的配送地点判断是否在可配送范围内,并给用户相应的提示。

下面说下我的实现思路:

1.用百度地图在PC端设置配送范围,可拖拽选择

2.根据用户设置的配送地址判断是否在配送范围内

一、百度地图PC端获取范围

 改动百度地图官网的demo,设置配送范围。

 思路:获取多边形的顶点,以json的形式保存到数据库。

 百度API关于多边形覆盖物:

 构造函数:

Polygon(points:Array[, opts:PolygonOptions]) 创建多边形覆盖物

方法:

setPath(path:Array)  none    设置多边型的点数组(自1.2新增)
getPath()   Array    返回多边型的点数组(自1.2新增)

二、判断点是否在范围内

去网上看了一下,判断点是否在配送范围内的方法很多,大概采用的是射线法。
 但是有一些方法没有考虑全面,导致有的情况判断不够准确。
 在百度地图的GeoUtils里面找到了“判断点是否多边形内”这个方法。
 因为我是需要在后端做判断,然后直接把js转化成了java,测试百发百中,欣喜!(后面附上测试方法)

 /**
 * 判断点是否在多边形内
 * @param point 检测点
 * @param pts  多边形的顶点
 * @return   点在多边形内返回true,否则返回false
 */
public static boolean IsPtInPoly(Point2D.Double point, List pts){
  int N = pts.size();
  boolean boundOrVertex = true; //如果点位于多边形的顶点或边上,也算做点在多边形内,直接返回true
  int intersectCount = 0;//cross points count of x 
  double precision = 2e-10; //浮点类型计算时候与0比较时候的容差
  Point2D.Double p1, p2;//neighbour bound vertices
  Point2D.Double p = point; //当前点
  p1 = pts.get(0);//left vertex    
  for(int i = 1; i  Math.max(p1.x, p2.x)){//ray is outside of our interests        
      p1 = p2; 
      continue;//next ray left point
    }
    if(p.x > Math.min(p1.x, p2.x) && p.x = Math.min(p1.y, p2.y)){//overlies on a horizontal ray
          return boundOrVertex;
        }
        if(p1.y == p2.y){//ray is vertical            
          if(p1.y == p.y){//overlies on a vertical ray
            return boundOrVertex;
          }else{//before ray
            ++intersectCount;
          } 
        }else{//cross point on the left side            
          double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;//cross point of y            
          if(Math.abs(p.y - xinters) = Math.min(p1.x, p3.x) && p.x 

主要是判断和这个方法的可行性。

 为此写了个测试方法。

 思路:获取一个多边形的顶点,然后随机点一个点

 1.调用百度地图的方法,判断该点是否在范围内
 2.根据百度地图获取的那个店的经纬度,自己程序判断是否在范围内

PC端百度地图里怎么实现用户在配送范围的详细内容就到这里了,还有不解的小伙伴,可以直接来爱站技术频道网站留言。

上一篇:IOS程序开发中发送短信验证怎么实现

下一篇:Objective-C半透明导航的代码介绍

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载