MidMaps  is a tiny  Google Maps  library for Java ME applications .

With MidMaps you can integrate Google Maps into your J2ME applications in few, easy steps!

How to use it?

MidMaps  is designed to be simple. You don’t need to deal with threads, connections or other boring stuff like that: all you have to do is to  create a map and display it on in your application .

Creating a simple map

To get a map object, you have to perform two steps:

  1. First,  instantiate a new  GoogleMaps  object :
                          GoogleMaps gMaps 
                          
                            =
                          
                          
                            new
                          
                           GoogleMaps
                          
                            (
                          
                          
                            )
                          
                          
                            ;
                          
                        
  2. Then, create a new  GoogleStaticMap  instance by using the createMap() method:
                          GoogleStaticMap map 
                          
                            =
                          
                           gMaps.
                          
                            createMap
                          
                          
                            (
                          
                          mapWidth, mapHeight, GoogleStaticMap.
                          
                            FORMAT_PNG
                          
                          
                            )
                          
                          
                            ;
                          
                        

Once you have created a map, it is necessary to define its  handler . The handler has an important role:  it gets automatically called each time the map object is updated, or when an error occurs : this way, you can know when you need to repaint the map, or how to notify the user about what’s going on. The handler has to implement the GoogleStaticMapHandler  interface , that defines  two methods :

                  
                    public
                  
                  
                    void
                  
                   GoogleStaticMapUpdated
                  
                    (
                  
                  GoogleStaticMap map
                  
                    )
                  
                  
                    ;
                  
                  
                    public
                  
                  
                    void
                  
                   GoogleStaticMapUpdateError
                  
                    (
                  
                  GoogleStaticMap map, 
                  
                    int
                  
                   errorCode, 
                  
                    String
                  
                   errorMessage
                  
                    )
                  
                  
                    ;
                  
                

The first one is called  when a map is updated , so that your MIDlet knows that it must be repainted. The second one gets called  when an error occurs  (e.g.: when there is a network issue and the map image cannot be downloaded).

Once you’ve created your handler, you have to pass it to the GoogleStaticMap instance with the  setHandler()  method:

                  map.
                  
                    setHandler
                  
                  
                    (
                  
                  mapHandler
                  
                    )
                  
                  
                    ;
                  
                

Now, how to actually load a map? First, it is necessary to  define a location for the map :

  1. create a  GoogleMapsCoordinates  instance with the preferred  latitude and longitude  values
  2. use the GoogleStaticMap  setCenter()  method
                  map.
                  
                    setCenter
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8954656
                  
                  , 
                  
                    12.4823243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                

and then, you have to  update() the map :

                  map.
                  
                    update
                  
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                

After you’ve called update, the map image will be loaded and,  when finished (or when an error occurs) the GoogleStaticMapHandler will be called . If the map is correctly loaded, you can actually draw it by using its draw(Graphics g, int left, int top, int attach)  method.

Complete example

Below you can see a  full example  on how MidMaps can be used to  display a map on a Canvas .

                  
                    import
                  
                  
                    javax.microedition.lcdui.Canvas
                  
                  
                    ;
                  
                  
                    import
                  
                  
                    javax.microedition.lcdui.Graphics
                  
                  
                    ;
                  
                  
 

                  
                    import
                  
                  
                    com.jappit.midmaps.googlemaps.GoogleMaps
                  
                  
                    ;
                  
                  
                    import
                  
                  
                    com.jappit.midmaps.googlemaps.GoogleMapsCoordinates
                  
                  
                    ;
                  
                  
                    import
                  
                  
                    com.jappit.midmaps.googlemaps.GoogleStaticMapHandler
                  
                  
                    ;
                  
                  
                    import
                  
                  
                    com.jappit.midmaps.googlemaps.GoogleStaticMap
                  
                  
                    ;
                  
                  
 

                  
                    public
                  
                  
                    class
                  
                   GoogleMapsSimpleCanvas 
                  
                    extends
                  
                  
                    Canvas
                  
                  
                    implements
                  
                   GoogleStaticMapHandler

                  
                    {
                  
                  
	GoogleMaps gMaps 
                  
                    =
                  
                  
                    null
                  
                  
                    ;
                  
                  
	GoogleStaticMap map 
                  
                    =
                  
                  
                    null
                  
                  
                    ;
                  
                  
 
	
                  
                    public
                  
                   GoogleMapsSimpleCanvas
                  
                    (
                  
                  
                    )
                  
                  
                    {
                  
                  
		gMaps 
                  
                    =
                  
                  
                    new
                  
                   GoogleMaps
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
		map 
                  
                    =
                  
                   gMaps.
                  
                    createMap
                  
                  
                    (
                  
                  getWidth
                  
                    (
                  
                  
                    )
                  
                  , getHeight
                  
                    (
                  
                  
                    )
                  
                  , GoogleStaticMap.
                  
                    FORMAT_PNG
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
		map.
                  
                    setHandler
                  
                  
                    (
                  
                  
                    this
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
		map.
                  
                    setCenter
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8954656
                  
                  , 
                  
                    12.4823243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
		map.
                  
                    setZoom
                  
                  
                    (
                  
                  
                    15
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
		map.
                  
                    update
                  
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                  
                    }
                  
                  
 
	
                  
                    protected
                  
                  
                    void
                  
                   paint
                  
                    (
                  
                  
                    Graphics
                  
                   g
                  
                    )
                  
                  
                    {
                  
                  
		map.
                  
                    draw
                  
                  
                    (
                  
                  g, 
                  
                    0
                  
                  , 
                  
                    0
                  
                  , 
                  
                    Graphics
                  
                  .
                  
                    TOP
                  
                  
                    |
                  
                  
                    Graphics
                  
                  .
                  
                    LEFT
                  
                  
                    )
                  
                  
                    ;
                  
                  
                    }
                  
                  
                    public
                  
                  
                    void
                  
                   GoogleStaticMapUpdateError
                  
                    (
                  
                  GoogleStaticMap map, 
                  
                    int
                  
                   errorCode, 
                  
                    String
                  
                   errorMessage
                  
                    )
                  
                  
                    {
                  
                  
                    System
                  
                  .
                  
                    out
                  
                  .
                  
                    println
                  
                  
                    (
                  
                  
                    "map error: "
                  
                  
                    +
                  
                   errorCode 
                  
                    +
                  
                  
                    ", "
                  
                  
                    +
                  
                   errorMessage
                  
                    )
                  
                  
                    ;
                  
                  
                    }
                  
                  
                    public
                  
                  
                    void
                  
                   GoogleStaticMapUpdated
                  
                    (
                  
                  GoogleStaticMap map
                  
                    )
                  
                  
                    {
                  
                  
		repaint
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                  
                    }
                  
                  
                    }
                  
                

Markers

You can  add markers to a map  by using the  GoogleMapsMarker  class. You create a marker by specifying its location:

                  GoogleMapsMarker marker 
                  
                    =
                  
                  
                    new
                  
                   GoogleMapsMarker
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8954656
                  
                  , 
                  
                    12.4823243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                

Optionally, you can  customize the marker  by setting its  color, size and and label  (must be a single character):

                  marker.
                  
                    setColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_GREEN
                  
                  
                    )
                  
                  
                    ;
                  
                  
marker.
                  
                    setColor
                  
                  
                    (
                  
                  GoogleMapsMarker.
                  
                    SIZE_TINY
                  
                  
                    )
                  
                  
                    ;
                  
                  
marker.
                  
                    setLabel
                  
                  
                    (
                  
                  
                    'P'
                  
                  
                    )
                  
                  
                    ;
                  
                

Then, you  add the marker to your GoogleStaticMap instance  with the addMarker() method:

                  map.
                  
                    addMarker
                  
                  
                    (
                  
                  marker
                  
                    )
                  
                  
                    ;
                  
                

Here’s an example of 2 different markers added to the previous map.

                  GoogleMapsMarker redMarker 
                  
                    =
                  
                  
                    new
                  
                   GoogleMapsMarker
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8954656
                  
                  , 
                  
                    12.4823243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
redMarker.
                  
                    setColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_RED
                  
                  
                    )
                  
                  
                    ;
                  
                  
redMarker.
                  
                    setSize
                  
                  
                    (
                  
                  GoogleMapsMarker.
                  
                    SIZE_MID
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
GoogleMapsMarker blueMarker 
                  
                    =
                  
                  
                    new
                  
                   GoogleMapsMarker
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8964656
                  
                  , 
                  
                    12.4843243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
blueMarker.
                  
                    setColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_BLUE
                  
                  
                    )
                  
                  
                    ;
                  
                  
blueMarker.
                  
                    setSize
                  
                  
                    (
                  
                  GoogleMapsMarker.
                  
                    SIZE_SMALL
                  
                  
                    )
                  
                  
                    ;
                  
                  
blueMarker.
                  
                    setLabel
                  
                  
                    (
                  
                  
                    'R'
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
map.
                  
                    addMarker
                  
                  
                    (
                  
                  redMarker
                  
                    )
                  
                  
                    ;
                  
                  
map.
                  
                    addMarker
                  
                  
                    (
                  
                  blueMarker
                  
                    )
                  
                  
                    ;
                  
                

Paths

Paths can be easily defined by using the  GoogleMapsPath  class. To create a new Path, just  istantiate a new GoogleMapsPath  object:

                  GoogleMapsPath path 
                  
                    =
                  
                  
                    new
                  
                   GoogleMapsPath
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                

And then  add the path points  with the addPoint() method:

                  path.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8954656
                  
                  , 
                  
                    12.4823243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
path.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8934656
                  
                  , 
                  
                    12.4833243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                

Path  weight,  color and fill color can be customized  with the following methods:

                  bluePath.
                  
                    setColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_BLUE
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    setWeight
                  
                  
                    (
                  
                  
                    5
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    setFillColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_GREEN
                  
                  
                    )
                  
                  
                    ;
                  
                

Below you can see an example of  2 different paths  added to the map defined above.

                  GoogleMapsPath path 
                  
                    =
                  
                  
                    new
                  
                   GoogleMapsPath
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                  
path.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8954656
                  
                  , 
                  
                    12.4823243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
path.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8934656
                  
                  , 
                  
                    12.4833243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
path.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8944656
                  
                  , 
                  
                    12.4843243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
path.
                  
                    setColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_RED
                  
                  
                    )
                  
                  
                    ;
                  
                  
path.
                  
                    setWeight
                  
                  
                    (
                  
                  
                    10
                  
                  
                    )
                  
                  
                    ;
                  
                  
map.
                  
                    addPath
                  
                  
                    (
                  
                  path
                  
                    )
                  
                  
                    ;
                  
                  
 
GoogleMapsPath bluePath 
                  
                    =
                  
                  
                    new
                  
                   GoogleMapsPath
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8954656
                  
                  , 
                  
                    12.4823243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8964656
                  
                  , 
                  
                    12.4813243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    addPoint
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsCoordinates
                  
                    (
                  
                  
                    41.8934656
                  
                  , 
                  
                    12.4803243
                  
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    setColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_BLUE
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    setFillColor
                  
                  
                    (
                  
                  GoogleStaticMap.
                  
                    COLOR_GREEN
                  
                  
                    )
                  
                  
                    ;
                  
                  
bluePath.
                  
                    setWeight
                  
                  
                    (
                  
                  
                    5
                  
                  
                    )
                  
                  
                    ;
                  
                  
map.
                  
                    addPath
                  
                  
                    (
                  
                  bluePath
                  
                    )
                  
                  
                    ;
                  
                

Geocoding

Geocoding requires a Google Maps API key , so you have to  get your own key  to use this feature.

To start, you have to  instantiate a Google Maps object by using your own API key :

                  GoogleMaps gMaps 
                  
                    =
                  
                  
                    new
                  
                   GoogleMaps
                  
                    (
                  
                  
                    "<your_api_key>"
                  
                  
                    )
                  
                  
                    ;
                  
                

Then, you have to get a  GoogleMapsGeocoder  instance by using the createGeocoder() method:

                  GoogleMapsGeocoder geocoder 
                  
                    =
                  
                   gMaps.
                  
                    createGeocoder
                  
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                

Then, as done for the GoogleStaticMap objects, also the  GoogleMapsGeocoder  objects require an handler to be defined. The  GoogleMapsGeocoderHandler  interface defines 2 methods :

                  
                    public
                  
                  
                    void
                  
                   GoogleMapsGeocodeSuccess
                  
                    (
                  
                  
                    String
                  
                   address, GoogleMapsCoordinates coordinates, 
                  
                    int
                  
                   accuracy
                  
                    )
                  
                  
                    ;
                  
                  
                    public
                  
                  
                    void
                  
                   GoogleMapsGeocodeError
                  
                    (
                  
                  
                    String
                  
                   address, 
                  
                    int
                  
                   errorCode, 
                  
                    String
                  
                   errorDescription
                  
                    )
                  
                  
                    ;
                  
                

These 2 methods are  called when a geocoding request successes or fails , respectively. Once you have implemented your GoogleMapsGeocoderHandler, you have to pass it to the GoogleMapsGeocoder instance created above:

                  geocoder.
                  
                    setHandler
                  
                  
                    (
                  
                  geocoderHandler
                  
                    )
                  
                  
                    ;
                  
                

Done this, all is ready to geocode an address: to do this, just call the  geocodeAddress()  method:

                  geocoder.
                  
                    geocodeAddress
                  
                  
                    (
                  
                  
                    "Rome, Italy"
                  
                  
                    )
                  
                  
                    ;
                  
                

When the geocoding ends, your handler will be notified via the GoogleMapsGeocodeSuccess() method. A possible implementation of such method is visible below:

                  
                    public
                  
                  
                    void
                  
                   GoogleMapsGeocodeSuccess
                  
                    (
                  
                  
                    String
                  
                   address, GoogleMapsCoordinates coordinates, 
                  
                    int
                  
                   accuracy
                  
                    )
                  
                  
                    {
                  
                  
	map.
                  
                    setCenter
                  
                  
                    (
                  
                  coordinates
                  
                    )
                  
                  
                    ;
                  
                  
 
	map.
                  
                    addMarker
                  
                  
                    (
                  
                  
                    new
                  
                   GoogleMapsMarker
                  
                    (
                  
                  coordinates
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
	map.
                  
                    setZoom
                  
                  
                    (
                  
                  GoogleMaps.
                  
                    getZoomForAccuracy
                  
                  
                    (
                  
                  accuracy
                  
                    )
                  
                  
                    )
                  
                  
                    ;
                  
                  
 
	map.
                  
                    update
                  
                  
                    (
                  
                  
                    )
                  
                  
                    ;
                  
                  
                    }
                  
                

Since the  geocoding operation returns an “accuracy” value , you can use this value to get a  default zoom value  for your map. To do this, you can use the  GoogleMaps.getZoomForAccuracy()  method, as shown above.

Below you can see the map generated by the previous code:

http://b62.photo.store.qq.com/http_imgload.cgi?/rurl4_b=e3d27d002e02c625ab25972a01345dbe78ced5b22d65c47e67b0da4eae28e1c9240b4ddbe08298825721df3838fe25c6