Gps Трекер На Qt, Карта И Отслеживание

Я решил попрактиковаться в программировании под Android с помощью Qt. В качестве темы я выбрал GPS-трекер.

Набор функций этого трекера:

  • провести измерения с GPS-приемника;
  • экспортировать трек в GPX ( Формат обмена GPS );
  • отображение трека на карте;
  • отображение времени в пути, длины пути, средней скорости.

Ниже под катом будет пример работы с картой в QtQuick.

Плагин, параметр плагина и карта

Базовые типы находятся в модуле Qt Location. Qt Location может использовать в качестве бэкэнда следующее: Работа с конкретным поставщиком карт вынесена в плагины ( Плагин ), которые настраиваются с помощью параметров ( Параметр плагина ).

Минимальный пример:

  
  
  
  
  
   

Plugin { id: plugin preferred: ["here", "osm"] required: Plugin.AnyMappingFeatures | Plugin.AnyGeocodingFeatures } Map { plugin: plugin width: .

height:.

}

Сначала я просто использовал Open Street Map:

Plugin { id: plugin name: "osm" }

Поставщик карт OSM по умолчанию: КартаКвест , которая недавно представила ключ разработчика.

Тут встал вопрос о переходе на что-то другое.



Плагин Open Street Map

В документации перечислена поддержка:
  • МапКвест;
  • ГромЛес ;
  • OpenStreetMap и сообщество.

Для того, чтобы использовать последний пункт, необходимо выполнить два условия: Установить параметр osm.mapping.host :

Plugin { id: mapPlugin name: "osm" PluginParameter { name: "osm.mapping.host"; value: " http://a.tile.openstreetmap.org/ " } }

Карта для использования типа карты MapType.CustomMap .

Для любителей магии:

Map { id: map plugin: mapPlugin activeMapType: map.supportedMapTypes[7] }

Чтобы не зависеть от положения элемента в списке поддерживаемые типы карт , вы можете сделать это:

Map { id: map plugin: mapPlugin zoomLevel: 16 width: item.width height:item.height property MapPolyline track } Timer { interval: 100; running: true; repeat: false onTriggered: { for(var i = 0; i < map.supportedMapTypes.length; ++i){ if(map.supportedMapTypes[i].

style === MapType.CustomMap){ map.activeMapType = map.supportedMapTypes[i]; } } } }



Отслеживать

Чтобы нарисовать дорожку, я взял элемент КартаПолилиния , и я создаю его динамически, чтобы очистить карту:

function start() { mapItem.clearMapItems(); mapItem.track = Qt.createQmlObject('import QtLocation 5.6; MapPolyline {}', item); mapItem.track.line.width = 6; mapItem.track.line.color = 'red'; mapItem.addMapItem(mapItem.track); } function appendCoordinate(position){ mapItem.center = position; mapItem.track.addCoordinate(position) } Map { id: mapItem plugin: mapPlugin zoomLevel: 16 width: item.width height:item.height property MapPolyline track }

При запуске очищаю карту, создаю трек и размещаю его на карте.

При добавлении новой координаты центр карты перемещается в указанное положение и трек удлиняется.

Результат:

GPS трекер на Qt, карта и отслеживание



GPS трекер на Qt, карта и отслеживание



GPS трекер на Qt, карта и отслеживание

Код доступен по адресу GitHub Теги: #qt5 #qt fast 2 #программирование #Qt

Вместе с данным постом часто просматривают: