本文提供了一些簡單的應用程序,它演示了C#如何使用MapPoint SDK,以及如何在SmartPhone上顯示地圖。
介紹
在業界迅速遷移到移動領域以獲取相關利潤的過程中,基於位置的服務和應用很明顯領先一步。在技術前端,微軟已經在所有這些相關技術領域中建立了牢固的地位。
對於基於位置的應用程序來說,新的MapPoint SDK 3.5提供了一個XML Web服務,使我們能夠建立起基於位置的服務。這個SDK幫助我們獲取高質量的地圖,該地圖還標識出了特定的位置(例如pizza店、醫院等),還提供了到達目把地點的路線圖。你可以下載這個SDK。
在移動(Mobility)操作系統方面,的SmartPhone和PPC為微軟建立起強大的地位。
在本文中,我們將基於MapPoint SDK,使用C#建立一些簡單的應用程序。我們將先在微軟SmartPhone上顯示一個指定地點的地圖。
我們先介紹一下MapPoint。MapPoint暴露了四個Web服務:
1.查找服務--幫助我們定位地址、檢索經緯度、地理實體。
2.顯示服務--這個服務允許我們顯示指定地址的地圖,並設置被顯示地圖的大小和視圖。同時,我們還可以設定"圖釘",可以作為閱讀器的可視化標記。
3.路線服務--這個服務允許我們生成路線、計算兩個地點之間的距離並提供駕車方向。
4.通用服務--它是一些工具,是上述的三個Web服務公用部分。提供一些服務,例如國家信息和地圖數據源信息。
如果要使用MapPoint Web服務,你就必須獲得一個開發者帳號。點擊這個鏈接進行注冊。你可以注冊並收到一個評估帳號,如果你是MSDN訂戶,就可以收到為期1年的免費訂閱。
好了,下面我們進行代碼分析。
我會分解應用程序的代碼。但是我強烈推薦你閱讀MapPoint SDK的基礎知識。解釋這些相同的內容是重復的,沒有增加任何價值。
顯示指定的地圖
下載並打開項目解決方案。現在,打開MapPointWrapper.cs,用你自己的MapPoint開發者用戶名、密碼代替_mapPointUserName和_mapPointPassword常量字符串。
Form1.cs包含一個Menu對象,它將獲取被顯示的地圖的地址的詳細信息。
點擊"Get Map"菜單,會建立一個address對象,它已經被設置為"MapPoint.NA"。下面是一些可以使用的數據源。
1. MapPoint.EU - 歐洲
2. MapPoint.NA - 北美洲
3. MapPoint.BR - 巴西
4. MapPoint.World - 世界
5. MapPoint.Moon - 月脈圖
下面的代碼將使用FindServiceSoap Web服務,根據指定的地址檢索位置信息。該Web服務必須通過MapPoint開發者帳號認證。我們必須提供數據源名稱和地址。
public static void GetAddress(Address address, string DataSourceName, out indResults Location, out ViewByHeightWidth[] Views) { try { FindServiceSoap locationService = new FindServiceSoap(); locationService.Credentials = new System.Net.NetworkCredential(_mapPointUserName,_mapPointPassword); locationService.PreAuthenticate = true; FindAddressSpecification locationData = new FindAddressSpecification(); locationData.DataSourceName = DataSourceName; locationData.InputAddress = address; Location = locationService.FindAddress(locationData); Views = new ViewByHeightWidth[1]; Views[0] = Location.Results[0].FoundLocation.BestMapView.ByHeightWidth; } catch(Exception ex) { throw new Exception(ex.Message,ex); } }
在獲取位置的詳細信息之後,這些數據會被進一步發送給GetMap方法。這個方法使用了"RenderServiceSoap"Web服務。這個服務也需要認證信息。MapPoint提供了"圖釘",它是一種用於標識地圖上的地址的可視化標記。你可以從默認的圖標組中選擇一個,並設置一個恰當的名稱。此外,它還會建立一個MapSpecification對象,它會保持視圖、圖釘、圖像格式等內容。我們調用RenderService的GetMap方法來檢索適當的圖像,它是作為流檢索到的,並用位圖顯示出來。
public static Bitmap GetMap(FindResults Location, ViewByHeightWidth[] Views,string DataSourceName, Point MapDimensions) { try { RenderServiceSoap renderService = new RenderServiceSoap(); Pushpin[] pushpins = new Pushpin[1]; MapSpecification mapSpec = new MapSpecification(); renderService.Credentials = new System.Net.NetworkCredential(_mapPointUserName, _mapPointPassword); renderService.PreAuthenticate = true; pushpins[0] = new Pushpin(); pushpins[0].IconDataSource = "MapPoint.Icons"; pushpins[0].IconName = "0"; pushpins[0].Label = Location.Results[0].FoundLocation.Entity.Name; pushpins[0].LatLong = Views[0].CenterPoint; pushpins[0].ReturnsHotArea = true; mapSpec.DataSourceName = DataSourceName; mapSpec.Views = Views; mapSpec.Pushpins = pushpins; mapSpec.Options = new MapOptions(); mapSpec.Options.Format = new ImageFormat(); mapSpec.Options.Format.Width = MapDimensions.X; mapSpec.Options.Format.Height = MapDimensions.Y; MapImage[] mapImages = renderService.GetMap(mapSpec); System.IO.Stream streamImage = new System.IO.MemoryStream(mapImages[0].MimeData.Bits); Bitmap bitmap = new Bitmap(streamImage); return bitmap; } catch(Exception ex) { throw new Exception(ex.Message,ex); } }
本文示例代碼或素材下載