使用 WPF 3D 地图和 LightningChart 科学可视化工具回顾 3D 图形背后的理论
WPF 3D Maps
在本文中,我们将重点介绍 WPF 3D 地图背后的理论。 它还将介绍如何使用 Lightning Chart .NET 工具创建此类图表。
如果您看过我们之前的文章,您就会知道 LightningChart 有一个交互式示例演示应用程序。 在这个工具中,我们可以看到几种图表类型,演示了在特定案例中的使用。 该演示应用程序具有数百个交互式图表
特别是,这些示例可以实时执行,修改其视觉属性和值,最后生成基于.NET的项目,您可以与其他项目一起执行、修改和实现。
WPF 3D 地图的示例包括 WPF 世界人口 3D 地图,它将为您提供有关 LightningChart .NET 提供的工具以及如何创建和实施项目的详细说明。
好了,有了前面提到的那些,让我们开始吧。
什么是 WPF?
Windows Presentation Foundation (WPF) 是一个专注于开发具有高级用户界面控制的应用程序的框架,分为两部分:标记和代码隐藏。
标记 Markup
标记允许我们创建具有大量控件的用户界面,从而允许对应用程序中显示的结果进行复杂的控制。 界面开发是通过XAML(可扩展应用程序标记语言)进行的,乍一看可能类似于XML模板,但区别在于用于应用程序之间的数据交换。
标记还允许我们创建数据链接、显示 2D 和 3D 图形、动画、设计风格(外观和感觉)、排版等。数据、图形和动画可以从源文件中获取,也可以通过代码后置生成。
<Window> xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Title="Window with Button" Width="250" Height="100"> <!-- Add button to window --> <Button Name="button">Click Me!</Button> </Window>
某些控件的创建几乎与 HTML 标记的创建相同,而在其他情况下,样式等属性仅限于标记内属性的声明。
代码后置 Code-Behind
代码后置可以概括为包含负责读取、生成和处理用户所需结果的可执行代码的文件。 后台代码的目标之一是将图形界面代码(XAML、HTML、CSS 等)与可执行代码分开。
在某些语言(例如经典的 ASP)中,设计和可执行代码混合在一起,进行较大的更改是非常危险的,因为修改接口可能会损坏逻辑过程。 标记和代码隐藏的分离还允许我们划分用户界面工作和可执行代码的开发。 这样才能更安全、有序、更快地发展。
对于 WPF,我们使用 C# 语言。 C# 是一种面向对象/组件的语言。 由于在函数或方法中使用的变量和参数中使用了类型,这种语言使我们能够开发安全的代码。 LightningChart .NET 生成带有可供执行的 C# 代码的 WPF 项目。
这段代码中使用了Lightning Chart的工具,只要安装了LC .NET框架就可以导入。
2D & 3D 图形
至于 2D 图形,WPF 允许我们生成基本的 2D 图形,其中可以包含渐变、位图、比例和位置编辑等视觉效果。 这些图表由 WPF 库提供。 WPF 允许我们使用外部库(例如 LC .NET),这可以帮助我们生成更复杂的图形,利用标记中的代码隐藏和样式。
3D 图形
WPF 允许基于 2D 对象生成 3D 对象。 同样,它允许我们在 3D 对象上运行动画。 WPF 中的 3D 开发可能非常基础,但重要的是它可以支持这种类型的对象,这些对象将通过标记显示给用户。
如上所述,可以使用外部库,例如 LC .NET,这将有助于生成和处理更复杂的图像/对象。 实际上,WPF 作为一个模板,支持 2D 和 3D 图像的生成,可以将它们呈现给用户。
3D 地图
WPF 3D 地图是二维区域或对象的表示。 该对象是在 X、Y 和 Z 轴上生成的,这三个轴一起可以为以前仅具有高度和宽度的 2D 对象添加体积和深度。 3D 地图使我们能够研究位置及其最常见的属性,例如海拔、深度、地形类型、建筑物等。
如今,WPF 3D 地图的开发越来越普遍,对于科学和军事战略的各个领域都至关重要。 为了进行真实陆地区域的测绘,使用了各种技术,这些技术允许获取有用的高程数据,以基于此测量和其他测量生成形状。
高程数据可以从现有的等高线图、立体航空摄影的摄影测量分析、卫星图像或激光飞行中生成以收集 LiDAR 数据。 随着技术的进步,创建世界(地球)甚至其他行星的 3D 地图已经成为可能。 例如,NASA 制作的 SRTM-90 数字高程数据为地球上的许多地区提供了高质量的高程数据。
Lightning Chart .NET & 3D 工具
Lightning Chart 提供了能够基于具有高程表示的 2D 图像生成 WPF 3D 地图的技术。 它还允许我们组合和创建 3D 图形,这使我们能够在 WPF 3D 地图上显示重要点或重要信息(注释)。
Lighting Chart .NET 允许我们在网格上创建数据点,这些数据点将变形以生成 3D 对象。 主要工具是SurfaceMeshSeries3D。

LightningChart .NET SurfaceMeshSeries3D 示例
SurfaceMeshSeries 3D
SurfaceMeshSeries3D 几乎与 SurfaceGridSeries3D 相似,因为它们大多具有相同的属性。 最大的区别是表面节点可以在3D空间中自由定位。 换句话说,表面不必是矩形的。 SurfaceMeshSeries3D 允许将表面几乎扭曲为任何形状,例如球体或人头。
SurfaceGridSeries3D 允许将数据可视化为 SurfaceGridSeries3D 中的 3D 表面。节点在 X 维度和 Z 维度上等距分布。

LightningChart .NET SurfaceGridSeries3D 示例
PointLineSeries3D
在其他工具中,我们将使用 PointLineSeries3D。 该工具允许您在 3D 空间中呈现点和线。 点用线连接:

LightningChart .NET PointLineSeries3D 示例
点可以显示或隐藏,并且可以根据您想要显示的设计风格修改它们的形状。 创建点非常简单,因为我们只需创建一系列数据点。 作为 WPF 3D 地图对象,每个点必须具有 X、Y、Z 值,才能创建具有深度、高度和宽度的对象。
Bitmaps 与 Fill Styles
LC .NET 允许我们使用 SetHeightDataFromBitmap 方法从位图图像创建 WPF 3D 地图表面。 表面获取位图的大小(如果未使用平滑或重采样)。 对于每个位图图像,添加像素值、红色、绿色和蓝色。 总和越大,高度越大。 黑色和深色的值较低,而亮色和白色的值较高。

LightningChart .NET 位图图像示例
我们还能够向任何 WPF 3D 地图添加填充样式。 这些样式将允许我们为 3D 地图的区域着色,以表示土地类型、温度或其他参数。
可以使用以下选项:
None:使用此选项时,不会应用任何填充。 此选择对于线框网格很有用。
FromSurfacePoints:使用数据属性节点的颜色。
toned:ToneColor 适用
PalettedByY:通过调色板按 Y 值着色,请参阅第 6.10.4 章。
PalettedByValue:通过调色板按 SurfacePoint 的值字段着色,请参阅第 6.10.4 章。
bitmap:位图图像被拉伸以覆盖整个表面。 在 BitmapFill 属性中设置位图图像。 BitmapFill 属性具有用于垂直和水平镜像图像的子属性。

LightningChart .NET 位图填充样式示例
WireFrameMesh
LC .NET 允许我们使用 SetHeightDataFromBitmap 方法从位图图像创建表面。 表面获取位图的大小(如果未使用平滑或重采样)。 对于每个位图图像,添加像素值、红色、绿色和蓝色。 总和越大,高度越大。 黑色和深色的值较低,而亮色和白色的值较高。

LightningChart .NET WireFrameMesh 示例
LC .Net 允许我们创建网格并提供填充样式、颜色、纹理和线条样式。 有了这个,我们可以创建一个带有附加到真实模型的颜色的地图,或者带有骨骼结构的地图。
在线框的样式选项中,我们可以使用以下内容:
None:无线框
wireframe:纯色线框。 使用 WireframeLineType.Color 设置颜色。
WireframePalettedByY:线框着色遵循 SurfacePoint 的 Y ContourPalette 字段。
WireframePalettedByY:线框颜色遵循 SurfacePoint Value 字段。
WireframeSourcePointColored:线框的颜色遵循表面节点的颜色。
points:在节点位置绘制实色点。
DotsPalettedByY:在节点位置绘制点,并根据 SurfacePoints 的 Y 字段使用 ContourPalette 着色
DotsPalettedByValue:在节点位置绘制点,并根据 SurfacePoints Value 字段使用 ContourPalette 着色
DotsSourcePointColored:在节点位置绘制点,颜色跟随表面节点的颜色。可以使用 WireframeLineStyle 编辑线框线条样式(颜色、宽度、图案)。

WireframeType = SourcePointColored 和 WireframeType = Dots 的示例

WireframeType = DotsPalettedByY 和 WireframeType = DotsSourcePointColored 的示例
Contour Lines
等高线允许快速解释高度数据,而无需用调色板填充图表表面。 这些线可以与填充和有线结构相结合。 当建立 ContourLineType 属性时,可以使用不同的样式呈现等高线:

等高线的 LightningChart .NET 示例

等高线的 LightningChart .NET 示例
选项:
None:不显示等高线
FastColorZones:线条被绘制为细垂直区域。 允许强大的渲染,非常适合持续更新或动画的表面。
FastPalettedZones:与 FastColorZones 类似,但线条着色遵循 ContourPalette 选项。
ColorLineByY 和 ColorLineByValue:轮廓线用实际线绘制。 渲染时间比 FastColorZones 长。 线宽可以使用 ContourLineStyle.Width 属性进行调整。
PalettedLineByY 和 PalettedLineByValue:与 ColorLineByY 和 ColorLineByValue 类似,但线条着色遵循 ContourPalette 选项。
总结
在本文中,我们简要介绍了 3D 地图是什么及其使用 WPF 的实现。 WPF 是一个 .NET 框架,专注于创建具有控件和用户界面设计的应用程序。 WPF 的主要目标是将设计层和可执行代码层分开。 通过这样做,您可以整齐地编程并进行更改,而不会严重影响应用程序的代码或设计。
WPF 使用 XAML 创建框架和用户控件。这些对象可以具有修改应用程序外观的可视属性。 该框架的另一个主要优点是能够渲染 2D 图像和 3D 对象。 这对于我们3D地图的实现和开发非常有用。 要创建 3D 地图,需要使用高级工具。
LC .NET 为我们提供了创建这些 3D 对象的工具,支持数千个数据点、连接这些数据点以创建网格、对这些网格进行填充和着色,或者简单地基于位图图像生成 3D 对象。
就位图而言,Lightning Chart .NET 允许我们根据位图中每个像素的强度创建具有高程的对象。 像素越暗,高度越低。 颜色强度越大,高度越高。
该工具对于表示山区地形、地形甚至大陆(如全球地图的情况)非常有用。 集成LC .NET只需从官网下载框架即可。 安装后,它将集成到.NET中,并且它的库可以导入到任何项目中。
该框架中包含交互式示例工具,它允许您生成 WPF 项目,您可以从中提取代码或在方便时对其进行修改。 在本文中,我们重点介绍了这些工具。 如果您想查看实现示例,我建议您访问我们的 .NET 和 3D 渲染文章。
渝公网安备50010702505508