程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> MapPoint+SmartPhone+C#開發示例

MapPoint+SmartPhone+C#開發示例

編輯:C#基礎知識

  本文提供了一些簡單的應用程序,它演示了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);
 }
}

本文示例代碼或素材下載

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved