如何在不嵌入Google Map的情况下使用Geolocation或Similiar API查找一个地方与另一个地方之间的距离?

时间:2012-08-06 07:51:15

标签: geolocation google-places-api

我有一份旅游地点列表和我一起,我愿意写一个服务,可以告诉我哪个旅游地点离我最近,然后第二个最近,同样没有使用地图。我该怎么做。我的想法是,我有一个城市中所有旅游景点和他们的纬度/长度的数据库,我可能在城市的任何地方,想要找到哪个旅游景点离我最近,距离第二个最近也很明智,以便我可能打算根据我有多少时间来访问他们。我试过这个,发现谷歌地图api,但我不想显示相同的地图。或者为用户提供地图搜索。

2 个答案:

答案 0 :(得分:0)

您不需要Google地图。

  1. 通过geolocation API获取用户的位置。
  2. 映射点列表,使用great-circle distance算法计算用户与点之间的距离来扩充对象。
  3. 通过距离对列表进行排序。

答案 1 :(得分:0)

如果您不打算显示地图,则无法使用Google Maps API(它违反了他们的服务条款)。

如果您希望从没有Google地图或类似地址的地址获取lat / lon(因为类似的服务有类似的服务条款),那么您需要查找类似LiveAddress API的内容(显然我是应该透露我在SmartyStreets工作 - 这个例子适用于美国地址。国际地址需要不同的API。

像LiveAddress这样的API不要求您显示地图,返回地理坐标,并在返回其有效负载时验证地址的有效性。

这是Javascript example

<script type="text/javascript" src="liveaddress.min.js"></script>
<script type="text/javascript">
LiveAddress.init(123456789); // API key

// Make sure you declare or obtain the starting or ending lat/lon somewhere.
// This example only does one of the points.

LiveAddress.geocode(addr, function(geo) {
    var lat2 = geo.lat, lon2 = geo.lon;

    // Distance calculation from: http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points
    var R = 6371; // Radius of the earth in km
    var dLat = (lat2-lat1).toRad();  // Javascript functions in radians
    var dLon = (lon2-lon1).toRad(); 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
            Math.sin(dLon/2) * Math.sin(dLon/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; // Distance in km
});
</script>