Java SE引路蜂地圖開發(fā)示例
引路蜂地圖也提供對Java SE平臺的支持,可以開發(fā)桌面地圖應用,由于Java SE的跨平臺特性,使用Java SE引路蜂地圖開發(fā)包開發(fā)的地圖應用可以運行于Windows ,Lunix,Unix,Mac OS等平臺。開發(fā)桌面應用比開發(fā)移動應用要容易的多,屏幕,內(nèi)存等方面都比移動平臺要寬裕的多。
下面使用一個簡單的應用來介紹一下Java SE引路蜂地圖開發(fā)。示例截圖如下
設置引路蜂地圖開發(fā)包License
引路蜂開發(fā)包License分兩部分,一個為License文件guidebee.lic ,另一部分為License文件對應的注冊碼,需在程序運行前初始化
- LicenceManager licenceManager = LicenceManager.getInstance();
- ong keys[]= {0x41c0df1c118b1831L,0x21884a37bde642bcL,0x15c4d489531ac173L,
- 0x5f9e69136c1e3268L,-0x3adaa84e455c5acL,0x2095f679b184dbdfL,};
- icenceManager.addLicence("GuidebeeMap_JavaSE", keys);
設置Java SE平臺相關圖形系統(tǒng)實現(xiàn)
引路蜂地圖開發(fā)包,在設計時盡量做到平臺無關性,將一些平臺相關的部分,如圖形系統(tǒng)以接口形式定義,如IFont,IGraphics,AbstractGraphicsFactory,IImage。這樣在應用到具體平臺時,加上平臺相關的實現(xiàn),可以實現(xiàn)同一個庫應用到不同的平臺。這些平臺實現(xiàn)是以源碼提供的,如在Java SE平臺,提供了JavaSEFont,JavaSEGraphics,JavaSEGraphicsFactory和JavaSEImage類定義,可以參見引路蜂地圖API概述。
初始化地圖對象及設置服務回調函數(shù)
- MapConfiguration.setParameter(MapConfiguration.WORKER_THREAD_NUMBER, 16);
- mapTileDownloadManager = new MapTileDownloadManager(this);
- map = new RasterMap(2048, 2048, mapTileDownloadManager);
- map.setScreenSize(mapLabel.getWidth(), mapLabel.getHeight());
- mapTileDownloadManager.start();
- map.setMapDrawingListener(this);
- GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
- map.setCenter(center, 4, MapType.MICROSOFTCHINA);
- map.setRoutingListener(this);
- map.setGeocodingListener(this);
- map.setReverseGeocodingListener(this);
上述代碼設置地圖工作線程數(shù)為16,一般來說增加工資線程數(shù)可以提高地圖下載及響應速度。
創(chuàng)建地圖對象,設置顯示區(qū)域(屏幕)大小。此外地圖服務如查詢地址,獲取路徑都是采用異步方式,通過設置回調函數(shù)如setRoutingListener,setGeocodingListener,setReverseGeocodingListener等來通知應用 。
設置地圖中心和地圖類型
- GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
- map.setCenter(center, 4, MapType.MICROSOFTCHINA);
地圖縮放
RasterMap的 ZoomIn,ZoomOut用來放大和縮小地圖,setZoom可以設置地圖級別。
地圖平移
RasterMap 有兩個方法可以用于平移地圖,panTo 將地圖移動到指定經(jīng)緯度坐標,panDirection(dx,dy) 將地圖從當前位置平移dx,dy 個象素。 下列示例可以上,下,左,右平移地圖。
地址查詢
地址查詢(或稱為地址編碼)是將輸入的地名(如南京林業(yè)大學)轉換成對應的經(jīng)緯度坐標然后將其顯示在地圖上。
所有的地圖服務都是采用異步方式調用,在調用RasterMap.getLocation(address)前,需要設置好返回結果時的回調函數(shù)RasterMap.setGeocodingListener,回調函數(shù)接口定義為IGeocodingListener。 回調方法為public void done(String query,MapPoint[] result) ,如果查詢結果不為空,則reusult 為查詢結果的數(shù)組。示例中將地圖轉到第一個查詢結果。
對于MapAbc 地圖服務,還可以指定城市編碼,如南京編碼為25。public void getLocation(int citycode,String query, IGeocodingListener listener);
路徑查詢
可以通過RasterMap的getDirection()方法來查詢路徑,和查詢地址類似,路徑查詢的結果也是通過回調函數(shù)的方式來通知應用程序的,下面的例子返回南京到北京的路徑。返回結果存放在MapDirection中,MapDirection包含了路徑的詳細信息,包括路徑的每個步驟,長度,時間,方向等。
地圖服務可以選擇使用Google 地圖服務,CloudMade地圖服務,在中國還可能選擇MapAbc地圖服務,缺省使用Google 地圖服務。
getDirections()具有三個重載函數(shù),例子中是采用的文字描述方式。上述示例采用了from: address1 to: address2 的格式, CloudMade地圖服務和MapAbc地圖服務則必需采用 經(jīng)度1,緯度1,經(jīng)度2,緯度2和格式。
為避免混淆,可以使用下述格式。
public void getDirection(GeoLatLng[] waypoints, IRoutingListener listener);
其中 waypoints 為途徑點坐標數(shù)組經(jīng)緯值,可以支持多點路徑查詢。
此外對于MapAbc 地圖服務,還可以指定城市編碼,如南京編碼為25。
public void getDirection(int citycode,String query, IRoutingListener listener);
本地查詢
本地查詢可以查詢指定區(qū)域內(nèi)諸如賓館,郵局等用戶感興趣的地方。其使用方法和地址查詢非常類似。
本地查詢方法public void getLocations(String address,int start,GeoLatLng center,GeoBounds bound, IGeocodingListener listener);
指定中心點和查詢區(qū)域。本地查詢可以多次返回結果,start為查詢結果起始順序,每次返回結果在SearchOptions 中定義,缺省每次返回4個。
選擇地圖服務
引路蜂地圖服務缺省使用Google地圖服務,但你也可以選擇其它地圖服務,比方說當Google服務離線時,您可以選擇MapAbc的地圖服務,另外要注意的是中國地圖是有偏移的。如果想使用無偏移的中國地圖,一是采用地圖偏移校正算法,另外一個是使用CloudMade地圖服務。
所前所述,引路蜂地圖開發(fā)包在設計時將地圖圖片顯示和地圖服務兩部分設計成相對獨立的兩部分,Google中國地圖圖片,Bing中國地圖圖片,MapAbc中國地圖圖片是有偏移的地圖圖片,CloudMade(OpenStreet)中國地圖圖片是無偏移的。而Google中國地圖服務,MapAbc中國地圖服務是有偏移,CloudMade地圖服務是無偏移的。所以在選擇地圖類型和地圖服務類型時,要么都選擇有偏移,要么都選擇無偏移。否則地圖在顯示路徑時或地址時就不匹配。
下面列表是合法的組合:
地址反編碼
地址反編碼是通過經(jīng)緯度查詢對應的地名,
注意使用字符串經(jīng)緯度格式時,緯度在前,經(jīng)度在后,如果反了,則返回的地名或能為空或都跑到外國去了。結果也是一個數(shù)組,一般到第一個結果,后面結果是更大的區(qū)域或是距離相對較遠的地名。
其它
其它如地圖偏移,離線地圖,自定義地圖,疊加自定義圖層可以參加Android平臺Android自定義地圖示例:QQ地圖,Android引路蜂地圖開發(fā)示例:疊加自定義圖層 ,Android引路蜂地圖開發(fā)示例:離線地圖示例。
Java SE 平臺
文檔下載:點擊
開發(fā)庫:點擊
實例代碼:點擊
開發(fā)指南:點擊
原文鏈接:http://blog.csdn.net/mapdigit/article/details/7742550
【編輯推薦】