我正在考虑在WPF中制作一个简单的地图控件,并且正在考虑基本地图界面的设计,我想知道是否有人对此有一些好的建议。
我想的是使用一个ScrollViewer (无滚动条)作为我的“视图端口”,然后将所有的东西堆叠在画布上。从Z-Index=0开始,我想:
关于我应该如何建立这个问题,有什么建议吗?
发布于 2008-09-17 22:11:53
如果您正在寻找一个好的开端,您可以使用SharpMap项目提供的代码基础,然后从那里构建。如果我还记得有几个人已经在为SharpMap开发一个WPF渲染器,那么您可能也有一些代码要开始。
我个人在一个将SharpMap数据和实时C#数据结合起来的C# 2.0应用程序中使用了GIS2.0,它非常成功。SharpMap为我提供了处理地理信息系统数据的转换套件,以及处理改变地理信息的数学基础。使用WPF前端的非呈现代码应该相对简单,因为它们已经将表示与数据分离了。
(编辑:添加了关于我如何使用SharpMap的更多细节)
发布于 2008-12-02 00:53:20
这可能是一种迂回的方式,但您可能会在SilverlightEarth.com的javascript和XAML中找到一些有用的东西,后者是一个基于Silverlight 1.0的地图贴片客户端。它可以加载VE,谷歌,雅虎(有一个DeepZoom版本,也可以加载OpenStreetMap,月球和火星;但由于它使用MSI,它并没有真正帮助在WPF 3/3.5前面)。
尽管javascript有点乱七八糟,但您可以清楚地看到它正在创建Silverlight 1.0 Xaml (动态大小)画布,将其填充为tiles (Image控件),并处理放大/缩小和pan请求。您需要理解所有的javascript并将其转换为C# - XAML大部分应该不受更改地进入WPF。我有测试了这个Silverlight 1.0与深缩放瓷砖金字塔 (和这里),所以这些概念是适用的。而不仅仅是地图)。
我知道这是因为我自己在Geoquery2008.com (屏幕截图)中构建了地图查看器,这是WPF/c#。不幸的是,Geoquery2008程序集被混淆了,但是您仍然可以通过DASM/Reflector收集一些想法或有用的代码。这仍然是一个测试版,所以我不会声称它是100%完成。我并没有真正考虑将地图代码分解成一个单独的控件,但是如果另一个控件没有出现,我可以研究一下.
顺便说一句,我也是从ScrollViewer开始的,但我正计划放弃它,更紧密地模仿javascript,这样在摇摄/缩放时更容易重用Image (通过获得比ScrollViewer提供的更多的进程控制权)。
虚拟地砖系统和深度缩放文件格式以及相关链接上的这些MSDN页面可能也是一个有用的参考。
最后--我想你从这篇文章开始就看到了DeepZoom/MultiScaleImage很可能会出现在.NET 4.0/Studio 2010中。
发布于 2008-09-17 22:02:18
您创建WPF映射工具的愿望与我的类似,这导致我从Silverlight询问这个问题有关DeepZoom (又名MultiScaleImage)的信息。我想要一个WPF版本。接受的答案提供了一个指向一个非常好的起点的链接(类似于您描述的思想过程)。
https://stackoverflow.com/questions/86570
复制相似问题