使用 Bing 或 Google Maps API 获取用户的位置(纬度、经度)

Posted

技术标签:

【中文标题】使用 Bing 或 Google Maps API 获取用户的位置(纬度、经度)【英文标题】:Get user's location (latitude, longitude) with Bing or Google Maps API 【发布时间】:2012-02-13 10:26:06 【问题描述】:

有没有办法使用 Bing Maps API 或 Google Maps API 检索用户的纬度和经度。我想我看到了一个代码 sn-p,其中使用“自动定位我”功能在地图本身上标记用户:

var geoLocationProvider = new Microsoft.Maps.GeoLocationProvider(map);  
geoLocationProvider.getCurrentPosition(); 

但是该函数不返回任何数据,它只是在地图上设置位置,而我需要该位置来执行一些计算,即计算预定义的地点列表中哪个最接近当前用户位置。除此之外,是否有任何 API 可以计算作为输入提供的两个位置(纬度、经度)之间的距离?

谢谢, 帕维尔

【问题讨论】:

【参考方案1】:

html5 GeoLocation 获取当前位置的经纬度。 http://www.w3schools.com/html/html5_geolocation.asp

<!DOCTYPE html>
<html>
<body>

<p id="demo">Click the button to get your coordinates:</p>
<button onclick="getLocation()">Try It</button>

<script>
var x = document.getElementById("demo");

function getLocation() 
    if (navigator.geolocation) 
        navigator.geolocation.getCurrentPosition(showPosition);
     else  
        x.innerHTML = "Geolocation is not supported by this browser.";
    


function showPosition(position) 
    x.innerHTML="Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude;  

</script>

</body>
</html>

【讨论】:

【参考方案2】:

获取您的位置不是 Map API 的一部分。相反,请使用HTML5 GeoLocation API 获取您的位置。一个例子是:

 navigator.geolocation.getCurrentPosition(locationHandler);

 function locationHandler(position)
 
   var lat = position.coords.latitude;
   var lng = position.coords.longitude;
 

要计算 lat/lng 点之间的距离,请查看 http://www.movable-type.co.uk/scripts/latlong.html。

// Latitude/longitude spherical geodesy formulae & scripts (c) Chris Veness 2002-2011                   - www.movable-type.co.uk/scripts/latlong.html 
// where R is earth’s radius (mean radius = 6,371km);
// note that angles need to be in radians to pass to trig functions!
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var lat1 = lat1.toRad();
var lat2 = lat2.toRad();

var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

【讨论】:

非常感谢!您能否也看看后续问题:***.com/questions/8917904/… ?谢谢! 万一有人得到未定义的 toRad,请检查此答案:***.com/a/5260472/879821

以上是关于使用 Bing 或 Google Maps API 获取用户的位置(纬度、经度)的主要内容,如果未能解决你的问题,请参考以下文章

Win8.1应用开发之Bing Maps

Google Maps API 错误:此 API 密钥无权使用此服务或 API。地方 API 错误:ApiTargetBlockedMapError

从 google maps 地方 api 读取 json 文件(使用 javascript 或 php)

翻译 Bing Maps v8 方向

如何在google maps api中为省或某个城市提供一些颜色?

使用 google maps API 或 OpenLayer 渲染大型非地图图像