Java SE引路蜂地圖開發示例 – JAVA編程語言程序開發技術文章

引路蜂地圖也提供對Java SE平臺的支持,可以開發桌面地圖應用,由於Java SE的跨平臺特性,使用Java SE引路蜂地圖開發包開發的地圖應用可以運行於Windows ,Lunix,Unix,Mac OS等平臺。開發桌面應用比開發移動應用要容易的多,屏幕,內存等方面都比移動平臺要寬裕的多。

下面使用一個簡單的應用來介紹一下Java SE引路蜂地圖開發。示例截圖如下

 

設置引路蜂地圖開發包License

引路蜂開發包License分兩部分,一個為License文件guidebee.lic ,另一部分為License文件對應的註冊碼,需在程序運行前初始化

[java] 
LicenceManager licenceManager = LicenceManager.getInstance(); 
ong keys[]= {0x41c0df1c118b1831L,0x21884a37bde642bcL,0x15c4d489531ac173L, 
  0x5f9e69136c1e3268L,-0x3adaa84e455c5acL,0x2095f679b184dbdfL,}; 
icenceManager.addLicence("GuidebeeMap_JavaSE", keys); 

 LicenceManager licenceManager = LicenceManager.getInstance();
long keys[]= {0x41c0df1c118b1831L,0x21884a37bde642bcL,0x15c4d489531ac173L,
   0x5f9e69136c1e3268L,-0x3adaa84e455c5acL,0x2095f679b184dbdfL,};
licenceManager.addLicence("GuidebeeMap_JavaSE", keys);設置Java SE平臺相關圖形系統實現

引路蜂地圖開發包,在設計時盡量做到平臺無關性,將一些平臺相關的部分,如圖形系統以接口形式定義,如IFont,IGraphics,AbstractGraphicsFactory,IImage。這樣在應用到具體平臺時,加上平臺相關的實現,可以實現同一個庫應用到不同的平臺。這些平臺實現是以源碼提供的,如在Java SE平臺,提供瞭JavaSEFont,JavaSEGraphics,JavaSEGraphicsFactory和JavaSEImage類定義,可以參見引路蜂地圖API概述。

初始化地圖對象及設置服務回調函數

[java]
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); 

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);上述代碼設置地圖工作線程數為16,一般來說增加工資線程數可以提高地圖下載及響應速度。
創建地圖對象,設置顯示區域(屏幕)大小。此外地圖服務如查詢地址,獲取路徑都是采用異步方式,通過設置回調函數如setRoutingListener,setGeocodingListener,setReverseGeocodingListener等來通知應用 。

設置地圖中心和地圖類型

[java] 
GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778); 
map.setCenter(center, 4, MapType.MICROSOFTCHINA); 

GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778);
map.setCenter(center, 4, MapType.MICROSOFTCHINA);地圖縮放

RasterMap的 ZoomIn,ZoomOut用來放大和縮小地圖,setZoom可以設置地圖級別。

地圖平移

RasterMap 有兩個方法可以用於平移地圖,panTo 將地圖移動到指定經緯度坐標,panDirection(dx,dy) 將地圖從當前位置平移dx,dy 個象素。 下列示例可以上,下,左,右平移地圖。

地址查詢

地址查詢(或稱為地址編碼)是將輸入的地名(如南京林業大學)轉換成對應的經緯度坐標然後將其顯示在地圖上。
所有的地圖服務都是采用異步方式調用,在調用RasterMap.getLocation(address)前,需要設置好返回結果時的回調函數RasterMap.setGeocodingListener,回調函數接口定義為IGeocodingListener。 回調方法為public void done(String query,MapPoint[] result) ,如果查詢結果不為空,則reusult 為查詢結果的數組。示例中將地圖轉到第一個查詢結果。
對於MapAbc 地圖服務,還可以指定城市編碼,如南京編碼為25。
public void getLocation(int citycode,String query, IGeocodingListener listener);

路徑查詢

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

地圖服務可以選擇使用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);

本地查詢

本地查詢可以查詢指定區域內諸如賓館,郵局等用戶感興趣的地方。其使用方法和地址查詢非常類似。
本地查詢方法public void getLocations(String address,int start,GeoLatLng center,GeoBounds bound, IGeocodingListener listener);
指定中心點和查詢區域。本地查詢可以多次返回結果,start為查詢結果起始順序,每次返回結果在SearchOptions 中定義,缺省每次返回4個。

選擇地圖服務

引路蜂地圖服務缺省使用Google地圖服務,但你也可以選擇其它地圖服務,比方說當Google服務離線時,您可以選擇MapAbc的地圖服務,另外要註意的是中國地圖是有偏移的。如果想使用無偏移的中國地圖,一是采用地圖偏移校正算法,另外一個是使用CloudMade地圖服務。
所前所述,引路蜂地圖開發包在設計時將地圖圖片顯示和地圖服務兩部分設計成相對獨立的兩部分,Google中國地圖圖片,Bing中國地圖圖片,MapAbc中國地圖圖片是有偏移的地圖圖片,CloudMade(OpenStreet)中國地圖圖片是無偏移的。而Google中國地圖服務,MapAbc中國地圖服務是有偏移,CloudMade地圖服務是無偏移的。所以在選擇地圖類型和地圖服務類型時,要麼都選擇有偏移,要麼都選擇無偏移。否則地圖在顯示路徑時或地址時就不匹配。

下面列表是合法的組合:

地圖類型 (MapType)  地圖服務類型 (DigitalMapService)
GOOGLECHINA GOOGLE_MAP_SERVICE
MICROSOFTCHINA GOOGLE_MAP_SERVICE
MAPABCCHINA GOOGLE_MAP_SERVICE
OPENSTREETMAP CLOUDMADE_MAP_SERVICE
GOOGLECHINA MAPABC_MAP_SERVICE
MICROSOFTCHINA MAPABC_MAP_SERVICE
MAPABCCHINA MAPABC_MAP_SERVICE

地址反編碼

地址反編碼是通過經緯度查詢對應的地名,

註意使用字符串經緯度格式時,緯度在前,經度在後,如果反瞭,則返回的地名或能為空或都跑到外國去瞭。結果也是一個數組,一般到第一個結果,後面結果是更大的區域或是距離相對較遠的地名。

其它

其它如地圖偏移,離線地圖,自定義地圖,疊加自定義圖層可以參加Android平臺Android自定義地圖示例:QQ地圖,Android引路蜂地圖開發示例:疊加自定義圖層 ,Android引路蜂地圖開發示例:離線地圖示例。

 

Java SE 平臺

 

文檔 下載
開發庫 下載
實例代碼 下載
開發指南
作者:mapdigit
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。