標籤:style class blog code java http
From:http://www.2cto.com/kf/201207/140421.html
引路蜂地圖也提供對.Net Framework平台的支援,可以開發案頭地圖應用,由於Mono C#的跨平台特性,使用Visual Studio 和Mono引路蜂地圖開發包開發的地圖應用可以運行於Windows ,Lunix,Unix,Mac OS等平台。開發案頭應用比開發行動裝置 App要容易的多,螢幕,記憶體等方面都比移動平台要寬裕的多。
下面使用一個簡單的應用來介紹一下.Net Framework引路蜂地圖開發。樣本如下
設定引路蜂地圖開發包License
引路蜂開發包License分兩部分,一個為License檔案guidebee.lic ,另一部分為License檔案對應的註冊碼,需在程式運行前初始化
//set the map licence info. LicenceManager licenceManager = LicenceManager.GetInstance(); long[] keys = new []{ -0x64fa2841ac936ab3L, 0x492e8e7bf7876c44L, -0x3bb9b3e2a8e4c94dL, 0x224a4785c48a8eb3L, 0x3a36fc72ad775a85L, -0x93b87a82371b0ddL, }; licenceManager.AddLicence("GuidebeeMap_DotNet", keys); //set the map licence info.LicenceManager licenceManager = LicenceManager.GetInstance();long[] keys = new []{ -0x64fa2841ac936ab3L, 0x492e8e7bf7876c44L, -0x3bb9b3e2a8e4c94dL, 0x224a4785c48a8eb3L, 0x3a36fc72ad775a85L, -0x93b87a82371b0ddL, };licenceManager.AddLicence("GuidebeeMap_DotNet", keys);
設定.Net Framework平台相關圖形系統實現引路蜂地圖開發包,在設計時盡量做到平台無關性,將一些平台相關的部分,形系統以介面形式定義,如IFont,IGraphics,AbstractGraphicsFactory,IImage。這樣在應用到具體平台時,加上平台相關的實現,可以實現同一個庫應用到不同的平台。這些平台實現是以源碼提供的,如在Java SE平台,提供了JavaSEFont,JavaSEGraphics,JavaSEGraphicsFactory和JavaSEImage類定義,可以參見引路蜂地圖API概述。
初始化地圖對象及設定服務回呼函數
//optional, get the tile url from server. MapType.UpdateMapTileUrl(); MapLayer.SetAbstractGraphicsFactory(NETGraphicsFactory.GetInstance()); MapConfiguration.SetParameter(MapConfiguration.WorkerThreadNumber, 32); _mapImage = MapLayer.GetAbstractGraphicsFactory().CreateImage(768, 768); _mapGraphics = _mapImage.GetGraphics(); _mapTileDownloadManager = new MapTileDownloadManager(this); _rasterMap = new RasterMap(2048, 2048, _mapType, _mapTileDownloadManager); //_rasterMap.SetCurrentMapService(DigitalMapService.CloudmadeMapService); //DigitalMapService.GetSearchOptions().LanguageId = "zh-cn"; _rasterMap.SetScreenSize(768, 768); _mapTileDownloadManager.Start(); _rasterMap.SetMapDrawingListener(this); _rasterMap.SetGeocodingListener(this); _rasterMap.SetRoutingListener(this); //optional, get the tile url from server.MapType.UpdateMapTileUrl(); MapLayer.SetAbstractGraphicsFactory(NETGraphicsFactory.GetInstance());MapConfiguration.SetParameter(MapConfiguration.WorkerThreadNumber, 32);_mapImage = MapLayer.GetAbstractGraphicsFactory().CreateImage(768, 768);_mapGraphics = _mapImage.GetGraphics(); _mapTileDownloadManager = new MapTileDownloadManager(this);_rasterMap = new RasterMap(2048, 2048, _mapType, _mapTileDownloadManager);//_rasterMap.SetCurrentMapService(DigitalMapService.CloudmadeMapService);//DigitalMapService.GetSearchOptions().LanguageId = "zh-cn";_rasterMap.SetScreenSize(768, 768);_mapTileDownloadManager.Start();_rasterMap.SetMapDrawingListener(this);_rasterMap.SetGeocodingListener(this);_rasterMap.SetRoutingListener(this);
上述代碼設定地圖背景工作執行緒數為16,一般來說增加工資線程數可以提高地圖下載及響應速度。建立地圖對象,設定顯示地區(螢幕)大小。此外地圖服務如查詢地址,擷取路徑都是採用非同步方式,通過設定回呼函數如setRoutingListener,setGeocodingListener,setReverseGeocodingListener等來通知應用 。設定地圖中心和地圖類型
var center = new GeoLatLng(-31.948275, 115.857562); _rasterMap.SetCenter(center, 15, _rasterMap.GetMapType()); var center = new GeoLatLng(-31.948275, 115.857562);_rasterMap.SetCenter(center, 15, _rasterMap.GetMapType());
上述代碼將地圖中心設定在32.0616667, 118.7777778,地圖類型為Bing中國地圖,縮放層級為4級,引路蜂內部支援20多種地圖類型,並支援自訂地圖類型。
地圖縮放
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
地址反編碼
地址反編碼是通過經緯度查詢對應的地名,
注意使用字串經緯度格式時,緯度在前,經度在後,如果反了,則返回的地名或能為空白或都跑到外國去了。結果也是一個數組,一般到第一個結果,後面結果是更大的地區或是距離相對較遠的地名。
.Net Framework
協助文檔 下載
.Net Framework引路蜂地圖開發庫 下載
.Net Framework引路蜂地圖開發樣本 下載
GTK Mono.Net Framework引路蜂地圖開發樣本 下載
引路蜂地圖開發指南 下載