1

我在 Stack Overflow Google Maps 上找到了这个链接 - 如何获取两点之间的距离(以米为单位)?它显示了关于在给定两个不同的纬度和经度值的情况下查找公里距离的以下解决方案:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>

var p1 = new google.maps.LatLng(45.463688, 9.18814);
var p2 = new google.maps.LatLng(46.0438317, 9.75936230000002);

alert(calcDistance(p1, p2));

//calculates distance between two points in km's
function calcDistance(p1, p2){
    return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
   }

}

这很棒并且有效,但是我正在创建一个应用程序,该应用程序从数据库中提取纬度和经度值并将每个值与恒定的纬度和经度值进行比较,以确定我从数据库中提取的用户是否在一定范围内一组经纬度。

我在 PHP 中执行此操作,但我想将常量 lat 和 long 值以及当前的 lat 和 long 值传递给上述 JavaScript 函数,计算距离,然后将值返回给 PHP 变量。换句话说,我想在 PHP 中调用一个 JavaScript 函数并将 JavaScript 值返回给 PHP 变量。

我看到很多论坛都说这是不可能的,然后有人说这是不可能的。任何人都可以帮助我或建议另一种方法吗?我只需要在 PHP 中做一些老式的微积分而忘记 Google API 插件吗?

4

1 回答 1

1

如果您的数据库中有纬度和经度值,您可以使用以下查询。

SELECT a.*,
            3956 * 2 * ASIN(SQRT( POWER(SIN(($lat - lat) * pi()/180 / 2), 2) + COS($lat * pi()/180) * COS(lat * pi()/180) *
            POWER(SIN(($long - longi) * pi()/180 / 2), 2) )) as
            distance FROM table
            GROUP BY id HAVING distance <= 500 ORDER by distance ASC

$lat 和 $long 变量是用户的当前位置。lat and longi 是条目的纬度和经度。

另请参阅“使用 PHP、MySQL 和 Google 地图创建商店定位器”以了解上述查询如何工作

于 2013-02-21T06:36:38.203 回答