2008-09-17 67 views
13

我想在WPF中做一个简单的地图控件,并且正在考虑基本地图界面的设计,并且想知道是否有人对此有一些很好的建议。设计一个WPF地图控件

我在想什么是使用ScrollViewer(无滚动条)作为我的“查看端口”,然后将所有东西堆叠在画布上。从Z-Index = 0开始,我在想:

  1. 经纬度计算,控制定位,Z指数叠加的基本画布。
  2. 多个网格元素以不同缩放级别表示地图。使用网格使拼贴更容易。
  3. 使用位置数据映射对象。
  4. 地图控件(缩放滑块,概述等)。
  5. 使用鼠标移动事件滚动查看器进行平移和缩放。

有关我应该如何构建这个的任何意见建议?

回答

0

主要问题是如何存储和访问您要放入地图的项目(假设这不仅仅是一个图片显示)。查找一些想法场景图。

此外,如果你希望它是不是一个玩偶图像查看器中纬度长,XY缩放可以得到“有趣”更

1

你想创造一个WPF绘图工具类似于雷,这使我问关于来自Silverlight的DeepZoom(又名MultiScaleImage)的this question。我想要一个WPF版本。被接受的答案提供了一个非常好的起点(类似于你所描述的思考过程)。

8

如果您正在寻找一个良好的开端,您可以使用SharpMap项目提供的代码的基础,并从那里建立。如果我记得有几个人已经在为SharpMap开发WPF渲染器,那么您可能还需要一些代码。

我个人在将GIS数据与实时GPS数据相结合的C#2.0应用程序中使用了SharpMap,并且非常成功。 SharpMap为我提供了处理GIS数据的转换套件,以及改变GIS信息的数学基础。将非呈现代码与WPF前端一起使用应该相对简单明了,因为它们已将演示文稿与数据分开。

(编辑:增加了有关我如何使用SharpMap的更多细节)

+1

我看了一下SharpMap,但不幸的是它还没有准备好为我们的部署生产。它无法加载一些ESRI Shape文件,这是我们使用相当多的东西。 – Dylan 2008-09-30 22:54:09

1

虚拟地球有什么赞成,WPF

+0

不幸的是,这对我不起作用,因为它使用嵌入式Web主机,我需要它在部分信任的XBAP中工作。除非我构建错误,否则将无法正常工作。 – Dylan 2008-10-06 20:55:24

5

这恐怕是绕了一个弯路,但你可能会发现一些有用的东西在JavaScript和XAML从SilverlightEarth.com这是一个基于Silverlight 1.0的地图瓷砖客户端。它可以加载VE,谷歌,雅虎(有一个DeepZoom version,可以加载OpenStreetMap,月球和火星;但由于它使用MSI它并没有真正帮助WPF 3/3.5)。尽管JavaScript有点不整洁,但您可以清楚地看到它正在创建一个Silverlight 1.0 Xaml(动态调整大小)Canvas,使用Tile(图像控件)填充它,并处理放大/缩小和平移请求。您需要理解所有的JavaScript并将其转换为C# - XAML应该大部分不会改变为WPF。我有tested this Silverlight 1.0 with a Deep Zoom tile pyramid(和here),所以这些概念是适用的(即不只是对地图)。

我知道这工作,因为我已经做到了我自己打造Geoquery2008.comscreenshot)地图查看器是WPF/C#。不幸的是,Geoquery2008组件被混淆了,但是你仍然可以通过DASM/Reflector收集一些想法或有用的代码。它仍然是一个测试版,所以我不会声称它完成了100%。我没有真正想过将地图代码分解成单独的控件,但是如果另一个控件没有出现,我可以考虑一下吗?

顺便说一句,我也是从ScrollViewer开始的,但是我计划抛弃它并更加紧密地模仿JavaScript,因此在平移/缩放时(通过获得对ScrollViewer提供的更多控制权),重新使用Image对象更加容易。

这些MSDN页面上的Virtual Earth tile systemDeep Zoom file format及相关链接可能也是一个有用的参考。

最后 - 我想你已经看到从这篇文章后,DeepZoom/MultiScaleImage可能在.NET 4.0/Studio 2010

1

不知道你是否使用了ESRI软件,但是我听说那里开发了一个Silverlight API,因此你可能想要拖延。

0

在WPF的Bing Maps Windows Presentation Foundation Control v1是最好的地图控制。

支持拼贴图层 - 您现在可以在地图控件上覆盖自己的拼贴图层。
关闭底层图层 - 当您不需要/不想使用我们的底图贴图时,此选项非常有用,而且您更喜欢使用自己的底层而不覆盖顶层。控件不会请求底层贴图这减少了下载并提高了渲染性能。
SSL支持 - 由于你们中的许多人在安全应用程序中使用WPF控件,因此现在可以通过SSL进行磁贴和服务请求而不出问题。
隐藏比例尺 - 如果你不想要比例尺(也许你的地图很小,比例尺混乱地图),你可以关闭它。事实上,您无法关闭的唯一元素是必应标志和版权。
新的版权服务 - 为我们的数据供应商提供准确的版权。额外的惯性 - 现在为鼠标启用惯性,默认为触摸。
其他错误修复 - 感谢您对MSDN论坛,Bing Maps博客,电子邮件和Twitter的反馈。很好找人。