使用BlackBerry JDE 6.0.0创建一个新的Workspace, RIMGISEngineTutorial. 首先添加一个新的Lib项目libGISEngine, 在其中添加引路蜂开发库。然后添加HelloWorldRIM Blackberry应用,将libGISEngine设为项目HelloWorldRIM的依赖库(Project Dependencies).
同样为简单起见,设计一个共用类MapDemoRIM作为后续例子的基类。
//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.gisengine.demo;
//--------------------------------- IMPORTS ------------------------------------
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.MapTileDownloadManager;
import com.mapdigit.gis.raster.RasterMap;
import com.mapdigit.licence.LicenceManager;
import com.pstreets.gisengine.demo.rim.drawing.RIMGraphicsFactory;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.ui.Graphics;
import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.system.Display;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.TouchEvent;
//[------------------------------ MAIN CLASS ----------------------------------]
/**
* Base class for all Map Demos.
* <hr><b>© Copyright 2011 Guidebee, Inc. All Rights Reserved.</b>
* @version 1.00, 06/02/11
* @author Guidebee Pty Ltd.
*/
public abstract class MapDemoRIM extends UiApplication implements IReaderListener,
IMapDrawingListener {
protected RasterMap map;
protected MapTileDownloadManager mapTileDownloadManager;
protected IImage mapImage;
protected IGraphics mapGraphics;
protected MapCanvas canvas;
public MapDemoRIM() {
try {
LicenceManager licenceManager = LicenceManager.getInstance();
//expires on Tue Mar 15 20:54:42 CST 2011
long keys[] = {0x34ba283b8daeb659L, -0x53c811f9da86e998L,
-0x34ba25c3c581521eL, 0xf15df9fc7e45628L, 0x6a4ece44296c0287L,
0x4ab0cff532902b1cL,};
licenceManager.addLicence("GuidebeeMap_JavaME", keys);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void init() {
canvas = new MapCanvas();
//set the graphics factory
MapLayer.setAbstractGraphicsFactory(RIMGraphicsFactory.getInstance());
mapImage = MapLayer.getAbstractGraphicsFactory()
.createImage(Display.getWidth(),
Display.getHeight());
mapGraphics = mapImage.getGraphics();
//Create the Digital Map objects.
mapTileDownloadManager = new MapTileDownloadManager(this);
try{
map = new RasterMap(1024, 1024, mapTileDownloadManager);
}catch(Exception e){}
map.setScreenSize(Display.getWidth(),
Display.getHeight());
mapTileDownloadManager.start();
map.setMapDrawingListener(this);
}
protected void createMenu(Menu menu, int instance){
}
public void closeApp() {
mapTileDownloadManager.stop();
}
public void readProgress(int arg0, int arg1) {
System.out.println(arg0 + "/" + arg1);
}
public void done() {
if (canvas != null) {
canvas.invalidate();
}
}
protected class MapCanvas extends MainScreen {
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;
protected void paint(Graphics g) {
map.paint(mapGraphics);
Bitmap bitmap=(Bitmap) mapImage.getNativeImage();
g.drawBitmap(0,0,bitmap.getWidth(),bitmap.getHeight(),bitmap,0,0);
}
public void close(){
closeApp();
}
protected boolean touchEvent(TouchEvent event){
int action=event.getEvent();
switch(action){
case TouchEvent.DOWN:
oldX = event.getGlobalX(1);
oldY = event.getGlobalY(1);
isPan=true;
break;
case TouchEvent.UP:
oldX = event.getGlobalX(1);
oldY = event.getGlobalY(1);
isPan=false;
break;
case TouchEvent.MOVE :
if(isPan)
{
panMap(event.getGlobalX(1), event.getGlobalY(1));
oldX = event.getGlobalX(1);
oldY = event.getGlobalY(1);
}
break;
}
return true;
}
protected void makeMenu(Menu menu, int instance){
createMenu(menu,instance);
}
}
}
类MapDemoRIM派生于UiApplication,为Blackberry应用对象。MapCanvas派生于MainScreen,用于显示地图,并响应TouchEvent,可以平移地图。
有了这个基类,HelloWorldRIM就比较简单,下面的例子显示南京地图,缩放级别为13级,地图类型为Bing中国地图。
//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.gisengine.demo.rim;
//--------------------------------- IMPORTS ------------------------------------
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.raster.MapType;
import com.pstreets.gisengine.demo.MapDemoRIM;
//[------------------------------ MAIN CLASS ----------------------------------]
/**
* Hello world demo for Guidebee Map API on RIM platform.
* <hr><b>© Copyright 2011 Guidebee, Inc. All Rights Reserved.</b>
* @version 1.00, 06/02/11
* @author Guidebee Pty Ltd.
*/
public class HelloWorldRIM extends MapDemoRIM {
/**
* Entry point for application
* @param args Command line arguments (not used)
*/
public static void main(String[] args)
{
// Create a new instance of the application and make the currently
// running thread the application's event dispatch thread.
HelloWorldRIM theApp = new HelloWorldRIM();
theApp.enterEventDispatcher();
}
public HelloWorldRIM() {
init();
pushScreen(canvas);
GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
map.setCenter(center, 13, MapType.MICROSOFTCHINA);
}
}