2

让我稍微解释一下这个项目。我们有大量带有地址的商店列表。数据库中的每个地址都有一个地理位置。

现在我的问题是:当用户填写他的地址和邮政编码等时,我们有他的位置和他的地理位置,是否可以根据用户的位置在谷歌地图中找到最近的商店。如果不是通过地理位置,那么可能基于邮政编码?

我查看了谷歌地图 api,但没有找到喷气机来做这件事。重要的是它会搜索我们添加到谷歌地图的商店。我宁愿不使用谷歌地图,而只使用:http ://maps.googleapis.com/maps/api/geocode/json ?

如果可能的话,我们可以将谷歌地图排除在外,而只是根据地理位置搜索数据库,这样会更好。

那么唯一的问题是你如何根据地理位置或其他东西进行匹配?你只是检查女巫一个更小还是更大,或者还有更多然后比较两者?

如果有人能很好地指导我如何做到这一点,那就太好了。

4

2 回答 2

2

首先使用地图并要求用户设置他的大致位置,获取该值,使用此代码获取到每个商店的距离:

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,数学家研究过,所以效果很好出色地 ;)

于 2013-05-30T15:58:23.707 回答
0

当您说“地理位置”时,您对该位置有哪些具体信息?我使用实体的坐标(纬度和经度)以及附近景点的大量坐标进行了类似的操作。因为 lat 和 long(十进制)只是...小数,所以通过找到 lat 和 long 值之间的最小差异来计算哪个点最接近另一个是一个方程。

例如,如果您想考虑点之间的旅行时间,这将变得更加复杂,但对于简单的应用程序,比较坐标应该就足够了。

于 2013-05-30T15:43:11.447 回答