一、DotSpatial是什么

DotSpatial是一个基于.Net Framework 4.0 版本编写的一个地理信息系统(GIS)库,以UserControl的形式提供地图控件。它可帮助开发人员把空间数据、空间分析的功能加入到他们的应用程序中,还可以帮助开发人员把地理信息系统功能扩展到社区。目前Dans Ames是DotSpatial的项目经理。

DotSpatial可以帮助您:

在WinForm或者ASP.NET中打开地图
打开用Shapefile格式存储的矢量图以及栅格、位图等形式表示的地图
渲染符号,不重叠的标签
简单的坐标系统转换,包括大地坐标系与投影坐标系之间的转换,内置支持北京54、西安80、国家CGCS2000等等投影坐标系
操作和显示属性数据
科学分析
读取GPS数据
官方提供的源代码目前还不能:

地图绘图系统绘制除点、线、多边形以外的几何图形,包括椭圆形、扇形、弧形
以谷歌的900913坐标系为代表的WebMecator系列投影坐标系与其它坐标系之间的互相转换
多次空间测量,圆形、扇形等多种图形的面积测量
DotSpatial绘图消息外部单独刷新某一个图层,不支持异步加载地图数据后展示

二、准备工作

1、开发工具
开发WinForm程序当然得VisualStudio
2、地图控件库
下载DotSpatial库进行引用或者源代码进行编译。DotSpatial的下载地址是:http://dotspatial.codeplex.com/,现在迁移到了GItHub上https://github.com/DotSpatial/DotSpatial。

不过Winform程序嘛,直接引用-右键-Nuget包管理,下载对应模块就好了。不过nuget包,同样版本的,有时候在工具栏里不显示(手动黑人问号?),原因未知。

3、数据
进行地图控件开发当然得要必须的GIS数据。找了CSDN上别人提供的一个数据集。下载链接如下:http://download.csdn.net/detail/caoshiying/9602626。

Demo

贴一个我的Demo,试验的时候可能有点小bug没有做修改。。。故仅供参考

功能包括
* 1、添加图层、图层清空
* 2、平移、放大、缩小、全图
* 3、坐标定位
* 4、以鼠标点为中心点重绘
* 5、shp转bmp
* 6、屏幕坐标转地理坐标

using DotSpatial.Controls;
using DotSpatial.Data;
using DotSpatial.Projections;
using DotSpatial.Symbology;
using DotSpatial.Topology;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Windows.Forms;namespace DotSpatialTest
{public partial class Form1 : Form{private Map mapCtrl = null;private Label coordLabelCtrl = null;public Form1(){InitMapControl();InitCoordinateLabel();InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}protected override void OnLoad(EventArgs e){base.OnLoad(e);Controls.Add(mapCtrl);coordLabelCtrl.Top = mapCtrl.Height - coordLabelCtrl.Height;}private void Form1_Resize(object sender, EventArgs e){mapCtrl.Size = this.Size;if (mapCtrl.Layers.SelectedLayer != null){}coordLabelCtrl.Top = mapCtrl.Height - coordLabelCtrl.Height;}private void InitMapControl(){mapCtrl = new Map(){Name = "mapCtrl",Dock = DockStyle.Fill};mapCtrl.GeoMouseMove += mapCtrl_GeoMouseMove;mapCtrl.MouseClick += mapCtrl_GeoMouseClick;}private void InitCoordinateLabel(){coordLabelCtrl = new Label(){Name = "coordLabelCtrl",Text = "X:00.0000,Y:00.0000",Width = 200,BackColor = Color.Transparent};mapCtrl.Controls.Add(coordLabelCtrl);}void mapCtrl_GeoMouseMove(object sender, GeoMouseArgs e){string locStr = "X:" + e.GeographicLocation.X.ToString("F6");locStr += "Y:" + e.GeographicLocation.Y.ToString("F6");coordLabelCtrl.Text = locStr;}void mapCtrl_GeoMouseClick(object sender,MouseEventArgs e){if (mapCtrl.FunctionMode == FunctionMode.None){GeoMouseArgs args = new GeoMouseArgs(e, mapCtrl); //屏幕坐标到地图坐标转换var _startPoint = e.Location;//屏幕起始点坐标var _geoStartPoint = args.GeographicLocation;//地图起始点坐标var curViewExtent = mapCtrl.ViewExtents;var curCenter = curViewExtent.Center;mapCtrl.ViewExtents.SetCenter(_geoStartPoint);mapCtrl.Refresh();}}private void btnPan_Click(object sender, EventArgs e){mapCtrl.FunctionMode = FunctionMode.Pan;}private void btnZoomIn_Click(object sender, EventArgs e){mapCtrl.FunctionMode = FunctionMode.ZoomIn;}private void btnZoomOut_Click(object sender, EventArgs e){//窗口缩放后,可能需要先zoom in,然后才能zoom outmapCtrl.FunctionMode = FunctionMode.ZoomOut;}private void btnMapNone_Click(object sender, EventArgs e){var aa = mapCtrl.FunctionMode;mapCtrl.FunctionMode = FunctionMode.None;}private void ZoomToCoordinates(){var xx = mapCtrl.ViewExtents;}private void btnZoom2Coordinates_Click(object sender, EventArgs e){ZoomToCoordinatesDialog xxx = new ZoomToCoordinatesDialog(mapCtrl);xxx.ShowDialog();}private void btnAddLayer_Click(object sender, EventArgs e){var shp = Shapefile.OpenFile("Shapefiles\\tttbou2_4l.shp");shp.Projection = KnownCoordinateSystems.Geographic.World.WGS1984;var layer = mapCtrl.Layers.Add(shp) as MapLineLayer;layer.Symbolizer = new DotSpatial.Symbology.LineSymbolizer(Color.FromArgb(0x33, 0x33, 0x33), 1);}private void btnClear_Click(object sender, EventArgs e){mapCtrl.ClearLayers();}private void btnZoom2MaxExtent_Click(object sender, EventArgs e){mapCtrl.ZoomToMaxExtent();mapCtrl.Refresh();}private void btnCenterAt_Click(object sender, EventArgs e){}private void btnBmp_Click(object sender, EventArgs e){var test=mapCtrl.SnapShot();test.Save("Shapefiles\\test0.bmp");}private void btnTest_Click(object sender, EventArgs e){}}
}

DotSpatial入门相关推荐

  1. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  2. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  3. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  4. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  5. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

  6. SpringBoot (一) :入门篇 Hello World

    什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  7. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

  8. 5 分钟入门 Google 最强NLP模型:BERT

    BERT (Bidirectional Encoder Representations from Transformers) 10月11日,Google AI Language 发布了论文 BERT: ...

  9. 命名实体识别入门教程(必看)

    关于开发自己的命名实体识别先期思路: 虽然网上有很多相关代码,但实际如何入门材料较少,故整理下: CRF:先期可以用人民日报语料库去做,步骤如下: https://blog.csdn.net/hude ...

  10. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

最新文章

  1. java 雪花特效_java实现图片飘雪花的特效
  2. python第2位的值_Python组通过匹配元组列表中的第二个元组值
  3. 云市场合作伙伴-袋鼠云获A轮融资,成立一年半获三轮投资超亿元
  4. Kubernetes网络模型概念
  5. 2021大同高考成绩查询,大同高考分数查询(查询方法+入口)
  6. 2012.4.17总结(一)
  7. 30、vue 过滤器(filters)
  8. flex知識:container of spark
  9. BulkInsert导入CSV文件
  10. UVa 12261 High Score (贪心“向左走,向右走”)
  11. PN结的形成及其单向导电性
  12. c# word 在当前光标位置插入内容
  13. 词典GoldenDict
  14. 新手小白安装linux系统
  15. WARN Error while fetching metadata with correlation id 13 : {test=LEADER_NOT_AVAILABLE}
  16. php订阅号发送消息,关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题,_PHP教程...
  17. c语言程序设计 学籍,c语言学籍信息管理系统设计
  18. 正月十五闹元宵,平安吉祥乐团圆
  19. 如何理解论文中常见的Top-1错误率和Top-5错误率?
  20. java方法案例:判断整数是奇数还是偶数

热门文章

  1. T1-商贸宝服务无法启动解决办法
  2. 小写金额转换成大写金额
  3. 怎样高效利用PPT模板网站找到适合自己的PPT模板
  4. Excel-数据透视表
  5. linux命令键盘快捷键,如何将Linux命令设置成键盘快捷键
  6. pdf文档统计字数的问题
  7. Android基于Ymodem协议升级嵌入式MCU主控
  8. html表格行的悬停事件,jQuery实现HTML表格隔行变色及鼠标悬停变色效果
  9. 数学作图工具_非常实用的九个程序员工具网站
  10. 清华计算机系人工智能学院,CoAI - 清华大学交互式人工智能课题组