MidMaps:Google Maps Java ME library

原文: http://www.jappit.com/blog/midmaps-google-maps-java-me-library/
 
MidMaps:Google Maps Java ME library
 
MidMaps Java ME 应用程序的一个小型 Google Maps 类库包。
通过使用 MidMaps 你只需很少的几个简单步骤就可以使 Google Maps 完整的结合到你的 J2ME 应用程序中。
如何使用呢?
MidMaps 是被设计成为简单的。你不必要处理线程、连接或者其他令人厌烦的事情,而像这样:所有你应该做的就是 生成一个地图对象以及把它显示在你的应用程序中。
生成一个简单的地图
要生成一个地图对象,你必须完成两步:
1、  首先,实例化一个新的 GoogleMaps 对象:
 
GoogleMaps gMaps = new GoogleMaps();
 
2、  其次,用其方法 createMap() 生成一个 GoogleStaticMap 实例:
 
GoogleStaticMap map = gMaps.createMap(mapWidth,mapHeight,GoogleStaticMap.FORMAT_PNG);
 
一旦你生成了一个地图 (map) ,需要定义它的处理器 (handler) 。这个处理器扮演一个重要的角色:每一次 map 对象更新,或者有产生错误时它都会自动被触发。这样,你就可以知道什么时候你需要重绘地图,或者如何通知用户发生了什么回事。这个处理器必须实现 GoogleStaticMapHandler 接口,该接口有两个方法:
 
public void GoogleStaticMapUpdated(GoogleStaticMap map);
public void GoogleStaticMapUpdateError(GoogleStaticMap map,int errorCode,String errorMessage);
 
第一方法是当一个地图 (map) 更新时触发。因此你的 MIDlet 就知道它需要重绘屏幕了。第二个方法是当一个错误(比如:网络故障和图片无法下载)发生时触发。一旦你生成了处理器 (handler) ,你必须通过 GoogleStaticMap 实例对象的方法 setHandler() 来传递它。
 
map.setHandler(mapHandler);
 
现在,如何实际地加载一个地图( map )呢?首先,需要为该地图定义一个位置信息:
1、  以首选的经纬度值生成一个 GoogleMapsCoordinates 实例
2、  使用 GoogleStaticMap setCenter() 方法
 
map.setCenter(new GoogleMapsCoordinates(41.8954656, 12.4823243));
 
然后,你必须 update() 地图:
 
map.update();
 
更新完之后,地图图片将被下载,并且,当完成时(或者当错误发生) GoogleStaticMapHandler 触发。如果地图正确下载,你就可以通过 draw(Graphics g, int left, int top, int attach) 实际地绘制它。
 
完整例子
 
在下面你可以看到一个关于 MidMaps 如何被成功使用把一个地图显示到布画( Canvas )上的 完整例子。
 
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import com.jappit.midmaps.googlemaps.GoogleMaps;
import com.jappit.midmaps.googlemaps.GoogleStaticMap;
public class GoogleMapsSimpleCanvas extends Canvas implements GoogleStaticMapHandler
{
        考虑篇幅,部分代码省略
}
 
标签(Markers
 
通过使用 GoogleMapsMarker 类你可以在地图上添加标签。根据指定的位置生成一个标签( marker :
 
GoogleMapsMarker marker = new GoogleMapsMarker(new GoogleMapsCoordinates(41.8954656, 12.4823243));
 
可选择地,你可以通过设置颜色、大小以及标注(需为一个字符)自定义标签:
 
marker.setColor(GoogleStaticMap.COLOR_GREEN);
marker.setColor(GoogleMapsMarker.SIZE_TINY);
marker.setLabel(‘P’);
 
然后,通过 addMerker() 方法把标签添加到 GoogleStaticMap 的实例上去:
 
map.addMerker(marker);
 
这里是两个不同标签添加都当前地图的一个例子:
 
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
 
通过使用 GoogleMapsPath 类可以很方便的定义路径对象。要生成一个新 Path ,仅 实例化一个新 GoogleMapsPath new GoogleMapsPath )对象即可:
 
GoogleMapsPaht  path = new GoogleMapsPath();
 
随后通过 addPoint() 方法来添加路径点:
 
path.addPoint(new GoogleMapsCoordinates(41.8954656, 12.4823243));
path.addPoint(new GoogleMapsCoordinates(41.8934656, 12.4833243));
 
可以使用以下方法自定义 路径重量、颜色以及填充颜色:
 
bluePath.setColor(GoogleStaticMap.COLOR_BLUE);
bluePath.setWeight(5);
bluePath.setFillColor(GoogleStaticMap.COLOR_GREEN);
 
下面你可以看到两条不同路径添加到当前地图的例子:
 
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
 
地理编码需要一个 Google 地图 API 密匙,因此你必须在使用这个功能之前获取自己的密匙。
开始,你必须使用自己的 API 密匙实例化一个 GoogleMaps 对象:
 
GoogleMaps gMaps = new GoogleMaps("<your_api_key>");
 
然后,你必须通过 createGeocoder() 方法获取 GoogleMapsGeocoder 实例:
 
GoogleMapsGeocoder geocoder = gMaps.createGeocoder();
 
然后,和完成 GoogleStaticMap 一样, GoogleMapsGeocoder 对象也需要定义一个处理器( handler )。 GoogleMapsGeocoderHandler 接口定义两个方法:
 
public void GoogleMapsGeocodeSuccess(String address, GoogleMapsCoordinates coordinates, int accuracy);
public void GoogleMapsGeocodeError(String address, int errorCode, String errorDescription);
 
当有一个地理编码请求或者错误时这两个方法被分别调用。一旦你实现了 GoogleMapsGeocodeHandler ,你必须把它传递给 GoogleMapsGeocoder 实例之上。
 
geocoder.setHandler(geocoderHandler);
 
完成之后,所有准备地理编码地址:为了实现这个功能,只要调用 geocodeAddress() 方法即可:
 
geocoder.geocodeAddress("Rome, Italy");
 
当地理编码结束,你的处理器将通过 GoogleMapsGeocodeSuccess() 方法被触发。这种方法可能实施的可见如下 :
 
public void GoogleMapsGeocodeSuccess(String address, GoogleMapsCoordinates coordinates, int accuracy){
       map.setCenter(coordinates);
       map.addMarker(new GoogleMapsMarker(coordinates));
       map.setZoom(GoogleMaps.getZoomForAccuracy(accuracy));
       map.update();
}
 
自从地理编码操作返回一个“ accuracy ”的值,你就可以使用这个值为地图获取一个默认放大值。为了做这个,你可以使用 GoogleMaps.getZoomForAccuracy() 方法,如上所示。
下面你可以看到有前面的代码产生的地图:
 

你可能感兴趣的:(职场,j2me,googlemap,休闲)