У меня есть mapview, где я хочу отследить текущее местоположение пользователя. GPS, а также 'беспроводные сети использования' активируется в моих настройках телефона. Тем не менее, так как я являюсь внутренним, я не добираюсь, GPS фиксируют, поэтому местоположение определяется через сеть; пятно Wi-Fi доступно.
У меня есть выполнение приложения Google Maps, а также мое выполнение приложения.
Странно, текущее местоположение отличается между Google Maps и моим приложением, где Google Maps очень точна, в то время как в моем приложении местоположение так или иначе от нескольких 100 метров.
В моем приложении я в основном делаю следующее (для отладки целей теперь):
1) первоначально поместите один маркер в карту: геоточка, полученная через locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
2) первоначально поместите другой маркер в карту: геоточка, полученная через locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Это поместит последние известные местоположения обоих поставщиков на карту (в конечном счете в последний раз известный снаружи моего приложения).
3) затем для регулярных обновлений (так как я не получаю GPS, фиксируют так или иначе внутренний здесь), я делаю:
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, baseLocationListener);
Вы видите для частоты и расстояния, я передаю 0 параметрических усилителей в обоих случаях.
В декларации приложения даны следующие разрешения:
android.permission.ACCESS_COARSE_LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_MOCK_LOCATION
На самом деле мой baseLocationListener действительно становится названным, который я вижу в журнале, но обновленное местоположение является так или иначе тем же как последней известной текущей позицией (LocationManager. NETWORK_PROVIDER), тот же lat/lng.
Я думал, возможно, что я пропустил что-то или пропустил параметр или установку, или мой код имеет ошибку. Поэтому я установил некоторого другого (3 всего) приложения LBS из Android Market, которые также показывают местоположение текущего пользователя. Текущие местоположения, отображенные в тех приложениях, равняется тому в моем приложении - и они - все приблизительно 100 метров прочь - но по крайней мере все равно.
См. снимок экрана здесь: снимок экрана http://img33.imageshack.us/img33/8679/mapproblem.png
http://img33.imageshack.us/img33/8679/mapproblem.png
Теперь я задаюсь вопросом:
1) как я понимаю, getLastKnowLocation в масштабе всей системы и не всего приложения, почему там различия между местоположением в картах Google и всеми другими приложениями?
2) разве Google Maps не обновляет lastKnownLocation поставщика?
3) Google Maps использует другого пользовательского поставщика местоположения (т.е. из-за лицензирования причин) кроме GPS_PROVIDER или NETWORK_PROVIDER, как они находятся в SDK?
4) то, как действительно достигают того же точного результата с NETWORK_PROVIDER как Google Maps, делает?
Кажется, я нашел ответ, хотя и не решение. Похоже, что проблема заключается в качестве данных различных поставщиков карт, которые используются для Google Maps и MapView в SDK, которые отличаются.
Координаты плиток карты кажутся не очень точными, как и в публичных google maps web api / tiles.
Смотрите этот скриншот для примера, где я прикрепил одну и ту же геоточку. скриншот http://img339.imageshack.us/img339/2793/gmaps2.png http://img339.imageshack.us/i/gmaps2.png/
Карта, использующая публичные карты api, отличается на несколько сотен метров. Похоже, с этим придется смириться! :(
Карта и спутниковые изображения в Google Maps отклоняются на пару метров, но я не думаю, что они должны отклоняться так сильно. Похоже, что это пара сотен метров.
В зависимости от того, как вы получили свою позицию, будет зависеть то, какую позицию вы получите. Насколько я понимаю, это три уровня получения данных.
GPS и Сеть определяются триангуляцией. GPS является наиболее точным. WIFI определяется с помощью "whois", адрес приобретается, а затем геокодируется, что иногда бывает совершенно неточным.
Некоторые телефоны говорят, что они GPS, но, скорее всего, это псевдо-GPS, как iPhone 1.