我已经在必应地图v7中使用了精确圆,但是当我使用必应地图v8时,它不能工作。
如何在必应地图V8中创建圆、折线或精度圆
发布于 2016-05-28 01:18:27
必应地图V8开发工具包不再有GeoLocationProvider类。这是在6年前发布的v7中添加的。当它发布时,没有任何浏览器具有任何地理定位功能。现在,所有主流浏览器都有一个内置的HTML5地理定位API,不再需要v7中的这个变通方法类。您可以在此处找到一篇关于如何在V8中使用HTML5地理定位API的文章:https://msdn.microsoft.com/en-us/library/mt712802.aspx
这些示例目前还没有展示如何创建一个精确的圆,因为空间数学库还没有提供,这使得创建圆变得非常简单。这个库中有一个名为getRegularPolygon (docs:https://msdn.microsoft.com/en-us/library/mt712834.aspx)的静态函数。它返回一个位置数组,这些位置数组在具有指定半径的位置周围形成一个正多边形。如果生成一个具有30个或更多点的正多边形,它看起来将像一个圆。然而,这个空间数学函数中有一个bug,因为它意味着默认使用米,而不是使用KM。我已经整理了一个代码样本,它在用户位置周围画了一个精确的圆圈,并为当前的bug添加了一个次要的工作。这项工作将继续工作,即使在错误修复后,所以你不需要担心它在未来破坏。以下是代码示例:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script type='text/javascript'
src='http://www.bing.com/api/maps/mapcontrol?callback=GetMap'
async defer></script>
<script type='text/javascript'>
function GetMap() {
var map = new Microsoft.Maps.Map('#myMap', {
credentials: 'Your Bing Maps Key'
});
//Load the spatial math module
Microsoft.Maps.loadModule("Microsoft.Maps.SpatialMath", function () {
//Request the user's location
navigator.geolocation.getCurrentPosition(function (position) {
var loc = new Microsoft.Maps.Location(
position.coords.latitude,
position.coords.longitude);
//Create an accuracy circle
var accuracyRadiusMeters = position.coords.accuracy;
var path = Microsoft.Maps.SpatialMath.getRegularPolygon(loc, accuracyRadiusMeters/1000, 30, Microsoft.Maps.SpatialMath.KM);
var poly = new Microsoft.Maps.Polygon(path);
map.entities.push(poly);
//Add a pushpin at the user's location.
var pin = new Microsoft.Maps.Pushpin(loc);
map.entities.push(pin);
//Center the map on the user's location.
map.setView({ center: loc, zoom: 17 });
});
});
}
</script>
</head>
<body>
<div id="myMap" style="position:relative;width:600px;height:400px;"></div>
</body>
</html>
https://stackoverflow.com/questions/37453296
复制相似问题