混乱的结果与谷歌地图API和我的公式与距离矩阵[关闭]。

问题描述 投票:0回答:1

我有一个项目,可以根据我设定的半径来检测附近的标志物建立。我有 5km/3km/1km 选择。我暂时将中心设置为一个静态的 latlng. 在获取标志物的坐标时,我有一个数据库,在计算坐标时。我使用一些公式,我 创办.

这是我在后台根据中心标记获取附近标记的代码。

Static lat lng from frontend   // lat: 1.3182001528756,lng: 103.84650707245


$km = $request->radius/1000;   //1km
$centerLat = $request->centerLat;
$centerLng = $request->centerLng;
$ky = 40000 / 360;
$originParm = $centerLat.','.$centerLng;

$test = \DB::select(\DB::raw("SELECT school_name as name, lng, lat, 
( 6371 * acos( cos( radians(" . $centerLat . ") ) 
* cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $centerLng . ") ) 
+ sin( radians(" . $centerLat . ") ) * sin( radians( lat ) ) ) ) 
AS distance FROM xp_pn_schools HAVING distance < ".$km.""));

$test = json_decode(collect($test),true);

foreach($test as $data) {
    $arr['data'][] = array(
        'coord' => ['lat' => $data['lat'], 'lng' => $data['lng']],
        'name' => ucwords(strtolower($data['name'])),
        'distance' => $data['distance'],

    );
    $coordArr[] = $data['lat'].','.$data['lng']; //concat for google api link
}

使用goole距离矩阵api的后台(用于获取基于位置的ETA和距离)

$destination = implode('|',$coordArr);
$ch = curl_init();
$url = 'https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins='.$originParm.'&destinations='.rawurlencode($destination).'&key=***********&mode=driving';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$output = json_decode($output,true);
curl_close($ch);

return response()->json(array(
                'markers' => $arr,
                'time' => $output
              ));

但在我的前台,当我检查响应时,我得到了这样的东西

enter image description here

我为了呈现小的结果比较,我把半径设置为距离我的前端1公里或1000的地方。

你可以看到,第一个结果是 Farrer School 距离 0.8 km 从公式。但在google地图api中,它是 2.1 km . 我如何验证哪一个是正确的?

javascript php google-maps google-maps-api-3 geolocation
1个回答
1
投票

哈弗辛公式给出的是大圆直线距离,距离矩阵给出的是行驶距离。 这两个几乎都会不同,行驶距离是两者中较大的。

© www.soinside.com 2019 - 2024. All rights reserved.