QTMapWidget

This page is intended to collect thoughts about a Qt map widget.

Contents

[edit] Why a QTMapWidget?

Maemo/Meego devices are mobile GPS based devices. A demand for mapping services is thus very obvious. The current situation in Maemo 5 shows that leaving this task to the individual developers has several disadvantages for the developer as well for the end user.

[edit] Disadvantages of current Maemo5 situation

In Maemo5 there is no generic map widget. Thus various developers came up with their own solutions. Some of these were based on existing widgets (e.g. osm-gps-map), are ports of previous maemo4 projects (mappero) or are completely new solutions written from scratch. Few of these share the same map widget.

  • Every developer had to implement his own solution
  • Map tiles are stored/cached in different locations on the device
    • Waste of bandwidth (one widget cannot re-use data cached by another one and needs to re-download it)
      • Some map servers have limited bandwidth [1], one unified map widget may allow easier caching at one proxy server of all applications that use it.
    • Waste of flash space as the same data is stored separately by different map widgets
  • No central place for map cache maintenance
    • No way to globally add new map sources
    • No way to flush the map tile cache
    • No way to prefetch map tiles for offline usage
  • Individual look and feel for widgets addressing the same problem
  • No interoperability (e.g. one app cannot display the track that was captured while another one was running)
  • Some widgets don't work behind network proxies
  • None of the existing widgets is really developer friendly

[edit] Wishlist

If you are a developer and are interested in using such a widget. What would be the things you really want to have? What do you explicitly don't want to see in such a widget?

  • Support for various map sources
    • Classic tile based sources (openstreetmap [2], google [3], yahoo [4], virtual earth [5])
    • WMS data [6]
    • Vector data
      • OSM vector data ("planet file" [7])
      • Map data stored by OVI maps [8]
  • Plugin concept for map sources
  • Built-in location support, options:
    • GPSD: GPS position
    • Liblocation: position (GPS, network), compass and gyro
    • QT mobility location: position (GPS, network), compass and gyro
    • Ability to provide location to main application
  • Overlays
    • Static overlays (don't move nor zoom with the map)
      • Current position in textual representation
      • Map center ("cross hair")
      • Scale (metric as well as imperial)
      • Zoom buttons
      • Map source selection
    • Dynamic overlays (move and zoom with the map)
      • Waypoints incl. icons
      • Tracks incl. a dynamic one built from GPS data
      • Location indicator (position, direction and precision)
  • Separate maintenance tool
    • Limit/monitor tile cache size
    • Clean tile cache
    • Preload tiles for offline usage
    • Refresh tiles
    • Perhaps as a control panel plugin

[edit] Related resources

Qt mobility location [9]

[edit] Existing widgets

We are not the first ones to work with maps under Qt. What projects exist? Can they be re-used? What are their advantages and disadvantages?

[edit] QMapControl [10]

Pros:

  • Lightweight
  • Runs out of the box on Maemo5
  • Supports WMS

Cons:

  • Not actively maintained atm
  • Lacks basic functionality (GPS integration, live track capture, ...)
  • Has some rendering problems under Maemo (track display)
  • Google maps integration broken

[edit] Marble [11]

Pros:

  • Very active big developer community. Some core developers are involved with the Maemo / MeeGo project already. There are currently 3 GSoC developers working exclusively on Marble.
  • Support for Maemo 5 and MeeGo. Early Maemo 5 packages available.
  • Lightweight for what it does (100000LOC).
  • Used in KDE as a generic map widget already.
  • Supports OpenStreetMap, Google Maps, Yahoo, Custom Server Layouts. Basic WMS support.
  • Online Routing support (via e.g. ORS).
  • Support for position providers as plugins (gpsd, GeoClue, liblocation).
  • Support for KML, GPS (support for OSM in the works).
  • Different projections (sphere, Mercator, Equirectangular).
  • Qt-Style API throughout the Marble Library.

Cons:

  • Performance improvements for Maemo 5 necessary. However these are in the works.
  • While the overall quality of the code is pretty good there is still some legacy code in a few places.
  • I am very concerned regarding battery usage with this 3d approach as it puts a huge load (currently 100%) on the CPU even at low refresh rates --harbaum 18:40, 12 June 2010 (UTC)

[edit] Count me in!

We need some people who would like to contribute. Please state here if you want to contribute some of your time.

Widget coding:

  • Till Harbaum

I have an application i'd like to use such a widget in:

  • Till Harbaum (tool to visualize contact positions and to track friends)

UI-Design, Mockups: