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






3.63/5 (35投票s)
演示如何将 MapPoint Web 服务与 .NET Compact Framework 结合使用。
引言
分布式计算、移动应用和 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 的基本功能。
- 查找地址。
- 显示其地图。
下面给出的 MakeAddress
和 MakeMap
两个方法封装了查找地址和显示其地图的过程,这些是您入门的步骤。每个方法后面都跟着对方法中执行的一系列步骤的描述。
以下代码显示了表单的全局变量
//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
方法。
- 声明此方法中要使用的变量。
- 要使用 MapPoint,您需要用户名和密码(请参阅“获取 MapPoint”)。我使用这些信息为
FindServiceSoap
类创建凭据,以便在使用该类的任何方法之前进行身份验证。 myAddress
变量保存地址信息。FindAddressSpecification
类的DataSourceName
属性保存 MapPoint Web 服务所在众多数据源之一。MapPoint.EU 表示我们将在欧洲某个地方搜索地址。然后我们将Address
附加到InputAddress
属性。- 最后,调用
FindAddress
方法,传入地址规范,该方法返回FindResults
集合。 - 从这个集合中,我们检索一个
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
方法。
- 声明此方法中要使用的变量。
- 要使用 MapPoint,您需要用户名和密码(请参阅“获取 MapPoint”)。我使用这些信息为
RenderServiceSoap
类创建凭据,以便在使用该类的任何方法之前进行身份验证。 - 创建一个
Pushpin
对象,该对象将在地图上显示我们正在搜索的地址。 - 创建一个
MapSpecification
对象,该对象将保存地图的数据源、图钉、地图视图和格式选项。 - 最后,调用
GetMap
方法并检索地图。返回一个MapImage
类数组。在我们的例子中,我们将使用数组的第一个元素来形成位图并在PictureBox
中显示。
简而言之,我们创建了一个对象来保存图钉,然后构建了地图规范,最后使用该规范获得了地图。
结论
本文演示了 MapPoint Web 服务的基础知识。ZIP 文件包含完整应用程序的源代码,该应用程序还展示了如何使用 MapPoint 在两个地址之间查找路线。
参考文献
- MSDN
- www.gotdotnet.com
-
咖啡店示例