65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 .NET Compact Framework 入门 MapPoint Web 服务

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.57/5 (11投票s)

2004年6月3日

CPOL

6分钟阅读

viewsIcon

69376

downloadIcon

159

演示了如何使用 .NET Compact Framework 的 MapPoint Web 服务

这是 CodeProject CF 文章竞赛的一项参赛作品

引言

分布式计算、移动应用程序和 Web 服务是 IT 行业的热门词汇。智能手机和 Pocket PC 等高度复杂的移动设备被越来越多的人用于各种需求。XML 和 Web 服务已成为分布式计算的标准。如今,开发人员对编写针对移动应用程序的应用程序表现出极大的兴趣,并且由于许多原因,他们在开发此类应用程序时无法忽略 Web 服务。

本文/代码演示了 Web 服务 (MapPoint) 和 .NET Compact Framework 的使用。假设读者对 .NET Compact Framework 有基本了解,但将对 MapPoint Web 服务进行介绍。

MapPoint

Microsoft MapPoint Web 服务是一项具有 SOAP API 的 XML Web 服务,它允许您将基于位置的功能添加到您的应用程序中,该应用程序调用 MapPoint Web 服务的高质量地图以及定位和路线功能。MapPoint Web 服务包含四个组成部分:common、find、render 和 route。本节概述了这些服务中的每一个,以及我在代码中使用的类和方法。我将解释开始使用 MapPoint 所需的一切,但有关 MapPoint 的更全面讨论,请阅读 MapPoint SDK。

公共服务

公共服务包含 find、route 和 render 服务共有的类、方法和属性,或者是一些基本的实用函数。

  • Address 类包含地址的组成部分:街道、城市、其他城市、地区、国家和邮政编码。

查找服务

查找服务允许您从 MapPoint Web 服务数据中查找地址、地理实体、纬度和经度坐标以及兴趣点,还可以解析地址并返回指定纬度和经度坐标的位置信息。

  • FindServiceSoap 类包含与调用查找服务相关的方法和属性。
  • FindAddress 方法根据输入地址返回找到的地址列表,按搜索条件匹配程度排序。
  • FindAddressSpecification 类包含在 FindServiceSoap.FindAddress 方法中使用的搜索规范。它指定要查找的地址、要使用的搜索选项以及从中获取结果的数据源。

渲染服务

渲染服务允许您渲染路线和找到位置的地图、放置图钉、设置地图大小和地图视图、在地图上选择点、获取地图上点的位置信息、平移和缩放渲染的地图以及创建可点击地图。

  • RenderServiceSoap 类包含与调用渲染服务相关的方法和属性。
  • MapSpecification 类包含渲染地图的规范。它包括要使用的数据源、地图视图、图钉、路线、选定的实体和地图选项。
  • GetMap 方法根据地图选项返回地图图像、地图视图和热区定义。
  • GetBestMapView 方法返回选定位置或一组位置的最佳地图视图。最佳地图视图是包含所有所需位置的最大比例尺地图。
  • MapOptions 类包含在 RenderServiceSoap.GetMap 方法中使用的地图渲染选项。它指定数据源、图像格式、平移和缩放因子,以及请求的地图是否为概览地图。
  • Pushpin 类包含图钉的图标、标签、位置和用户定义的标识号。Pushpin 对象用于在地图图像上标记位置,该位置可以是地点、地址或纬度和经度坐标。
  • MapView 类是一个抽象类,代表一个请求的地图视图。每个派生类使用不同的度量来定义地图视图:一组位置点、一个边界矩形、高度和宽度或比例尺。
  • MapImage 类包含从 RenderServiceSoap.GetMap 方法返回的地图。它包括图像或获取图像的 URL、地图视图表示以及与图钉相关的热区。

路线服务

路线服务允许您基于位置或航点生成路线、驾驶方向和计算的路线表示,设置路段和路线偏好,以及生成路段和方向的地图视图。

  • RouteServiceSoap 类包含与调用路线服务相关的方法和属性。
  • Route 类包含两个航点(起点和终点)的路线。路线可以包含一个规范、一组方向和/或一个计算的路线表示。
  • CalculateSimpleRoute 方法根据指定的纬度和经度坐标返回一条路线。

获取 MapPoint

要使用 MapPoint,您需要

使用代码

理论够多了,让我们开始编码吧。MapPoint 的基本功能由两部分组成。

  1. 查找地址。
  2. 显示其地图。

下面的两个方法 MakeAddressMakeMap 封装了查找地址和显示其地图的过程,这些是开始使用 MapPoint 的步骤。每个方法后面都附有对方法中执行的一系列步骤的描述。

以下代码显示了对窗体全局的变量。

//Variables used by FindAddress and MakeMap methods.
private ViewByHeightWidth[]  views = null;
private FindResults foundAddressResults;
private LatLong[] latlongs = null;
private System.Drawing.Bitmap[] m_Maps;
private int Position=0;

MakeAddress 方法

  private void MakeAddress()
  {
    //Step 1
    FindServiceSoap findService = new FindServiceSoap();
    Address myAddress =  new Address();
    FindAddressSpecification findAddressSpec = 
      new FindAddressSpecification();

    //Step 2
    findService.Credentials = new System.Net.NetworkCredential(
      myUserName,myPassword);
    findService.PreAuthenticate = true;

    //Step 3
    myAddress.AddressLine = txtAddress.Text;  
    myAddress.PrimaryCity = txtCity.Text;
    myAddress.PostalCode = txtPostCode.Text;
    myAddress.CountryRegion = "UK";
      
    //Step 4
    findAddressSpec.DataSourceName = "MapPoint.EU";  
     findAddressSpec.InputAddress = myAddress;  
  
    //Step 5
    foundAddressResults = findService.FindAddress(findAddressSpec);

    //Step 6
    views = new ViewByHeightWidth[1];
    views[0] = foundAddressResults.Results[0].
         FoundLocation.BestMapView.ByHeightWidth;
  }

以下步骤描述了与代码中的步骤相对应的 MakeAddress 方法。

  1. 声明此方法中要使用的变量。
  2. 要使用 MapPoint,您需要用户名和密码(参见获取 MapPoint)。我使用这些信息来创建 FindServiceSoap 类的凭据,以便在使用该类的任何方法之前进行身份验证。
  3. myAddress 变量保存地址信息。
  4. FindAddressSpecification 类的 DataSourceName 属性包含 MapPoint Web 服务所在的多个数据源之一。MapPoint.EU 表示我们将在欧洲某处搜索地址。然后,我们将 Address 附加到 InputAddress 属性。
  5. 最后,调用 FindAddress 方法,传递地址规范,该方法返回 FindResults 集合。
  6. 从该集合中,我们检索一个 MapView 对象,该对象稍后将用于生成地图。

总之,我们创建了一个对象来保存地址,然后创建了一个对象来保存该地址的规范,使用该规范搜索了地址并获得了该地址的视图。

MakeMap 方法

private void MakeMap()
  {
    //Step 1
    RenderServiceSoap renderService  = new RenderServiceSoap();
    Pushpin[] pushpins = new Pushpin[1];
    MapSpecification mapSpec  = new MapSpecification();

    //Step 2
    renderService.Credentials = 
       new System.Net.NetworkCredential(myUserName,myPassword);
    renderService.PreAuthenticate = true;
    
    //Step 3
    pushpins[0] = new Pushpin();
    pushpins[0].IconDataSource = "MapPoint.Icons";
    pushpins[0].IconName = "0";
    pushpins[0].Label = foundAddressResults.Results[0].FoundLocation.Entity.Name;
    pushpins[0].LatLong = views[0].CenterPoint;
    pushpins[0].ReturnsHotArea = true;

    //Step 4
    mapSpec.DataSourceName = "MapPoint.EU";
    mapSpec.Views = views;  
    mapSpec.Pushpins = pushpins;
    mapSpec.Options = new MapOptions();    
    mapSpec.Options.Format = new ImageFormat();
    mapSpec.Options.Format.Width = pbMap.Width;
    mapSpec.Options.Format.Height = pbMap.Height;

    //Step 5
    MapImage[] mapImages = renderService.GetMap(mapSpec);  
    System.IO.Stream streamImage = 
       new System.IO.MemoryStream(mapImages[0].MimeData.Bits);
    Bitmap bitmapImage = new Bitmap(streamImage);
    pbMap.Image= bitmapImage;    
  }

以下步骤描述了与代码中的步骤相对应的 MakeMap 方法。

  1. 声明此方法中要使用的变量。
  2. 要使用 MapPoint,您需要用户名和密码(参见获取 MapPoint)。我使用这些信息来创建 RenderServiceSoap 类的凭据,以便在使用该类的任何方法之前进行身份验证。
  3. 创建一个 Pushpin 对象,该对象将显示(在地图上)我们正在搜索的地址。
  4. 创建一个 MapSpecification 对象,该对象将保存地图的数据源、图钉、地图视图和格式选项。
  5. 最后,调用 GetMap 方法并检索地图。将返回一个 MapImage 类的数组。在我们的例子中,我们将使用数组的第一个元素来形成一个位图并在 Picture Box 中显示。

总之,我们创建了一个对象来保存图钉,然后构建了地图规范,最后使用该规范获得了地图。

结论

本文演示了 MapPoint Web 服务的基础知识。ZIP 文件包含完整应用程序的源代码,该源代码还显示了如何使用 MapPoint 在两个地址之间查找路线。

参考文献

  • MSDN
© . All rights reserved.