基本 DotSpatial 桌面地图
如何使用 DotSpatial 控件。
引言
DotSpatial 是一个开源项目,其中包含可用于操作和显示地理信息的控件。本文提供了快速概述和功能代码,帮助您开始使用 DotSpatial。可以执行的一些基本操作包括加载 Shapefile、平移和缩放。
下载 DotSpatial
本文基于在 http://dotspatial.codeplex.com 的下载选项卡中的 DotSpatial Release Candidate 2 (1.0.845)。
注意: 请注意,您的浏览器可能会在下载的文件中添加标识符,导致 DLL 文件被“阻止”。您可以点击以下链接了解 如何“解除阻止”文件。在解压缩 zip 文件之前,右键单击该文件,选择“属性”,转到“常规”选项卡,然后点击“解除阻止”按钮。
解压下载的存档后,您可以运行 DemoMap.exe 来大致了解 DotSpatial 的功能。
创建项目
启动 Visual Studio 2010 并创建一个新项目。使用 Windows Forms Application 模板,会将一个窗体添加到我们的项目中。稍后,我们将在该窗体上放置可视化元素。
更改目标框架
DotSpatial 要求我们的项目将 .NET Framework 4 作为目标,而不是默认的 .NET Framework 4 Client Profile。右键单击项目(或点击“项目”、“属性...”),然后选择“应用程序”选项卡,您可以在其中切换到 .NET Framework 4 目标框架。
如果使用 VB.NET,您需要转到“编译”选项卡,然后点击“高级编译选项...”来切换目标框架。
添加工具箱项
工具箱提供了一种将控件拖放到窗体设计表面的方法。通常,当一个控件被放到窗体上时,Visual Studio 会生成必要的代码来实例化该控件,并向项目添加所需的任何引用。您也可以通过编写适当的代码并进行任何必要的引用,而不使用设计器来实例化控件。
确保“解决方案资源管理器”可见(“视图”、“解决方案资源管理器”)。双击 Form1
将其显示在“设计”视图中。使“工具箱”可见(“视图”、“工具箱”)。可选地,通过在工具箱中右键单击并选择上下文菜单中的“添加选项卡”来创建一个新选项卡以包含 DotSpatial 控件。
右键单击您刚刚创建的选项卡或“常规”选项卡,然后点击“选择项...”
点击“浏览...”并导航到下载 DotSpatial 文件的位置。选择 DotSpatial.Controls
并点击“打开”,然后点击“确定”。
您应该会在工具箱中看到许多 DotSpatial 控件。
布局用户界面
将四个 Button 控件拖放到 Form1
的设计表面上。您可以在工具箱的“常用控件”选项卡中找到按钮。同时,将一个 Map 控件拖放到窗体上。您可能需要调整窗体大小,以便为放置控件留出更多空间。
添加 DotSpatial 引用
您会注意到,当您将 Map
控件拖放到 Form1
上时,Visual Studio 会添加对 DotSpatial.Controls
的引用。但是,如果此时我们尝试构建项目,会收到需要添加其他引用的通知。
通过点击“项目”、“添加引用...”来添加对关键 DotSpatial
库的引用。浏览到下载文件的位置。选择 DotSpatial.Data
和 DotSpatial.Symbology
。您可以按住 CTRL 键同时单击文件来选择多个文件。
设置控件属性
我们回到窗体设计器来设置我们添加的各种控件的属性。同样,这也可以在代码中完成,但在“属性”窗口中发现属性可能更容易。选择 button1
并查看“属性”窗口(“视图”、“属性”窗口)。请注意,Text 属性是“button1
”。将其更改为“Open File”。更改按钮的名称以反映其功能也是明智的。找到 (Name) 并将其更改为“uxOpenFile
”。在按钮名称前加上 ux 仅仅是一种约定。您无法在控件名称中包含空格。
同样,更新按钮 2-4 以表示 Zoom In、Zoom Wide 和 Pan。记得重命名它们。将地图从“map1
”重命名为“uxMap
”。
如果此时运行项目,您会发现可以将文件拖放到地图控件上,但我们还没有连接按钮,按下它们也不会有任何反应。Visual Studio 中的设计器有一个快捷方式,可以创建一个按钮事件处理程序并跳转到该处理程序,以便我们添加自己的代码。双击“Open File”按钮。您将被带到相应的事件处理程序。输入以下内容:
uxMap.AddLayer();
AddLayer
方法将向用户显示一个对话框,以便他们选择要显示在地图控件上的相关文件。
通过双击 Form1
返回窗体设计器,并为 Zoom In 创建一个事件处理程序。将以下代码输入事件处理程序:
uxMap.ZoomIn();
现在,当用户点击 Zoom In 按钮时,地图视图会向前跳跃。您同样会添加以下代码来处理用户点击 Zoom Wide 按钮的情况。
uxMap.ZoomToMaxExtent();
对于最后一个按钮,不必返回设计器,只需将此代码粘贴到 Zoom Wide 事件处理程序下方即可。您需要确保将其粘贴在事件处理程序之后,并在两个尾部花括号 } 之前。
private void uxPan_Click(object sender, EventArgs e)
{
uxMap.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;
}
现在我们需要将此方法附加到 uxPan
Button。双击 Form1
返回窗体设计器,并选择 uxPan
Button。在“属性”窗口中,点击闪电图标以查看事件。在 Click Action 中输入 uxPan_Click
。
当用户点击 Pan 按钮时,光标将变为 Pan (手形) 符号。在此模式下,地图可以从右到左拖动等。虽然我们之前的事件处理程序执行方法,但此事件处理程序更改地图的 FunctionMode
。地图将保持 Pan 模式,直到用户关闭应用程序。或者,您可以添加按钮来将地图切换到其他模式。
构建并运行您的项目,并打开一个数据文件(请参阅资源部分了解示例)。
关注点
您应该可以轻松地扩展此项目,以包含用于切换 Info、Measure 和 Select 工具的按钮。
历史
- 2011-11-11 初始发布
- 2011-11-22 更改文章格式
资源
- dotspatial.codeplex.com DotSpatial 的附加信息和文档
- mapwindow6.codeplex.com MapWindow 6 – 一个基于 DotSpatial 的可扩展应用程序
- naturalearthdata.com 示例数据文件
- www.diva-gis.org/gdata 示例数据文件