现在要做一个外卖功能,首页是个地图搜索效果,传统的地图搜索功能都是在中心点周边几公里内查找,但是外卖的有个特殊情况,每个餐厅都有一个配送范围(意思大家应该都懂的);如图所示:已知中心点坐标、A/B/C/D四点坐标及各自的配送范围,现在要实现查找所有符合配送范围在中心点位置的餐厅A、B、C,请问路过的大神有没有这方面的经验,给个提示,感激不尽!!

解决方案 »

  1.   

    在哪里搜索呢?
    将 配送范围(多边形)以 x,y,x,y,.... 这样的格式保存到一个字段
    先以常规的方法检索出店铺
    然后逐个判断中心点是否在配送范围中function in_polygon($x, $y, $ar) {
      $j = count($ar) - 2;
      $res = 0;
      for($i=0; $i<count($ar); $i+=2) {
        if(
         (($ar[$i+1] < $y && $ar[$i+1] >= $y) || ($ar[$j+1] < $y && $ar[$i+1] > $y))
         && ($ar[$i] <= $x || $ar[$j] <= $x)
        ) $res ^= ($ar[$i] + ($y-$ar[$i+1])) / ($ar[$j+1] - $ar[$i+1]) * ($ar[$j] - $ar[$i]) < $x;
        $j = $i;
      }
      return $res;
    }
      

  2.   

    要做的效果和http://waimai.meituan.com/?stay=1一样,输入一个模糊地址,然后通过百度的LocalSearch查找坐标点,根据这些坐标点查找本地的商家,如果数据量比较大的时候,用您提供的这个方法效率会不会慢呢?? 
      

  3.   


    谢谢你,不过我测试了一下不好使,不知道是不是我弄错了。
    我的数据是:$lng = '120.62761';
    $lat = '31.304047';
    $polygon = '120.62876,31.314105|120.609644,31.308613|120.619274,31.294605|120.632066,31.292692|120.641767,31.295407|120.644929,31.303245|120.64342,31.306639|120.639108,31.311328';如果用你提供的方法应该怎么调整呢?