依旧采用NetBean作为开发IDE,创建一个LwuitGISEngineTutorial项目,将引路蜂地图开发包libgisengine.jar 和LWUIT开发包 LWUIT.jar复制到lib子目录下,并作为外部Jar库文件添加到项目中。将LWUITTheme.res 和 Licence文件guidebee.lic 放在res 子目录下,并将res目录添加到项目中。
为避免重复,就示例共用的代码设计一个基类,MapDemoLWUIT,并从LWUIT库的Form派生一个子类MapCanvas用来显示地图
//------------------------------------------------------------------------------
// COPYRIGHT 2011 GUIDEBEE
// ALL RIGHTS RESERVED.
// GUIDEBEE CONFIDENTIAL PROPRIETARY
/ REVISIONS
// Date Name Tracking # Description
// --------- ------------------- ---------- --------------------------
// 11FEB2011 James Shen Initial Creation
//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.gisengine.demo;
//--------------------------------- IMPORTS ------------------------------------
import java.io.IOException;
import javax.microedition.midlet.MIDlet;
import com.sun.lwuit.Display;
import com.sun.lwuit.Form;
import com.sun.lwuit.Image;
import com.sun.lwuit.plaf.UIManager;
import com.sun.lwuit.util.Resources;
import com.sun.lwuit.Graphics;
import com.mapdigit.gis.MapLayer;
import com.mapdigit.gis.drawing.IGraphics;
import com.mapdigit.gis.drawing.IImage;
import com.mapdigit.gis.raster.IMapDrawingListener;
import com.mapdigit.gis.raster.IReaderListener;
import com.mapdigit.gis.raster.MapClient;
import com.mapdigit.gis.raster.MapTileDownloadManager;
import com.mapdigit.licence.LicenceManager;
import com.pstreets.gisengine.demo.lwuit.drawing.LWUITGraphicsFactory;
import com.sun.lwuit.Painter;
import com.sun.lwuit.geom.Rectangle;
//[------------------------------ MAIN CLASS ----------------------------------]
//--------------------------------- REVISIONS ----------------------------------
// Date Name Tracking # Description
// -------- ------------------- ------------- --------------------------
// 11FEB2011 James Shen Initial Creation
/**
* Base class for all Map Demos on LWUIT.
* <hr><b>© Copyright 2011 Guidebee, Inc. All Rights Reserved.</b>
* @version 1.00, 11/02/11
* @author Guidebee Pty Ltd.
*/
public abstract class MapDemoLWUIT extends MIDlet implements IReaderListener,
IMapDrawingListener {
protected MapClient map;
protected MapTileDownloadManager mapTileDownloadManager;
protected IImage mapImage;
protected IGraphics mapGraphics;
protected MapCanvas canvas;
public MapDemoLWUIT() {
try {
LicenceManager licenceManager = LicenceManager.getInstance();
long keys[] = {0x34ba283b8daeb659L, -0x53c811f9da86e998L,
-0x34ba25c3c581521eL, 0xf15df9fc7e45628L, 0x6a4ece44296c0287L,
0x4ab0cff532902b1cL,};
licenceManager.addLicence("GuidebeeMap_JavaME", keys);
} catch (Exception ex) {
ex.printStackTrace();
}
}
protected void init() {
Display.init(this);
try {
Resources r = Resources.open("/javaTheme.res");
UIManager.getInstance().setThemeProps(
r.getTheme(r.getThemeResourceNames()[0]));
} catch (IOException ex) {
ex.printStackTrace();
}
//set the graphics factory
MapLayer.setAbstractGraphicsFactory(LWUITGraphicsFactory.getInstance());
mapImage = MapLayer.getAbstractGraphicsFactory()
.createImage(Display.getInstance().getDisplayWidth(),
Display.getInstance().getDisplayHeight());
mapGraphics = mapImage.getGraphics();
//Create the Digital Map objects.
mapTileDownloadManager = new MapTileDownloadManager(this);
map = new MapClient(1024, 1024, mapTileDownloadManager);
map.setScreenSize(Display.getInstance().getDisplayWidth(),
Display.getInstance().getDisplayHeight());
map.start();
map.setMapDrawingListener(this);
//Creat the main form.
canvas = new MapCanvas("Hello world");
}
//--------------------------------- REVISIONS ------------------------------
// Date Name Tracking # Description
// --------- ------------------- ------------- ----------------------
// 11FEB2011 James Shen Initial Creation
/**
* Used instead of using the Resources API to allow us to fetch locally
* downloaded
* resources
*
* @param name the name of the resource
* @return a resources object
*/
public Resources getResource(String name) throws IOException {
return Resources.open("/" + name + ".res");
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
map.stop();
}
public void readProgress(int arg0, int arg1) {
System.out.println(arg0 + "/" + arg1);
}
public void done() {
if (canvas != null) {
canvas.repaint();
}
}
/**
* Map canvas class ,a sub class of Form.
*/
protected class MapCanvas extends Form {
MapCanvas(String title) {
super(title);
}
public void paintBackground(Graphics g){
map.paint(mapGraphics);
g.drawImage((Image) mapImage.getNativeImage(), 0,
0);
}
private void panMap(float x, float y) {
float dx = x - oldX;
float dy = y - oldY;
if (!(dx == 0 && dy == 0)) {
map.panDirection((int) dx, (int) dy);
}
}
boolean isPan = false;
private float oldX = -1;
private float oldY = -1;
public void pointerDragged(int x, int y) {
if (isPan) {
panMap(x, y);
oldX = x;
oldY = y;
}
}
public void pointerPressed(int x, int y) {
oldX = x;
oldY = y;
isPan = true;
}
public void pointerReleased(int x, int y) {
oldX = x;
oldY = y;
isPan = false;
}
}
}
基类MapDemoLWUIT正确设置引路蜂License,并创建RasterMap地图。有了这些基类,第一个地图应用就非常简单,下面的例子显示中国南京地图。地图类型为Bing中国地图,缩放级别为13级。
package com.pstreets.gisengine.demo.lwuit;
//--------------------------------- IMPORTS ------------------------------------
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.raster.MapType;
import com.pstreets.gisengine.demo.MapDemoLWUIT;
public class HelloWorldLWUIT extends MapDemoLWUIT {
public void startApp() {
init();
canvas.show();
GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
map.setCenter(center, 13, MapType.MICROSOFTCHINA);
}
}