开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 8645|回复: 0

LightningChart数据可视化工具使用篇38-矢量地图

[复制链接]

0

精华

10

贡献

2071

赞扬

帖子
141
软币
3968
在线时间
255 小时
注册时间
2021-1-21
发表于 2021-6-11 11:38:15 | 显示全部楼层 |阅读模式
本帖最后由 .net_wang 于 2021-6-11 14:50 编辑

矢量地图


演示示例: World map; Map route; Map with environmental data; Wind data
地理矢量数据以.md扩展名存储于LightningChart 地图文件中。LightningChart以地图文件集传送。
X轴表示经度,Y轴表示纬度。显示地图坐标轴可参阅LightningChart数据可视化工具使用篇16-Y轴-值类型章节所示。地图坐标为十进制度数,纬度起点于赤道,经度起点于英国格林威治。

微信截图_20210611105618.png

图:地图的属性与子属性。该属性树用于矢量地图,除了TileLayers集和TileCacheFolder是用于瓦片地图。

选择有效的地图

为Path属性设置包含地图文件的目录名称。对于使用LightningChart传送的地图,用Type属性可以选择有效的地图。要使用自己的地图文件,可设置FileName属性。

如果不需要地图,可设置Type 为 Off。

微信截图_20210611105753.png

图:地图类型选项。显示以LightningChart传送的地图。通过类型名称后缀可以分辨地图的大致精细级别。



一般而言,LightningChart地图均制作的非常精细。对于实时监控解决方案来说,选择一份提供准确细节和性能级别的地图非常重要。


Aspect ratio(屏幕高宽比)

ViewXY.ZoomPanOptions.AspectRatioOptions.AspectRatio 控制X/Y比(或经/纬比)。

将其设置为Off,以分别启用X轴和Y轴值域设置,可拉伸地图。在不同位置查看地图时,AutoLatitude会动态改变高宽比。高宽比由视图的中心点决定。设置高宽比为Manual,用ManualAspectRatioWH属性设置首选比。关于如何计算高宽比的详细说明可参阅LightningChart数据可视化工具使用篇34-缩放与平移-Aspect ratio (屏幕高宽比)章节。



图层及其外观设置

每个地图文件可包含多个图层。例如,陆地区域、湖泊、河流、道路和城市图层。从Layers数组属性可访问图层及其数据。

微信截图_20210611110212.png

图:在属性编辑器中打开地图图层详情

每个图层都具有一个特定的类型。图层外观选项可以用相应的选项属性来变更。用 LandOptions 可修改陆地区域的外观,用 LakeOptions 修改湖泊,用RiverOptions 修改河流,用RoadOptions修改道路,用CityOptions修改城市,用OtherOptions修改未指明的图层类型。
微信截图_20210611110323.png

图:默认的 LandOptions,及对应的欧洲视图



微信截图_20210611110418.png

图:修改后的 LandOptions.

为每一图层项设置单独的填充和边框样式
每个地图元素填充或边框外观可以单独设置。更改BorderDrawStyle和RegionDrawStyle属性为Individual 。然后访问Items 集,再导航到首选项,并编辑BorderLineStyle和Fill属性。Items集可以通过Name属性以编程方式进行导航,此例中为“Germany”。
微信截图_20210611110551.png

图:设置图层边框线和区域填充样式为Invidual ,并在Items集中编辑区域



微信截图_20210611110644.png

图:采用单独填充和边界框绘制德国区域.



鼠标交互
开启AllowUserInteraction,以进行与地图区域和对象的各种互操作。用鼠标可以指向各种区域(陆地、湖泊)和矢量图层(河流、道路)。若设置Highlight为Simple,一当鼠标置于一个对象上方,用SimpleHighlightColor可将该对象变为突出显示;若设置 Highlight为 Blink,对象将会以一亮一暗颜色地闪烁。若设置 Highlight为 None,对象不会突出显示,但对象仍可以被点击,例如用来调用Maps.ButtonDownOnMapItem事件。




地图对象可能包含相关的数据,例如人口或其他统计数据。可用 UserInteractiveDeviceOverOnMapItem/UserInteractiveDeviceOverOffMapItem /ButtonDownOnMapItem事件处理程序来访问数据。一个地图项的数据可以使用GetInfo方法来检索,从而获得键和值的字典。


下面是如何在列表框中显示所有数据的一个示例。项目名称则显示在另一个文本框中。


[C#] 纯文本查看 复制代码
[/size]
[size=4]    private void ButtonDownOnMap(ButtonDownOnMapItemEventArgs args)
{
   MapItem mapItem = args.MapItem;[/size]
[size=4]
   textBoxCountryName.Text =
        m_chart.ViewXY.Maps.Layers[args.Layer].Name
        + ": " + mapItem.Name;
   listBoxItemValues.Items.Clear();
   if (mapItem.GetInfo() != null)
   {
        Dictionary<string, string> dict = mapItem.GetInfo();
        Dictionary<string, string>.KeyCollection keys = dict.Keys;
        foreach (String key in keys)
        {
            String strValue;
            if (dict.TryGetValue(key, out strValue))
            {
                listBoxItemValues.Items.Add(key + ": " + strValue);
            }
        }
    }
}



背景图片
在Maps.Backgrounds属性中添加一个MapBackground对象,可以将位图图像显示为地图的背景。卫星图像或其他栅格图像可从几个GIS数据供应商处获得。图片可设置为Image 属性,其经纬度范围可用LatitudeMin、LatitudeMax、 LongitudeMin 和 LongitudeMax 属性来设置。 图像不会显示在设置范围之外。

要透过地图层显示背景,需要为每一个图层调整填充设置。用透明颜色或低透明度的颜色。

微信截图_20210611111245.png

图:世界地图。 LandOptions.FillVisible 设置为 false, 背景图片设置: 经度范围 -90…90 且 纬度范围 -180…180。地图中显示了区域边界和城市情况。


其他系列与地图结合

地理地图可以与任意的ViewXY系列类型结合。这些地图是在背景中绘制的,上面是各类系列。
微信截图_20210611111414.png

图:欧洲地图,用几个FreeformPointLine 系列作为路线。 对其添加旗子标志作为鼠标交互的路径点。



微信截图_20210611111511.png

图:世界地图,用 IntensityGrid 系列表示海拔。



微信截图_20210611111625.png

图:用 IntensityGrid 系列覆盖欧洲地图实现天气雷达数据可视化。



从ESRI(美国环境系统研究所公司)图形文件数据导入地图

导入功能可根据.shp文件来制作一幅LightningChart地图文件(.md)。ESRI shapefile (*.shp)是一种应用广泛的地图文件,支持矢量与多边图形数据。

用地图导向程序可将shapefile数据转换为LightningChart (LC)地图格式。LC格式支持分层,因此,多个shapefile文件可以合并到一个文件中。地图文件的结构与对象经过预处理可在运行时发挥最大的性能。

提示:LightningChart® .NET的演示应用程序有一个地图导入的示例。从其中运行导入向导程序,可通过导入来创建定制化的LC地图文件。

最少三步即可完成转换:

     1. 根据 Shapefile Selection Dialog中等件来选择文件并设置图层。
     2. 确定文件文本编码。
     3. 选择生成的地图文件中包含的项。

注意,可为每个源shp文件重复第2和第3步。Shapefile 文件无法分辨其所用的编码,所以必须要用户来选择。

完成这几步后,转换开始。如果从一个定制的应用程序中导入地图,因为转换过程可能需要花费很长的时间,所以这里鼓励开发人员安装一个事件处理程序,以便用户可以获知转换过程。

此外,如果用户选择了基础层,由于预筛选数据是基于该层,那么各步骤之间可能会有相当大的延迟。




导入shp 数据的编程界面

转换是在采用以下方法从Maps.MapConverter类初始化的线程上运行:



[C#] 纯文本查看 复制代码
public bool SelectFilesAndConvert()



为监控转换过程,有一个事件处理程序委托类可用:
[C#] 纯文本查看 复制代码
public delegate void ConversionStateChangedHandler(ConversionProgress progress, int i);



对其初始化:
[C#] 纯文本查看 复制代码
MapConverter mapConverter = new MapConverter();
mapConverter.ConversionStateChanged += new MapConverter.ConversionStateChangedHandler(mapConverter_ConversionStateChanged);



对话框
在转换过程中通常有三个对话框。另有一个不同的对话框用于选择筛选程序。



Shapefile Selection Dialog (Shapefile选择对话框)
调用SelectFilesAndConvert( )函数后,文件选择对话框打开。在此对话框中,用户可选择源文件并设置分层。用户也可以通过在对话框中选择适当的文件,来保存地图配置。
微信截图_20210611112134.png

图:源图形文件选择对话框


File list (文件列表)
包含按绘制顺序排列的文件列表。底部的文件数据最后绘制。文件的顺序可以从列表左侧的向上/向下(up/down)按钮进行更改。选择文件,然后点击向上/向下(up/down)来移动文件。


Layer name (图层名称)
图层的名称。例如“Countries”(“国家”)


Layer type 图册类型
图层类型 (规定用那种选项来渲染图层)
• City(城市): 图层条目具有shapefile 文件类型 POINT性质
• Lake(湖泊): 图层条目具有shapefile 文件类型POLYGON性质
• Land(陆地): 图层条目具有shapefile 文件类型POLYGON性质
• River(河流): 图层条目具有shapefile 文件类型POLYLINE性质
• Road(道路): 图层条目具有shapefile 文件类型POLYLINE性质
• Other(其他): 图层条目具有shapefile 文件类型POLYGON 或 POLYLINE性质


Base layer (基础图层)
当用户想要一个地图,其中只包含单个/某些国家,且只有全球地图可用时,用于帅选上层图层项目选择。例如,如果图层包含多个国家,则在生成的地图中只会包含所选定的几个国家/一个国家的条目。有一个小的偏移量应用于POINT类型,所以如果点足够靠近边框它就会被包含进去,即使它没有和基础图层重叠。如果所选的shapefile文件中的全部数据都包含于生成的文件中,不要选择基础图层,因为它会大大降低条目选择的速度,因为如果所有的条目都与基础图层重叠,就会被勾选,这是一个非常耗时的过程。





Description (说明)
此为在地图属性中显示的自由文本。


Configuration file name (配置文件名称)
XML 格式的配置文件名称。用于导入/替换一个图层。注意! 当创建地图文件时使用单个文件导入。替换方法只能采用一个shp输入文件。


Save config (保存配置)
如果希望将地图配置保存为xml文件供以后使用,要勾选此选项。选择配置文件将自动设置勾选该选项。


Add button (添加按钮)
点击以选择要添加到列表中的shapefile文件。


Remove button (移除按钮)
从列表中移除所选文件。


Edit name button (编辑名称按钮)
点击以打开“图层名称编辑器” (“Layer name editor”)。设置图层名称。


OK button (确定按钮)
点击进入下一阶段(条目选择)。


Select Record Encoding and Invalid Name Fields (选择记录编码与无效名称字段)

此对话框用于选择文件文本编码和具有无效或通用名称的字段。状文件编码可能不同,而且文件中没有关于编码的信息,所以用户必须选择有效的编码。对于多项条目,条目名称可能类似于“UNK”。在此对话框中,用户可以选择清除哪个项的名称。注意,如果在下一个阶段中选择了这些条目,那么它们仍然包含在生成的文件中。
微信截图_20210611112501.png

图:‘Record encoding’ 和 ‘Invalid name’ 字段选择对话框

File name (文件名称)
编码适用的图形文件名称


Layer (图层)
图层名称。


Name field (名称字段)
图形文件中的条目名称字段。选择一个不同的字段后,列表会相应地进行更新。


Name encoding (名称编码)
条目名称编码(如果名称好像不正确,可尝试不同的值)。选择不同的编码后,列表会相应地进行更新。


Record name list / select records with invalid name (记录名称列表/选择名称无效的记录)
在“Name”字段中所选择的字段的条目列表。


OK (确定)
确认编码选择(以及可能的无效名称)。

Layer data selection dialog (图层数据选择对话框)
此对话框用于从图形文件中选择生产的地图文件中所包含的条目。图层名称连接到标题。对话框是自适应的,所以对于某些层来说有一些字段可以选择。例如,River/Road类型的图层,会有一个线条宽度选择,能够设置为线条宽度字段(如果适用)。注意,数据可能不包含对话框中要求的所有字段。Name字段是所有条目的必填项。
微信截图_20210611112734.png

图:Layer data selection dialog(图层数据选择对话框)

对话框中可用的用户界面项:

File name (文件名称)
文件名称。


Layer name(图层名称)

图层名称。


Name field (名称字段)
用于条目名称的字段。可从编码选择对话框中自动设置,但也能在这里调整。


Population field (人口字段)
用于人口数据的字段。


Country field (国家字段)
国家名称字段。


Line stroke width field 线条笔触宽度字段
线条宽度,引导线条渲染。


Select stored items 选择存储的条目
单独选择条目,选择全部,或用Filter对话框来选择条目子集。


Toggle all (全选)
从文件中选择所有字段


Filter/Select... (筛选/选择…)
选择具有所选值的字段的字段。在上图中,只有SOVEREIGNT字段设置为“Canada”或“United States”的条目在地图中被选中。


Inverted (反选)
方向筛选选择(使用筛选程序选择的字段不包括在生产的地图文件中)。


Select stored fields per item选择每个条目存储的字段

单击每个条目应该包含的字段。该类字段是Dictionary类的键值,包含每个条目的字段。



Item filter (条目筛选)
本对话框是从图层数据选择对话框中打开,用于为生成的地图筛选条目。
微信截图_20210611113117.png

图:条目筛选对话框


Field (字段)
选择筛选所依据的字段。


Values (值)
选择包含在生成的条目中的值。


以上选择意味着,字段名称SOVEREIGNT 且含有值“Canada”的条目包含于生成的地图中。



导入与替换地图图层

用户可以导入新的图层到地图中,并替换现有的图层。有四个方法可以从Maps界面中导入并替换一个图层到地图中。这在软件的应用程序运行时,检索频繁更新的shp数据时非常有用。

ImportNewLayer 方法可将一个新的地图图层插入到给定的层索引中,ImportReplaceLayer 方法可替换在给定图层索引处的地图图层。

[C#] 纯文本查看 复制代码
public MapConverter.ConversionResult ImportNewLayer(String shpFilename, int targetLayerIndex),


此处 shpFilename 是源shp文件名的名称,targetLayerIndex 是新图层的索引。此方法使用上面所述对话框来设置地图配置。


[C#] 纯文本查看 复制代码
public MapConverter.ConversionResult ImportNewLayer(String shpFilename, int targetLayerIndex, String configFile),



此处 shpFilename 是源shp文件名的名称,targetLayerIndex 是新图层的索引, configFile 是地图配置文件名称。此方法使用上面所述的对话框创建的配置文件。


[C#] 纯文本查看 复制代码
public MapConverter.ConversionResult ImportReplaceLayer(String shpFilename, int targetLayerIndex),


此处 shpFilename 是源shp文件名的名称,targetLayerIndex 是新图层的索引。此方法使用上面所述对话框来设置地图配置。


[C#] 纯文本查看 复制代码
public MapConverter.ConversionResult ImportReplaceLayer(String shpFilename, int targetLayerIndex, String configFile),


此处 shpFilename 是源shp文件名的名称,targetLayerIndex 是新图层的索引, configFile 是地图配置文件名称。此方法使用上面所述的对话框创建的配置文件。


配置文件是一个纯xml文件,可以用文本编辑器编辑,但不建议编辑。



关于矢量地图图库简介章节就分享到这里了,如果在实际应用中遇到技术问题或需要帮助,可以扫描下方微信二维码回复学习可免费领取一套全功能板LightningChart数据可视化控件
b5354b9436db344e96ae6ae2fa1fedf.jpg

后续我会不断更新LightingChart更详细的使用方法,写文不易,还望多多回复关注支持!谢谢!

最新版V10 LightningChart下载地址:猛击下载













回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-27 11:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表