Вопрос

Можно ли получить данные о местоположении из Гугл Гирс, API геолокации Google или любой другой API веб-локации (например, Огненный орел) в таком формате, чтобы другое программное обеспечение воспринимало его как устройство GPS?

Мне пришло в голову, читая эти ответы На мой вопрос относительно определения местоположения по Wi-Fi в Super User, что, если бы я мог эмулировать устройство GPS, многие из этих веб-сервисов могли бы действовать как GPS для «бедняков» для менее полезного программного обеспечения, которое в противном случае требует этого.

Является GPSD опция?

Предпочтительно OSX и Python, но меня интересует любая реализация.

Это было полезно?

Решение

Eсть очень похожая тема в списке рассылки Python, в котором упоминается Windows виртуальные COM-порты и обсуждаются возможности псевдотерминала Unix.Если приложения, которые вы хотите использовать, позволяют вводить определенный файл устройства tty, это может быть самый простой путь.(Если не считать необходимости просить авторов предоставить плагин API для того, что вы пытаетесь сделать, или покупать себе Bluetooth-мышь с GPS-приемником стоимостью 20 долларов США..)

Вы используете OS X?

Есть проект macosxvirtualserialport в коде Google, который обеспечивает графическую оболочку некоторых функций утилиты под названием Сокат.Я бы порекомендовал взглянуть на socat, если вы видите потенциал в маршруте псевдо-терминала.Я считаю, что вы могли бы использовать socat для связи канала из программы Python с псевдо-терминалом.

Большинство собственных приложений Mac будут запрашивать IOServiceMatching для устройства с kIOSerialBSDRS232Type, и я сомневаюсь, что псевдо-терминал будет отображаться как служба IOKit.

В этом случае, если вы не можете найти проект, в котором такая вещь уже реализована, вам нужно будет реализовать драйвер, как описано в этом Как создать виртуальный COM-порт нить.Если у вас возникнут проблемы с созданием драйвера устройства, вам захочется основать его на IOKit из-за этого вероятного запроса IOServiceMatching.Вы можете найти проект Apple16X50Serial, упомянутый в этом посте, вверху статьи. Список открытого исходного кода Apple (перейти в Главная страница и выберите более старую версию ОС, если вы хотите ориентироваться на версию до 10.6).

Если ваше приложение наиболее полезно с данными в реальном времени (например,приложение RouteBuddy, упомянутое в ветке списка рассылки Python может регистрировать текущие позиции), то вам нужно будет получать обновления из своих веб-источников (надеюсь, они поддерживают длительный опрос) и конвертировать их в базовый формат. НМЕА Приговоры РМЦ.Вы не хотите делать это изнутри кода драйвера.Вместо этого разделите свою работу на части ядра и пользователя, которые могут взаимодействовать, и помещайте как можно меньше кода в часть ядра.

Если вы хотите, чтобы приложения могли читать и записывать данные в эти веб-сервисы, лучше всего будет смоделировать устройство Garmin.Компания Garmin более или менее задокументировала свой протокол в файле IntfSpec.pdf, включенном в комплект поставки. SDK интерфейса устройства.Опять же, вам захочется разделить как можно больше кода на код пользовательского пространства.

Мне не удалось найти проект или утилиту, реализующую часть ядра виртуального последовательного интерфейса на основе IOKit, но я был бы удивлен, если бы где-то там не скрывался ни один из них.К сожалению, большинство ответов, которые я нашел на этот вопрос, были такими: разработчику велели заняться делом. написание кекста.

Другие советы

Я не совсем уверен, как выполнить то, о чем вы просите, но, возможно, смогу дать некоторое представление о том, как вы могли бы это сделать. начинать чтобы это сделать.Итак, вот:

Устройство GPS воспринимается большинством систем как не что иное, как последовательное устройство.COM-порт, если вы имеете дело с Windows, /dev/ttySx, если вы используете *nix.По определению, специфической задачей последовательного порта является потоковая передача данных по шине, по одному блоку за раз.Таким образом, логически следует, что если вы хотите имитировать присутствие устройства GPS, вам следует собрать данные, которые вы потребляете, и поместить их в поток, который каким-то образом действует как активный последовательный порт.

Однако есть некоторые сложности, которые следует учитывать:

  • Большинство GPS-устройств не просто отправляют данные о местоположении;есть также информация о местоположении спутников, качестве фиксации, пеленге и так далее.Опять же, никто не установил никаких правил, говорящих, что вы иметь чтобы сделать все эти данные доступными.Вероятно, это еще не все, но я признаю, что мне самому необходимо провести дополнительные исследования в этой области.
  • Я не уверен, насколько быстро вы можете получать данные при работе с Google Latitude и т. д., но любые задержки в получении определенно приведут к видимым паузам в потоке данных вашего «последовательного порта».Опять же, это может быть не такой большой сложностью, как кажется, потому что устройства GPS, как известно, в любом случае «передают» данные по шине, но я бы определенно следил за этим.Вы хотите быть уверены, что данных всегда будет избыток, а не недостаток.

По пути вам также придется преобразовать полученные координаты в действительные предложения GPS.Вы можете найти их спецификации, но я бы определенно подружился со стандартом NMEA — хотя это и несовершенный стандарт, с ним, кажется, все равно все согласны.

Надеюсь, это помогло вам, хотя бы немного.Есть ли какие-либо подробности, относящиеся к вашей проблеме, которые, по вашему мнению, могут быть полезны при ответе на этот вопрос?

Взгляните на GPS-ворота Франсона который позволяет, помимо прочего, подключаться к Google Earth (например, моделировать GPS и т. д.).Хотя это только Windows, но я думаю, что вы могли бы почерпнуть из него несколько полезных идей.

Я не особо вникал в это, но рассматривали ли вы возможность использования SDK Skyhook?Возможно, он предоставит вам кое-что из того, что вы ищете.Он доступен для всех основных настольных и мобильных ОС.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top