Я пытаюсь получить геолокацию мобильного устройства на обычном веб-сайте, а не веб-просмотр приложения или чего-то подобного.Я получаю местоположение, но оно очень неточно, точность возвращается как 3230 или другое возмутительное число.Я предполагаю, что это в метрах, в любом случае это не совсем точно.Для сравнения, та же веб-страница на ноутбуке имеет точность 30-40.
Моя первая мысль была о том, что вместо поставщика GPS использовался сетевой провайдер, сообщавший мне, где я нахожусь в зависимости от местоположения башни идостичь.Небольшое исследование позже я нашел enableHighAccuracy
и установил его в опциях, которые я передаю.После включения этого я все еще не замечаю никакой разницы.
Вот 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>
Я тестирую это на рутированном MyTouch 3G под управлением Cyanogen 6.1 stable, Android 2.2и GPS включен.В случае, если у вас возникли проблемы с рутированием, у меня также было несколько друзей и коллег, которые пробовали веб-страницу на своих не рутированных устройствах Android версии 2.0+.Каждый телефон имел различные эффекты на точность, но ни один не был лучше, чем 1000, я приписываю это различным операторам связи.Я не тестировал (но в конечном итоге буду) iPhone или другие мобильные телефоны с поддержкой определения местоположения.