首先使用地图并要求用户设置他的大致位置,获取该值,使用此代码获取到每个商店的距离:
google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);
来自https://developers.google.com/maps/documentation/javascript/reference?hl=en-US#spherical
现在选择较短的并输出它
但我宁愿让他输入城市并通过 Wolfram api 请求获取距离
$city=customer_city;
$north=store_north; //coordinate_l
$west=store_west; //coordinate_L
$wolfram_query="http://api.wolframalpha.com/v2/query?appid=".$appid."&input=distance%20from%20".$city."%20to%20".$north."N%20".$west."W%20in%20km&format=image,plaintext";
并从 xml 答案中获取距离,将谷歌地图排除在外
使用邮政编码的另一种选择是使用这个php函数在一个while循环中计算两个坐标的球面距离,该循环遍历所有的经纬度疮:
function calcDist($lat_A, $long_A, $lat_store[i], $long_store[i]) {
$distance = sin(deg2rad($lat_A))
* sin(deg2rad($lat_B))
+ cos(deg2rad($lat_A))
* cos(deg2rad($lat_B))
* cos(deg2rad($long_A - $long_B));
$distance = (rad2deg(acos($distance))) * 69.09;
return $distance;
}
距离以英里为单位,如果您想要以公里为单位的距离,请使用此
function miles2kms($miles) {
$ratio = 1.609344;
$kms = $miles * $ratio;
return $kms;
}
您可以使用此数据库检索邮政编码的经纬度:http:
//sourceforge.net/projects/zips/files/#files
或此
http://postcodedb.sourceforge.net/dumpCSV.php
要改善距离的结果,您应该使用 Haversine 或 Vincenty 计算......这有点复杂......
...但我们喜欢网络的是,肯定有人在我们之前做过这件事,当然也分享了他的努力!
http://www.phpclasses.org/package/6480-PHP-Calculate-the-distance-between-Earth-two-points.html
这是一个实现半正弦距离的类!这可能会更好......如果你想使用 Vincenty 试试这个:Implementing Vincenty's Formula in PHP,试试哪一个能给你最好的结果,即使最准确的永远是 wolfram,数学家研究过,所以效果很好出色地 ;)