2010-07-20 1 views
8

У меня есть карта, где я хочу отслеживать текущее местоположение пользователя. GPS, а также «использование беспроводных сетей» активируется в настройках моего телефона. Тем не менее, поскольку я внутри, я не получаю GPS-исправление, поэтому местоположение определяется по сети; Wi-Fi место доступно.Google Maps & apps с mapview имеют разные текущие позиции

У меня работает приложение Google Maps, а также мое приложение.

Странно, что текущее местоположение отличается между Google Maps и моим приложением, где Карты Google очень точны, в то время как в моем приложении местоположение находится как-то с нескольких метров на 100 метров.

В моем приложении я в принципе сделать следующее (для отладки сейчас):

1) первоначально разместить один маркер на карте: GeoPoint извлекаться через 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, которые также показывают местоположение текущего пользователя. Текущие местоположения, отображаемые в этих приложениях, равны таковым в моем приложении - и все они находятся на расстоянии около 100 метров - но, по крайней мере, все равно.

Смотрите скриншот здесь: screenshot 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?

+0

Возможно ли, что карты google используют только последнее место, полученное от GPS, поскольку через сеть известно, что вы далеко не ушли? Другими словами, приложение google maps знает, что вы вошли внутрь (поскольку GPS ушел, но сетевое местоположение по-прежнему доступно), и поэтому он хранит последнюю известную точку GPS и использует ее? – Nate

+0

Я так не думаю. Одновременно я запускал все приложения, поэтому позиция не должна отличаться в одно и то же время. Всего несколько минут назад я также проверил его снаружи, а также отправился на автобусе на более длительное расстояние. API-интерфейсы API Google Maps определенно неточны, см. Мой ответ, ниже которого в основном это доказывает. Также я тестировал с GPS полностью с использованием только GSM/Wi-Fi, все это приводит к тому же. Кроме того, getLastKnowLocation является общесистемной, а не прикладной. Если Google Maps использует его, я должен также получить ту же позицию в своем приложении. –

+0

На самом деле, я, вероятно, получаю тот же lat/lng из getLastKnowLocation, что и Карты Google, но он просто отображается неверно на разных неточных точках карты (см. Ответ ниже в качестве примера из веб-api). –

ответ

2

Я думаю, что нашел ответ, хотя и не решение. Похоже, что проблема заключается в качестве данных другого поставщика карт, которые используются для Карт Google и MapView в SDK, которые отличаются.

Координаты карт плитки не очень точны, как в общедоступных google maps web api/tiles.

Посмотрите на скриншот для примера, где я привязал ту же точку геометрии. screenshot http://img339.imageshack.us/img339/2793/gmaps2.png http://img339.imageshack.us/i/gmaps2.png/

Карта с использованием общедоступной карты АФИ от нескольких сотен метров. Кажется, нам просто нужно жить с этим! :(

+0

Обновление: интересно, спутниковый вид кажется довольно точным, только вид на улицу нет.Средства, накладывающиеся на спутник с видом на улицу, похоже, не совпадают, возможно, из-за разных поставщиков контента. Лучше всегда использовать спутниковый вид, по крайней мере, в сельских районах, где картографические материалы являются неточными. –

0

Изображения карты и спутниковые в Google Maps выключен на пару метров, но я не думаю, что он должен быть выключен, что много. Это, кажется, пару сотен метров.

В зависимости от как вы приобрели ваше положение будет диктовать, какую позицию вы получите. насколько я понимаю, эти три уровня приобретения.

  • GPS
  • Сеть
  • WIFI

GPS и сеть определяются триангуляцией. GPS является наиболее точным. WIFI выполняется с использованием «whois», адрес приобретается, а затем геокодируется, будучи порой неточным.

Некоторые телефоны говорят, что они GPS, но они, скорее всего, Псевдо-GPS, как iPhone 1.

+0

Спасибо за объяснение, но на самом деле это не объясняет поведение, о котором я говорил выше. «Google Maps» сам по себе не является проблемой, фактически, на Картах Google, местоположение очень точное, это только с MapView внутри моего приложения. Конечно, точность gps, wifi и gsm отличается (хорошее описание здесь, кстати: http://forum.sdx-developers.com/android-2-1-development/cdma-lockup-wifi-use-wireless- network-and-gps!/msg22834/# msg22834), но он должен быть таким же, как в Google Maps, а также в моем MapView в моем приложении. См. Мой ответ ниже и комментарии выше, это логическое объяснение, которое я нашел. –

+0

> «Кажется, это пара сотен метров».: Но на самом деле: несколько счетчиков hundert действительно имеют значение, если ваше приложение делает пешеходную навигацию в городе, где все улицы находятся поблизости. С сотен метров от всей навигации бесполезно. –

2

Я знаю, что ваш пост один год назад, но ответ я считаю, что: Google картографических данных в Китай смещен или искажен. Я замечаю, что вы находитесь в Южном Китае. Китайское правительство требует этого по некоторым соображениям безопасности. Here is the Google search results.

Алгоритм преобразования неизвестен. Вероятно, вы можете это сделать Google и пожелать вам удачи.

+0

Привет, Франк, спасибо за подсказку, я не знал об этом, но это имеет смысл. –

 Смежные вопросы

  • Нет связанных вопросов^_^