找到最近的主要城市

时间:2011-03-21 21:13:56

标签: php geolocation

我正在建立一个网站,允许用户找到我们最近的汽车旅馆位置(其中有26个位于美国各地)。我列出了他们所在的城市名单。

我想在用户登录首页时显示最近的位置。例如,如果用户来自新泽西州纽瓦克,他将会看到来自纽约市汽车旅馆的图片,如果用户来自加利福尼亚州圣何塞,他将会看到旧金山的图像。

最好的方法是什么?有没有人知道网上那些显示我正在尝试做什么的例子?这甚至可能吗?

我看到Groupon和LivingSocial使用这个,所以我想为什么我不试一试。 :)

6 个答案:

答案 0 :(得分:1)

您首先需要将汽车旅馆的纬度/经度坐标存储在数据库中 - 使用谷歌地图,26天不会花太长时间。

然后使用IP2Location - http://www.ip2location.com/developers.aspx

之类的内容获取访问者位置

然后计算访客与您的每个汽车旅馆之间的距离 - http://sebastian-bauer.ws/en/2010/12/12/geo-koordinaten-mysql-funktion-zur-berechnung-des-abstands.html(以英文显示...)

答案 1 :(得分:1)

如果你正在使用apache,你可以试试geoip。

http://www.maxmind.com/app/mod_geoip

答案 2 :(得分:0)

您可以尝试Geolite city。它是免费的(带有归属条款)或者也可以购买。这减少了“找到最接近用户IP地址的城市”问题,以“找到距离已知城市最近的城市”。

同一家公司提供城市数据库,其中包含经度/纬度。这应该可以解决问题。

答案 3 :(得分:0)

我使用此代码从地址表中计算googlemaps纬度和经度的距离。

Geocode是一个函数,它在给定地址字符串的情况下从谷歌地图api返回经度和经度数组,在拉链下方的情况下。您的位置表必须包含lat和lng列。在这个例子中,我使用了十进制(8,5)类型,但您也可以使用点列类型。

$starting_location = geocode($zip);
$distance = '(3959 * acos(cos(radians('.$starting_location['latitude'].')) * cos(radians(lat)) * cos(radians(lng) - radians('.$starting_location['longitude'].')) + sin(radians('.$starting_location['latitude'].')) * sin(radians(lat))))';
$location_row = query('SELECT location_id,addr,addr2,city,state,zip,phonenumber,'.$distance.' AS distance FROM location_info WHERE '.$distance.' is not null ORDER BY distance LIMIT 1');

如果我错误地链接到另一个人的答案,请纠正我,但我想我从这个问题得到了指示:Fastest Way to Find Distance Between Two Lat/Long Points

答案 4 :(得分:0)

您可以使用MaxMind.com上的免费数据获取最近的城市IP地址(我相信您可以支付更准确的数据库)。如果您可以获得城市的纬度/经度,并将其与您获胜的每个汽车旅馆的纬度/经度进行比较:)

答案 5 :(得分:0)

你想要的是存储汽车旅馆的纬度/经度坐标,然后让用户在浏览器中输入他的位置,很可能是一个邮政编码,然后你想使用harvesine formule计算用户和用户之间的距离汽车旅馆显示附近的汽车旅馆。或者,您可以使用IP来协调IP2location等服务以获取用户位置。