MapPoint、智能手机和 C# - 第 1 部分






4.63/5 (8投票s)
2004年11月9日
3分钟阅读

87541

236
一个简单的应用程序,演示如何使用 C# 的 MapPoint SDK 并在智能手机上呈现地图。
引言
当涉及到移动性时,基于位置的服务和应用程序如今占据优先地位,因为商业世界正朝着移动性方向发展,以获得相关的商业收益。在技术方面,微软已经在所有这些技术领域占据了非常强大的地位。
对于基于位置的应用程序,新的 MapPoint SDK 3.5 提供了一个 XML Web 服务,允许我们构建基于位置的服务。此 SDK 可帮助我们获得非常高质量的地图,识别特定位置(如披萨店、医院等),并提供到达所需目的地的路线图。 您可以从这里下载 SDK。
在移动性方面,微软凭借其 Microsoft 智能手机和 PPC 已经占据了强大的空间。从这里了解更多关于移动性的信息。
在这篇分为两部分的文章中,我们将利用 C# 的 MapPoint SDK 构建一些简单的应用程序。 在本文的第一部分中,我们将在 Microsoft 智能手机上呈现给定地址的地图。
让我们从 MapPoint 开始。
MapPoint 公开了四种 Web 服务
- 查找服务 – 帮助我们定位地址、检索地理代码(纬度、经度)、地理实体。
- 渲染服务 – 此服务允许我们为给定的地址渲染地图,并设置渲染地图的大小和所需的地图视图。 此外,我们可以放置图钉,作为观看者的视觉提示。
- 路线服务 – 此服务允许我们生成路线、计算路线之间的距离并提供驾驶方向。
- 通用服务 – 充当实用程序服务,这对于上面列出的三种 Web 服务是通用的。 提供诸如 CountryRegion 信息和地图数据源信息之类的服务。
为了使用 MapPoint Web 服务,您需要获得一个开发者帐户。查看微软进行注册。您可以注册并获得一个评估帐户,或者如果您是 MSDN 订阅者,您可以获得一年的免费订阅。
很好,现在让我们进入代码。
我将剖析我们应用程序的代码。 但我强烈建议您阅读 MapPoint SDK 的基础知识。 在这里解释同样的内容只会是重复,并且不会增加任何价值。
下载并打开项目解决方案。 现在,打开MapPointWrapper.cs并替换您的 MapPoint 开发者用户名、_mapPointUserName
的密码和 _mapPointPassword
const 字符串。
Form1.cs 包含一个 Menu
对象,并将获取要渲染的地图的地址详细信息。
单击“获取地图”菜单时,将创建一个 address
对象,并将 DataSource
设置为 “MapPoint.NA
”。 以下是可用的数据源。
MapPoint.EU
– 欧洲MapPoint.NA
– 北美MapPoint.BR
– 巴西MapPoint.World
– 世界MapPoint.Moon
- 月球地图
以下代码将使用 FindServiceSoap Webservice 根据给定的地址检索位置详细信息。 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);
}
}
就这样...我们完成了...这是渲染的地图。 另请注意地图中的图钉,以识别确切位置。