|Author:||Harald Mueller, Kai Krueger, S. Hochmuth, Markus Baeurle, Jyrki Kuoppala & others|
very portable navi for Android and J2ME mobile phones, uses offline vector maps, audio navigation
The GpsMid name comes from GPS and MIDlet that is an java (J2ME) applet that doesn't work inside a web browser but on a JVM on a mobile phone. Originally create for the J2ME platform, GpsMid now works also on Android.
GpsMid is open source and licensed under the GPL, version 2.
- 1 Introduction
- 2 Map
- 3 install gpsmid and map
- 4 user manual
GpsMid is a map application for Java-enabled mobile phones. It provides vector based rendering of OSM data, which gets pre-compiled into an efficient binary representation and directly linked into the midlet together with the application. This allows it to work even on those phones that prevent file system access to non signed applications, such as some of the Motorola phones. GpsMid also works on the Sony PSP (homebrew) with PSPKVM (currently with Sony's GPS only).
- GPS localisation using GPS (external via bluetooth, builtin, SiRF, Cell-id based proximity (using OpenCellID))
- Vector rendering, arbitrary map zoom, auto rotating in movement direction
- Customization of rendering styles through a StyleSheet
- Search for road / POI names, search for closest POI of some category
- Recording GPX tracks, storing waypoints
- Turn-by-turn voice guided navigation (supporting different modes of transport e.g. cycling and walking)
- Adding new POIs to OSM directly from your phone.
- Editing tags on existing ways.
- OpenCellID logging (an interface to the upload api is found here)
- Accessibility for blind persons is in work for the Android version.
Supported / Unsupported Phones and other devices
GpsMid works on a large set of smart and feature phones as well as some other devices supporting Android or mobile java (J2ME). More specifically it works on those J2ME phones supporting the following specs:
- Connected Limited Device Configuration (CLDC-1.1)
- Mobile Information Device Profile (MIDP-2.0)
- optionally to get the most out of GpsMid the following Java Specification Requests are useful (JSR 179 for internal gps, JSR 82 for Bluetooth, JSR 75 for File access, JSR-135 for taking geocoded photos and enabling voice guided navigation).
GpsMid works on a wide variety of platforms. It runs on Android as well as J2ME, and thanks to the increasing number of available JVMs, it is becoming possible to run the GpsMid J2ME version on a variety of devices other than just phones, such as for example SatNavs, Sony PSPs and Nokia N8xx internet tablets. More details on running GpsMid on these devices can be found here - instructions for running on WinCE devices here
There are also some pre-bundled maps available for some selected regions that can simply be copied over to the phone and are ready to use. If your city/region isn't amongst them, you can ask for it to be added on the forums.
Report bugs at 
Feature requests at 
Discussions at 
Access to GIT repository via 
- The latest version of GpsMid can be found here. Changelog
- Run OSMtoGPSMid on your PC to create your map midlet and install it on your phone, instructions on the GPSMid site.
GpsMid must be installed with map call midlet so see chapter after map chapter call install gpsmid and map
As an offline map application, GpsMid needs to store the data on the device. GpsMid uses its own binary data format to be as efficiently as possible in size requirements, as well as optimise for routing. Therefore, the raw data from OpenStreetMap has to be converted and bundled into a map data bundle. This is done by using the Osm2GpsMid converter that runs on your PC (not your phone)
As many (older) java phones are / were not very good at dealing with external files, the default method is to bundle the data into the application .jar file. However, more recent versions also support splitting out the application and the map data.
Download pre-bundled map
For easy use (don't need to do the bundling step your self), there are some pre-bundled maps available for download that can directly be uploaded to your phone.
- Download pre-bundled maps for a selected region. If your city / region isn't amongst them, you can ask for it to be added on the forums.
- freemap Slovakia let you download prebuilt midlets for various Slovak cities
Create custom map
To create GpsMid build with map data for your own regions, you first have to download the raw data from OpenStreetMap (*.osm). Then in the conversion using Osm2GpsMid, a subset of the downloaded data (defined by up to 9 rectangular regions) will be included in the generated bundle.
Raw OSM data
There are a number of options to obtain the raw data of OSM.
Using something other than planet extracts is strongly discouraged other than for very small regions (a few streets).
Configuring your map bundle
Osm2GpsMid provides a graphical interface to selecting most of the configuration options for the bundling process. For more advanced use, there is also the option to configure the conversion process through a text file (.properties file).
One of the parameters to set is the "Phone capabilities". Although java was designed to write once run everywhere, not all implementations of Java on phones is fully compatible with each other. Therefore GpsMid provides a couple of different options to increase you chance of it working.
In nearly all cases though, Generic-full or Generic-editing should be used, as it provides the most comprehensive set of features.
|app||Bluetooth( BT) GPS||BT File Transfer||JSR 179 internal GPS (1)||GPX parsing||Online capabilities|
1: JSR-179 functionality is only available in the midlet if you set "app=GpsMid-Generic-full" in the .properties file. Note: This is not required anymore with Osm2Gpsmid 0.4.51 or higher as optional JSR-179 functionality is by default compiled in
- the tool
You ll need
- java virtual machine for use java software specific OS
- OSm2GpsMid.jar to convert osm/properties files into jad and jar file
- set the environnement variable to not explicit use the all path to java executable locate by default in "C:\Program Files\Java\jre1.6.0_03\bin\" so we can use OSm2GpsMid.jar by write in comandline window ( start|Execute |cmd |copy ... paste ..custom sentecne)
java -Xmx1024M -jar OSm2GpsMid-version.jar osmvector.osm osmprop.properties
This will create two files of with extension name .jar and .jad. The two must be copy to the filesystem of the phone; the smaller file (jad file) work like an installer for phone that don't have one by default . so if launch ( open) jar file don't work try to launch jad file !! The nmae of the two file are the same and the scheme is
"bundle.name"-"midlet.name"-"version".ja(d|r) of Osm2GpsMid that have been use ( see chapter on nokia)
output error message during compile osm/properties input file
Error: Tile is unsplittable, but too large
see chapter call install gpsmid and map
install gpsmid and map
The jar file GpsMid and map could be install on real device or emulator
Installation depend of the java device you use and the software bundle with your phone to manage java installation software ( default executable file on PC OC before install have specific extension like cab in window mobile , sys in symbian and jar jad for j2me). See for example the nokia chapter.
On your device ;set the security options for GPSMid on your phone to allow it to connect to bluetooth, access multimedia, and read and write user data with as little user interaction as possible (On my Sony-Ericksson K510i you do this in the "Permissions" menu option on the GPSMid file).
Find the directory where the phone software have install your GpsMid and then copy the map file to the directory.
Pre-bundled midlets are currently only provided for a few demonstration areas due to space restrictions. You can however easily create a bundle for your custom region by yourself. Look at Osm2GpsMid to find out how to create such a bundle. Each jar-file is a bundle of the application itself and some map data. Either send the midlet via bluetooth or simply copy it (.jar and .jad file) to the correct directory on your device. Choose install new and select the jar file.
|....OS||.... device||.... binary||.... Synchronisation sdk-soft||authorities||sign soft/url||installer / download|
|Window CE 4.2||HTC||.cab||[Visual studio]||Active sync ( 2000-xp)|
|window Mobile||HTC||.cab||Window Mobile device Center|
|Research In Motion’s||Blackberry||.zip||BlackBerry Desktop manager Software|
|apple||iphone ipod||.dmg||itunes||Nikita /||itunes|
|Sun||device with JVM||.class .jar .jad||MIDPSun Wireless toolkit [carbide j] [OpenSSL]||ThawteVerisign||web|
|qualcomm||brew||web||opera brew browser|
- see the step (gui/shell pc/mobile-device) to install midlet on the nokia n95 device here
- '2468' : move map
- '5' key ...: center map
- '1/3' key : zoom in out .
- '*' Opens a setup dialog to configure some display options
- '*' hold for a second to jump to the waypoint menu
- '0' toggles between full screen mode
- '0' hold for a second to toggle track recordings on or off
- '#' key : start recording voice
- '#' double clicking : Stop recording voice
- '#' hold for a second to jump to the tracklog menu
- '#' Keeps the backlight on even with no key activity
It is possible to use GPSMid for Audio Mapping as it allows the user to record sound clips, and creates a GPX waypoint associated with each clip. The audio clips and GPX file can then be processed for use in JOSM for mapping.
The process for doing is explain below:
- Start GPSMid and associate it with your bluetooth GPS receiver (in the settings screen). Also set the GPX output to go to C:\Other in the settings screen, then go to the map screen.
- Record an audio clip by double clicking the '#' key. (Note that currently you have to say 'yes' to a few questions about allowing the program to access user data - I'll try to make this go away in a future version). The first time you do this you may also have to select the destination directory for the audio clips. I use C:\Other.
- Stop the recording by double clicking the '#' key again.
This process leaves you with a lot of audio clips in your phones memory, and the GPX waypoints hidden in GPSMid's own storage area. To get these in to JOSM on your PC, do the following:
- In GPSMid, go to 'Manage Waypoints' from the map screen. Select 'Send All'. I have this configured to write to C:\Other - the same place as the audio clips go. This puts a file 'waypoints.gpx' in C:\Other on the mobile phone.
- Exit GPSMid and use your phone's file manager to send the files to your PC, using either bluetooth or a USB connection. Store the GPX file and the audio clips (*.amr) in the same directory on your PC.
use in josm
- To use these in JOSM, the audio files need converting into .wav files, and the GPX file needs <link> tags adding to point to the audio files. A little python script amr2wav can be used to do this. Just running "amr2wav" in the directory containing the files should be all you need to do [Note though that you need ffmpeg to do the conversions. It might be necessary to re-compile ffmpeg from source to add amr support]. This creates a .wav file for each .amr file referenced in the GPX data, and a new GPX file "waypoints_wav.gpx".
- Start JOSM and open "waypoints_wav.gpx". You should see a marker for each audio file. Clicking on the marker should play the clip.
- Job done!
Notes: Although having to say 'yes' to allow the application to write user data sounds like a real pain, it is surprising how easy it is to get used to how many times you have to press the OK key. It also appears that the later Sony-Ericsson phones that use "Java Platform 8" allow you to switch off the prompts for file access - I have ordered one to see if this works.
GpsMid's editing capabilities
Currently GpsMid is not a full editor, but does at least allow some data maintenance in the field. Currently, it allows you to select a way in the map and edit or add tags of that way and directly upload the changes to the main OpenStreetMap database. This can be useful for example to quickly add a missing name, a speed restriction, set it to oneway or add some of the other meta data that is often still missing from ways.
The way it works is to store the osm way id in the offline map data. If you then select that way for editing, it will connect via the internet to the API and download the current way data and display its tags. Once you have added or corrected any tags, you can upload the way and commit it to the database. Given that it retrieves the tags freshly from the database, not having updated the map of GpsMid shouldn't be problematic, although having fresh maps is preferable
As this feature requires internet access on the phone, and one of GpsMids main features is to be an offline application, these features aren't enabled by default. In order to enable them, you need to choose the following settings in your .properties file with which you create your midlet. You will need to set the app parameter to app=Generic-editing (or with Version 0.5.00 app=GpsMid-Generic-editing) to enable online features in GpsMid and you need EnableEditing=true (or enableEditing=true depending on the version of GpsMid) to include the necessary information for editing in the map build. With that you should be ready to start editing the map on the go.
So far the editing support is limited, but hopefully more features, especially POI editing will follow soon.
File extensions that could be used in this article and are useful with GPsMid (creating map, recording data).
- GPX :file for storage lat/long/name location
- amr : audio file compatible with many mobile devices and software ( [amr2wav]/nokia audio/ real player)
- png : read raster image for poi
- .xml/.dtd read have default name style-file that define default display style but can be custom ( see GpsMid/StyleSheet )
- osm : specific vector format file of osm map for storage data directly on filesystem instead database.
- properties : file use to specify boundingbox, stylesheet and tag information that is used by GpsMid.
This patch integrates the presets with GpsMid so that the user can add the tags to the positioning data directly from the mobile phones.The tagged data is then can be sent to the server as SMS. A server side utility called "SmsImporter" is provided which generates the OSM files from the received SMS. The GpsMid also gets option to export the OSM tag to a OSM file.
1) Menu "Recordings\Save OSM Waypoint" Provides a list of preset groups and preset items. A tag entry dialog is presented once the preset item is selected.After entering the tag data, an option is provided to send the SMS to a number which is configurable. 2) "Manage Waypoints\Export all OSM waypoints" Exports the waved waypoints to OSM format. 3) "Manage Waypoints\Edit" Allows the editing of already entered tag data.
1) Osm2GpsMid This application gets following new properties that can be supplied at the time of GpsMid package creation. smsReceiverCount - The total number of SMS receivers that will handle the SMS containing OSM tag data smsReceiver[N] - The actual sms numbers where N=1..smsReceiverCount.A special value "nosms" will disable the SMS sending option. preset-file - The full path of the presets.xml file.If no path is given then current folder is looked for the file.
This is the application that accepts the tag data sent with SMS and generates a OSM file out of it. It needs to be placed on the same level as of GpsMid and Osm2GpsMid. It accepts the SMS text directly on command line or from withing a text file with each line representing a sepaarte SMS text.It's syntaxt is:
java -jar smsimporter.jar presets_file out_file [SMS text][-f in_file]
where presets_file is the full path to the presets file out_file is the output file containing the OSM tags in_file is the input file containing the OSM tag data sent with SMS.Each line represents a distinct SMS text
The GpsMid and Osm2GpsMId can be built as before by typing "ant" on the root folder.
Building "SmsImporter" can be done on the same lines by typing "ant" from the "SmsImporter" folder.
Both Osm2GpsMId and SmsImporter need to have GpsMid built beforehand. SmsImporter is to be exctracted at the same level as of Osm2GpsMId and GpsMid so as to have 3 folders GpsMid, Osm2GpsMid and SmsImporter at the same level.