我正在尝试在常规网站中获取移动设备的地理位置,而不是应用程序的webview或任何本地的。我正在获得一个位置,但它非常不准确,准确性可以追溯到3230或其他一些令人发指的数字。我假设它以米为单位,无论哪种方式都不够准确。相比之下,笔记本电脑上的同一网页的准确度为30-40。
我的第一个想法是它使用网络提供商而不是GPS提供商,告诉我我在哪里基于塔位置和范围。稍后我进行了一些研究,发现enableHighAccuracy
并在我传递的选项中将其设置为true。在包括之后,我仍然没有注意到差异。
这是测试页面的HTML / javascript:
<html>
<head>
<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript">
function OnLoad() {
$("#Status").text("Init");
if (navigator.geolocation) {
$("#Status").text("Supports Geolocation");
navigator.geolocation.getCurrentPosition(HandleLocation, LocationError, { enableHighAccuracy: true });
$("#Status").text("Sent position request...");
} else {
$("#Status").text("Doesn't support geolocation");
}
}
function HandleLocation(position) {
$("#Status").text("Received response:");
$("#Position").text("(" + position.coords.latitude + ", " + position.coords.longitude + ") accuracy: " + position.coords.accuracy);
var loc = new Microsoft.Maps.Location(position.coords.latitude, position.coords.longitude);
GetMap(loc);
}
function LocationError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
alert("Location not provided");
break;
case error.POSITION_UNAVAILABLE:
alert("Current location not available");
break;
case error.TIMEOUT:
alert("Timeout");
break;
default:
alert("unknown error");
break;
}
}
function GetMap(loc) {
var map = new Microsoft.Maps.Map(document.getElementById("mapDiv"), {credentials: "Aj59meaCR1e7rNgkfQy7j08Pd3mzfP1r04hGesGmLe2a3ZwZ3iGecwPX2SNPWq5a", center: loc, mapTypeId: Microsoft.Maps.MapTypeId.road, zoom: 15});
}
</script>
</head>
<body onload="javascript:OnLoad()">
<div id="Status"></div>
<div id="Position"></div><br/>
<div id='mapDiv' style="position:relative; width:600px; height:400px;"></div>
</body>
</html>
我正在使用运行Cyanogen 6.1稳定版,Android 2.2和GPS的支持MyTouch 3G上进行测试。如果root是一个问题,我也有各种各样的朋友和同事尝试在他们的非root 2.0+ Android设备上的网页。每部手机对准确性有不同的影响,但没有一个优于1000,我将其归因于不同的运营商。我没有(但最终会)使用iPhone或其他支持位置的手机进行测试。