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

使用 .NET Compact Framework 开始使用 MapPoint Web 服务

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.63/5 (35投票s)

2004年5月30日

CPOL

6分钟阅读

viewsIcon

96102

downloadIcon

251

演示如何将 MapPoint Web 服务与 .NET Compact Framework 结合使用。

Sample Image - SmartDeviceMap.gif

引言

分布式计算、移动应用和 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。

通用服务

通用服务包含对查找、路线和渲染服务通用或为基本实用程序的类、方法和属性。

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

查找服务

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

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

渲染服务

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

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

路线服务

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

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

获取 MapPoint

要使用 MapPoint,您需要

使用代码

现在理论足够了,让我们开始编码。两件事构成了 MapPoint 的基本功能。

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

下面给出的 MakeAddressMakeMap 两个方法封装了查找地址和显示其地图的过程,这些是您入门的步骤。每个方法后面都跟着对方法中执行的一系列步骤的描述。

以下代码显示了表单的全局变量

        //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 类数组。在我们的例子中,我们将使用数组的第一个元素来形成位图并在 PictureBox 中显示。

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

结论

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

参考文献

© . All rights reserved.