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

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.63/5 (8投票s)

2004年11月9日

3分钟阅读

viewsIcon

87541

downloadIcon

236

一个简单的应用程序,演示如何使用 C# 的 MapPoint SDK 并在智能手机上呈现地图。

引言

当涉及到移动性时,基于位置的服务和应用程序如今占据优先地位,因为商业世界正朝着移动性方向发展,以获得相关的商业收益。在技术方面,微软已经在所有这些技术领域占据了非常强大的地位。

对于基于位置的应用程序,新的 MapPoint SDK 3.5 提供了一个 XML Web 服务,允许我们构建基于位置的服务。此 SDK 可帮助我们获得非常高质量的地图,识别特定位置(如披萨店、医院等),并提供到达所需目的地的路线图。 您可以从这里下载 SDK。

在移动性方面,微软凭借其 Microsoft 智能手机和 PPC 已经占据了强大的空间。从这里了解更多关于移动性的信息。

在这篇分为两部分的文章中,我们将利用 C# 的 MapPoint SDK 构建一些简单的应用程序。 在本文的第一部分中,我们将在 Microsoft 智能手机上呈现给定地址的地图。

让我们从 MapPoint 开始。

MapPoint 公开了四种 Web 服务

  1. 查找服务 – 帮助我们定位地址、检索地理代码(纬度、经度)、地理实体。
  2. 渲染服务 – 此服务允许我们为给定的地址渲染地图,并设置渲染地图的大小和所需的地图视图。 此外,我们可以放置图钉,作为观看者的视觉提示。
  3. 路线服务 – 此服务允许我们生成路线、计算路线之间的距离并提供驾驶方向。
  4. 通用服务 – 充当实用程序服务,这对于上面列出的三种 Web 服务是通用的。 提供诸如 CountryRegion 信息和地图数据源信息之类的服务。

为了使用 MapPoint Web 服务,您需要获得一个开发者帐户。查看微软进行注册。您可以注册并获得一个评估帐户,或者如果您是 MSDN 订阅者,您可以获得一年的免费订阅。

很好,现在让我们进入代码。

我将剖析我们应用程序的代码。 但我强烈建议您阅读 MapPoint SDK 的基础知识。 在这里解释同样的内容只会是重复,并且不会增加任何价值。

下载并打开项目解决方案。 现在,打开MapPointWrapper.cs并替换您的 MapPoint 开发者用户名、_mapPointUserName 的密码和 _mapPointPassword const 字符串。

Form1.cs 包含一个 Menu 对象,并将获取要渲染的地图的地址详细信息。

单击“获取地图”菜单时,将创建一个 address 对象,并将 DataSource 设置为 “MapPoint.NA”。 以下是可用的数据源。

  1. MapPoint.EU – 欧洲
  2. MapPoint.NA – 北美
  3. MapPoint.BR – 巴西
  4. MapPoint.World – 世界
  5. 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 对象,该对象将保存视图、图钉、图像格式等。调用 RenderServiceGetMap 来检索相应的图像,该图像作为流检索并显示为位图。

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);
  }
}

就这样...我们完成了...这是渲染的地图。 另请注意地图中的图钉,以识别确切位置。

© . All rights reserved.