1. 程式人生 > >Blackberry引路蜂地圖開發示例:路徑查詢

Blackberry引路蜂地圖開發示例:路徑查詢

可以通過RasterMap的getDirection()方法來查詢路徑,和查詢地址類似,路徑查詢的結果也是通過回撥函式的方式來通知應用程式的,下面的例子返回南京到北京的路徑。返回結果存放在MapDirection中,MapDirection包含了路徑的詳細資訊,包括路徑的每個步驟,長度,時間,方向等

//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.gisengine.demo.rim; 
 
//--------------------------------- IMPORTS ------------------------------------
import com.mapdigit.gis.MapDirection;
import com.mapdigit.gis.geometry.GeoLatLng;
import com.mapdigit.gis.raster.MapType;
import com.mapdigit.gis.service.IRoutingListener;
import com.pstreets.gisengine.demo.MapDemoRIM;
import net.rim.device.api.ui.component.Menu;
import net.rim.device.api.ui.MenuItem; 
 
//[------------------------------ MAIN CLASS ----------------------------------]
/**
 *  Map routing demo for Guidebee Map API on RIM platform.
 * <hr><b>© Copyright 2011 Guidebee, Inc. All Rights Reserved.</b>
 * @version     1.00, 10/02/11
 * @author      Guidebee Pty Ltd.
 */
public class MapRoutingRIM extends MapDemoRIM implements    IRoutingListener { 
 
    /**
     * 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.
        MapRoutingRIM theApp = new MapRoutingRIM();      
        theApp.enterEventDispatcher();
    }
    
    private MenuItem mapGetDirectionMenuItem = new MenuItem("Get Direction", 0, 0){
        public void run(){
            String name1 = "南京";           
            String name2 = "北京";           
            map.getDirections("from: " + name1 + " to: " + name2);
        }
    }; 
 
    public MapRoutingRIM() { 
 
        init();
        pushScreen(canvas);
        map.setRoutingListener(this);
        GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);       
        map.setCenter(center, 13, MapType.MICROSOFTCHINA);
        
    } 
 
    public void done(String arg0, MapDirection result) {
        if (result != null) {
            map.setMapDirection(result);
            map.resize(result.getBound());
            map.setZoom(5);
        }
    }
    
    protected void createMenu(Menu menu, int instance){
         menu.add(mapGetDirectionMenuItem); 
 
   }
}

地圖服務可以選擇使用Google 地圖服務,CloudMade地圖服務,在中國還可能選擇MapAbc地圖服務,預設使用Google 地圖服務。
getDirections()具有三個過載函式,例子中是採用的文字描述方式。上述示例採用了from: address1 to: address2 的格式, CloudMade地圖服務和MapAbc地圖服務則必需採用 經度1,緯度1,經度2,緯度2和格式。
為避免混淆,可以使用下述格式。
public void getDirection(GeoLatLng[] waypoints, IRoutingListener listener);
其中 waypoints 為途徑點座標陣列經緯值,可以支援多點路徑查詢。
此外對於MapAbc 地圖服務,還可以指定城市編碼,如南京編碼為25。
public void getDirection(int citycode,String query, IRoutingListener listener);