本文提供了一些簡單的應用程序,它演示了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);
}
}
本文示例代碼或素材下載