Logo Icon Logo
A Crowd-sourced Cookbook on Writing Great Android® Apps
GitHub logo Twitter logo OReilly Book Cover Art

Using OpenStreetMap

In Chapter: Location and Map Applications
Author: Rachee Singh ('racheesingh')
Published? true
FormatLanguage: WikiFormat


You want to use OpenStreetMap (OSM) map data to display maps in your application.


Use the third-party osmdroid library to interact with OpenStreetMap data.


OpenStreetMap is a free, editable map of the world. The OpenStreetMapView is a (almost) full/free replacement for Android's MapView class. See the osmdroid googlecode page for more details. The capabilities of OSM and Google maps are similar; some people prefer OSM because of the fewer limitations on what you can do with the data. For example, you are forbidden from using Google Map data for turn-by-turn navigation, because much of Google's data is licensed from commercial GPS data services. See http://www.openstreetmap.org/about for more information.

To use OSM in your android app, you need to include two jars in the Android project namely, osmdroid-android-x.xx.jar and slf4j-android-1.5.8.jar. OSMDroid is a set of tools for OpenStreetMap data; SLF4J is (yet another) simplified logging facade. These can be downloaded from the links below:

Or you can use the Maven artifact (see Hello World - Maven Version), which is currently:


See Referencing libraries to implement external functionality to learn how to use external libraries in your Android project.

After adding the JARs to the project we can start coding.

  • You need to add a OSM MapView to an XML layout like this:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  • Also include the ACCESS_NETWORK_STATE and INTERNET permissions in the AndroidManifest:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
  • Now we have to use this MapView in the Activity code. This is done exactly as you would do in the case of Google maps.
private MapView mapView;
private MapController mapController;
mapView = (MapView) this.findViewById(R.id.mapview);
mapController = this.mapView.getController();

Once you are done with the code, go ahead and run it! This is how the application should look:


The source code for this project is in the Android Cookbook repository, http://github.com/IanDarwin/Android-Cookbook-Examples/tree/master/OSMIntro.


If you found this recipe useful, why not buy the book and have the whole collection always at hand?"