科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件MapPoint+SmartPhone+C#开发示例

MapPoint+SmartPhone+C#开发示例

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文提供了一些简单的应用程序,它演示了C#如何使用MapPoint SDK,以及如何在SmartPhone上显示地图。

作者: 陶刚编译 来源:天极开发 2007年11月21日

关键字: MapPoint Smartphone C# 开发

  • 评论
  • 分享微博
  • 分享邮件
本文提供了一些简单的应用程序,它演示了C#如何使用MapPoint SDK,以及如何在SmartPhone上显示地图。

  介绍

  在业界迅速迁移到移动领域以获取相关利润的过程中,基于位置的服务和应用很明显领先一步。在技术前端,微软已经在所有这些相关技术领域中建立了牢固的地位。

  对于基于位置的应用程序来说,新的MapPoint SDK 3.5提供了一个XML Web服务,使我们能够建立起基于位置的服务。这个SDK帮助我们获取高质量的地图,该地图还标识出了特定的位置(例如pizza店、医院等),还提供了到达目把地点的路线图。你可以下载这个SDK

  在移动(Mobility)操作系统方面,的SmartPhone和PPC为微软建立起强大的地位。
 
  在本文中,我们将基于MapPoint SDK,使用C#建立一些简单的应用程序。我们将先在微软SmartPhone上显示一个指定地点的地图。

  我们先介绍一下MapPoint。MapPoint暴露了四个Web服务:

  1.查找服务--帮助我们定位地址、检索经纬度、地理实体。

  2.显示服务--这个服务允许我们显示指定地址的地图,并设置被显示地图的大小和视图。同时,我们还可以设定"图钉",可以作为阅读器的可视化标记。

  3.路线服务--这个服务允许我们生成路线、计算两个地点之间的距离并提供驾车方向。

  4.通用服务--它是一些工具,是上述的三个Web服务公用部分。提供一些服务,例如国家信息和地图数据源信息。

  如果要使用MapPoint Web服务,你就必须获得一个开发者帐号。点击这个链接进行注册。你可以注册并收到一个评估帐号,如果你是MSDN订户,就可以收到为期1年的免费订阅。

  好了,下面我们进行代码分析

  我会分解应用程序的代码。但是我强烈推荐你阅读MapPoint SDK的基础知识。解释这些相同的内容是重复的,没有增加任何价值。


  显示指定的地图

  下载并打开项目解决方案。现在,打开MapPointWrapper.cs,用你自己的MapPoint开发者用户名、密码代替_mapPointUserName和_mapPointPassword常量字符串。

  Form1.cs包含一个Menu对象,它将获取被显示的地图的地址的详细信息。


  点击"Get Map"菜单,会建立一个address对象,它已经被设置为"MapPoint.NA"。下面是一些可以使用的数据源。

  1. MapPoint.EU - 欧洲

  2. MapPoint.NA - 北美洲

  3. MapPoint.BR - 巴西

  4. MapPoint.World - 世界

  5. MapPoint.Moon - 月脉图

  下面的代码将使用FindServiceSoap Web服务,根据指定的地址检索位置信息。该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);
 }
}

  我们已经完成了事务。下面就是显示的地图。请注意地图上的"图钉"标识出正确的位置了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章