×
Namespaces

Variants
Actions
(Difference between revisions)

How to display an Address or a Point of Interest on a Map with Java ME

From Nokia Developer Wiki
Jump to: navigation, search
skalogir (Talk | contribs)
(Skalogir - - Interaction modes for different types of devices)
skalogir (Talk | contribs)
(Skalogir -)
Line 1: Line 1:
[[Category:Draft]][[Category:Java ME]][[Category:Code Examples]][[Category:Location]][[Category:Symbian]][[Category:Series 40]]
+
[[Category:Java ME]][[Category:Code Examples]][[Category:Location]][[Category:Symbian]][[Category:Series 40]]
 
This article describes how to search for an address or a point of interest and display it on the Map. It uses [http://projects.developer.nokia.com/LBSPJME/wiki Nokia's Map API for Java ME] for the translation of the search string into valid coordinates and for the retrieval of the relevant map image.  
 
This article describes how to search for an address or a point of interest and display it on the Map. It uses [http://projects.developer.nokia.com/LBSPJME/wiki Nokia's Map API for Java ME] for the translation of the search string into valid coordinates and for the retrieval of the relevant map image.  
  

Revision as of 00:00, 16 January 2012

This article describes how to search for an address or a point of interest and display it on the Map. It uses Nokia's Map API for Java ME for the translation of the search string into valid coordinates and for the retrieval of the relevant map image.

Sydneypoi.pngSydneyshow.png

Contents

Introduction

As of January 2012, Nokia Maps API for Java ME is provided as a separate library. It uses the device's network connection in order to download and display map data. The library can be downloaded from here. It needs to be added to the working project, before the code in this example can be compiled.

The Nokis Maps API for Java ME uses the concept of tiles. The screen is divided into several tiles. When scrolling the map, if the new screen contains tiles that have already been downloaded, these will be used and only the new tiles will be requested via network. This reduces the amount of generated data traffic and makes the interaction with the user faster. In some platforms, such as Series 40 6th Edition, the default security access level for the underlying network operations by default is set to "Always ask", meaning that many prompts will be generated each time the map needs to be updated. Information on how to change the security access after the application has been installed, and also how to change the default security level via signing the application can be found here: Java_Security_Domains

Interaction modes for different types of devices

The device requirements for running this example are MIDP2.0 and CLDC 1.1. This covers a very large group of devices from Symbian to Series 40 and from non-touch to Full Touch and Touch and Type. Nokia's Map API for Java ME masks away the differences between various devices and provides different interaction modes for each device, without the developer having to worry about the details of the implementation. With respect to zooming, the following interaction modes are supported:

  • On non-touch devices, the zoom functionality is provided by the star (*) and hash (#) keys for zooming in and out respectively. No zoom controls are displayed on the screen.
  • On full-touch devices, the zoom functionality is provided by the zoom controls displayed on the screen.
  • On Touch and Type and full-touch with keyboard devices, the zoom functionality is provided by both the star (*) and hash (#) keys for zooming in and out respectively and the zoom controls displayed on the screen.


With respect to panning (i.e. scrolling or moving the screen around the target location), the following interaction modes are supported:

  • On non-touch devices, the navigation keypad is used to move the center of the map up, down, left and right from its current position
  • On full-touch and Touch and Type devices, panning is touch driven.
  • On full-touch devices with keyboard, such as Nokia E7-00, panning is also supported by the keyboard's arrow keys.


Warning.pngWarning: On S60 5th Edition devices, this application requires that the On Screen Keypad (OSK) is explicitly defined as disabled. In order to disable OSK and use the entire screen for displaying the Map, the following line should be added to the application's file descriptor (jad file): Nokia-MIDlet-On-Screen-Keypad: no

The search screen

The search screen consists of a Form, that contains the TextField where the user can type the requested address or point of interest, a hidden info message item that is only used for the display of any potential errors and two commands, an exit and a search command.

		//Main Search Screen
display=Display.getDisplay(this);
mainform=new Form("Address or POI");
mainform.append(text);
mainform.append(infomessage);
mainform.addCommand(searchCmd);
mainform.addCommand(exitCmd);
mainform.setCommandListener(this);
display.setCurrent(mainform);

The search command triggers the connection to the Nokia Maps servers. An additional control has been added, so that no operation takes place if the user hasn't typed any text, after selecting the Search option:

		if(c==searchCmd)
{
String search=text.getString();
infomessage.setText("");
if(!search.equals(""))
{
showOnMap(search);
}
}

The map screen

It is quite easy to create a scrollable, dynamic map with zoom functionality with Nokia Maps API for Java ME. We can simply, instantiate a new map canvas object and set it as current:

			mapcanvas = new MapCanvas(display);
display.setCurrent(mapcanvas);

The next problem, is to geolocate the search string and instantiate the geo object, which is the GeoCoordinate of the target location. We can also create a standard balloon marker and attach it to that location. Note that a list of results is retrieved from Nokia's servers as an array of Location objects. In this example, we use by default the first available result.

			//The search Manager for this search
SearchManager searchManager = SearchManager.getInstance();
//Retrieves the Point of Interest
searchManager.geocode(poi, null );
//Stores the results in an array of Location objects
locationresults = searchManager.getLocations();
//The first result is taken
geo=locationresults[0].getDisplayPosition();
//Displays the marker
marker = mapcanvas.getMapFactory().createStandardMarker(geo, 48, null,MapShapeType.baloon);

If we need on top of that, our map canvas to be displayed with a specific zoom level and to be centered around a given coordinate point, we can write the following:

			//Centers the Map at the Point of Interest
mapdisplay.setCenter(geo);
//Sets the zoom level
mapdisplay.setZoomLevel(14,0,0);

Finally, we need to set the map canvas we have just created as current:

		        display.setCurrent(mapcanvas);

The MIDlet source

import com.nokia.maps.common.GeoCoordinate;
import com.nokia.maps.map.MapCanvas;
import com.nokia.maps.map.MapDisplay;
import com.nokia.maps.map.MapShapeType;
import com.nokia.maps.map.MapStandardMarker;
import com.nokia.maps.search.Location;
import com.nokia.maps.search.SearchManager;
 
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.*;
 
public class NokiaMapsShowPOIonMap extends MIDlet implements CommandListener
{
Display display;
MapCanvas mapcanvas;
Form mainform;
MapDisplay mapdisplay;
GeoCoordinate geo;
TextField text=new TextField("Type Address or POI","",100,TextField.ANY);
StringItem infomessage=new StringItem("","");
Command exitCmd=new Command("Exit",Command.EXIT,0);
Command backCmd=new Command("Back",Command.BACK,0);
Command searchCmd=new Command("Search",Command.OK,1);
Location[] locationresults;
MapStandardMarker marker;
public void startApp()
{
//Main Search Screen
display=Display.getDisplay(this);
mainform=new Form("Address or POI");
mainform.append(text);
mainform.append(infomessage);
mainform.addCommand(searchCmd);
mainform.addCommand(exitCmd);
mainform.setCommandListener(this);
display.setCurrent(mainform);
}
 
public void showOnMap(String poi)
{
try
{
mapcanvas = new MapCanvas(display);
mapdisplay=mapcanvas.getMapDisplay();
//The search Manager for this search
SearchManager searchManager = SearchManager.getInstance();
//Retrieves the Point of Interest
searchManager.geocode(poi, null );
//Stores the results in an array of Location objects
locationresults = searchManager.getLocations();
//The first result is taken
geo=locationresults[0].getDisplayPosition();
//Centers the Map at the Point of Interest
mapdisplay.setCenter(geo);
//Displays the marker
marker = mapcanvas.getMapFactory().createStandardMarker(geo, 48, null,MapShapeType.baloon);
mapdisplay.addMapObject(marker);
//Sets the zoom level
mapdisplay.setZoomLevel(14,0,0);
//Displays the Map on the Screen
mapcanvas.setTitle(poi);
mapcanvas.addCommand(exitCmd);
mapcanvas.addCommand(backCmd);
mapcanvas.setCommandListener(this);
display.setCurrent(mapcanvas);
}catch(RuntimeException e)
{
infomessage.setText("Error:"+e.getMessage());
}
}
public void commandAction(Command c, Displayable d)
{
if(c==searchCmd)
{
String search=text.getString();
infomessage.setText("");
if(!search.equals(""))
{
showOnMap(search);
}
}
if(c==exitCmd)
{
notifyDestroyed();
}
if(c==backCmd)
{
display.setCurrent(mainform);
}
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}

Resources

The example's source code can be downloaded from here: File:NokiaMapsShowPOIonMapSource.zip

The example's installation binary files can be downloaded from here: File:NokiaMapsShowPOIonMapBinaries.zip

See also

Article Metadata
Code ExampleTested with
Devices(s): Nokia X3-02, Nokia 6210N, Nokia 6700classic, Nokia 701
Compatibility
Device(s): MIDP2.0/CLDC 1.1
Dependencies: Nokia Maps API for Java ME version 0.5
Article
Keywords: Nokia Maps API for Java ME, Image, Coordinates, Search Address or Point of Interest on a Map, GeoLocation
Created: skalogir (13 Jan 2012)
Reviewed: skalogir (13 Jan 2012)
Last edited: skalogir (16 Jan 2012)
417 page views in the last 30 days.
×