SharpMap源代码解析
1. 简介
SharpMap是基于.net2.0的GIS系统。支持多种.NET开发语言(C# C++ 等)。使用属性数据作为注记。符合OpenGIS的简单要素规范(OpenGIS Simple Features Specification),支持点、线、面、多点、多线、多面、几何对象集合等要素类型)。可使用代理(delegates)编制复杂主题地图。能实时投影。支持使用Http Handler生成地图。支持AJAX地图控件。支持WMS1.3.0服务。支持数据格式扩展。支持图层扩展。
2. 下载SharpMap
下载地址:http://sharpmap.codeplex.com/SourceControl/latest
下载的压缩文件中,有三个目录,一个是Branches,为SharpMap的一些分支版本;一个叫BuildProcessTemplates,是一些预定义的项目编译模板;第三个目录Trunk,是包含项目代码的主目录,也是主要讲述的内容。
Trunk目录下有三个Visual Studio项目文件,即SharpMap.sln、SharpMap.VS2008.sln、SharpMap.VS2010.sln,分别对应VS2005、VS2008、VS2010三个版本。
Trunk目录还包含如下子目录:
(1)ExternalReferences:它是项目用到的第三方库文件。
(2)SharpMap。它是核心项目,包括Map、Layer、Data、Geometries、Rendering、Style等主要内容。
(3)SharpMap.UI。它包括地图控件。
(4)SharpMap.Extensions。它包括一些数据、图层扩展对象。
(5)UnitTests。它用于管理单元测试。
(6)SharpMap.SqlServerSpatialObjects。空间数据库,底层使用MS SQLServer的空间对象机制。
(7)PostgisDemoDb、MsSqlSpatialDemoDB。它们是使用PostGIS、MsSqlSpatial空间数据库的例子项目。
(8)DemoWebSite、DemoWinForm、WinFormSamples。它们是三个综合实例,第一个为Web应用,其他两个为桌面系统。
(9)ExampleCodeSnippets。它是SharpMap的代码段项目。
二、地图Map类
Map是装载地图图层Layer的容器。用户可以通过创建Map对象的实例来得到地图,并通过GetMap方法来得到渲染(render)后的地图图形。
实例:
构造一个地图对象,代码
SharpMap.Map myMap = new SharpMap.Map();
myMap.MinimumZoom = 100; //最小缩放
myMap.BackgroundColor = Color.White;
SharpMap.Layers.VectorLayer myLayer = new SharpMap.Layers.VectorLayer("My layer");
string shpLayerFullPath = @"C:\data\Lotlines.shp";
myLayer.DataSource = new ShapeFile(shpLayerFullPath);
myLayer.FillStyle = new SolidBrush(Color.FromArgb(240, 240, 240));
myLayer.OutlineStyle = new Pen(Color.Blue, 1);
myLayer.Style.Line.Width = 2;
myLayer.Style.Line.Color = Color.Black;
myLayer.Style.Line.EndCap = System.Drawing.Drawing2D.LineCap.Round;
myLayer.Style.Line.StartCap = layRailroad.LineStyle.EndCap;
myLayer.Style.Line.DashPattern = new float[]{4.0f, 2.0f};
myLayer.Style.EnableOutline = true;
myLayer.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
myLayer.MaxVisible = 40000;
myMap.Layers.Add(myLayer);
myMap.Center = new SharpMap.Geometries.Point(725000, 6180000);
myMap.Zoom = 1200;
myMap.Size = new System.Drawing.Size(300, 200);
System.Drawing.Image imgMap = myMap.GetMap();
Map类的数据成员、属性、方法和事件
三、地图控件MapImage类
四、图层类
五、绘制渲染类Rendering
六、样式类Style
七、数据类Data
八、几何对象类Geometry
九、Windows应用程序开发——WinFormSamples
十、Windows应用程序开发——DemoWinForm
十一、数据源扩展与图层对象扩展
>>与GPSMap对比
开发语言:C# - Java
开发平台:Windows - Android
Map - Map
MapImage - MapControl
Layer - Layer
Rendering - Render
Style - ?
Data(PostGIS空间数据库) - Dataset(SQLite数据库)
Geometry - Cargeometry

D:\Documents\Visual Studio 2008\Projects\sharpmap-78712\Trunk\SharpMap.VS2008.sln
d:\Documents\Visual Studio 2008\Projects\MySharpMap\MySharpMap\
注:参考书籍:陈真,何津,余瑞, 《GIS软件SharpMap源码解析及应用》,2012,3.
SharpMap源代码解析的更多相关文章
- Spring源代码解析
Spring源代码解析(一):IOC容器:http://www.iteye.com/topic/86339 Spring源代码解析(二):IoC容器在Web容器中的启动:http://www.itey ...
- Arrays.sort源代码解析
Java Arrays.sort源代码解析 Java Arrays中提供了对所有类型的排序.其中主要分为Primitive(8种基本类型)和Object两大类. 基本类型:采用调优的快速排序: 对象类 ...
- Spring源代码解析(收藏)
Spring源代码解析(收藏) Spring源代码解析(一):IOC容器:http://www.iteye.com/topic/86339 Spring源代码解析(二):IoC容器在Web容器中的 ...
- volley源代码解析(七)--终于目的之Response<T>
在上篇文章中,我们终于通过网络,获取到了HttpResponse对象 HttpResponse是android包里面的一个类.然后为了更高的扩展性,我们在BasicNetwork类里面看到.Volle ...
- Cocos2d-x源代码解析(1)——地图模块(3)
接上一章<Cocos2d-x源代码解析(1)--地图模块(2)> 通过前面两章的分析,我们能够知道cocos将tmx的信息结构化到 CCTMXMapInfo.CCTMXTilesetInf ...
- Android EventBus源代码解析 带你深入理解EventBus
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus ...
- 源代码解析Android中View的layout布局过程
Android中的Veiw从内存中到呈如今UI界面上须要依次经历三个阶段:量算 -> 布局 -> 画图,关于View的量算.布局.画图的整体机制可參见博文 < Android中Vie ...
- Android xUtils3源代码解析之网络模块
本文已授权微信公众号<非著名程序猿>原创首发,转载请务必注明出处. xUtils3源代码解析系列 一. Android xUtils3源代码解析之网络模块 二. Android xUtil ...
- Android View体系(八)从源代码解析View的layout和draw流程
相关文章 Android View体系(一)视图坐标系 Android View体系(二)实现View滑动的六种方法 Android View体系(三)属性动画 Android View体系(四)从源 ...
随机推荐
- U3D游戏运行时资源是如何从AB中加载出来的
以安卓为例 1,游戏启动,自定义版本管理器去安卓的持久化目录下查找我们自定久的版本管理文件 rep.db,若该文件不存在,说明这是游戏第一次启动,于是就把streammingAssets下的LUA文件 ...
- How to Pronounce the word BECAUSE
How to Pronounce the word BECAUSE Share Tweet Share Tagged With: BECAUSE Reduction Study the BECAUSE ...
- ssh 免密码登录,以及 本地和远端用户名不一致 问题
ssh 远程登录 ssh -l u1 u1@192.168.0.7 ssh u1@192.168.0.7 每次远程都要输入 用户名,密码 比较麻烦.所以比较好的是免密码登录 1.安装ssh服务器 su ...
- 练习:自己写一个容器ArrayList集合 一一数组综合练习2
package cn.bjsxt.collection; /** * 自己实现一个ArrayList */ import java.util.ArrayList; import java.util.L ...
- scala sparseVetor, SprseMatrix 实现
def rand(seed:Int):Double={ val rand=new Random(seed) rand.nextDouble()} def rand2(size:Int,seed:Int ...
- Spring的属性注入, byName和byType还有注入List属性
昨天花了一晚上的时间又仔细研究了一下Spring的属性注入, 一个新的方法: 自动装载和autowire, 不过因为又想起来老师说不常用, 感觉这一晚上的时间有点亏, 还是自己太愚钝了, 反应太慢 先 ...
- tf.unstack\tf.unstack
tf.unstack 原型: unstack( value, num=None, axis=0, name='unstack' ) 官方解释:https://tensorflow.google.cn/ ...
- 【校招面试 之 C/C++】第10题 C++不在构造函数和析构函数中调用虚函数
1.不要在构造函数中调用虚函数的原因 在概念上,构造函数的工作是为对象进行初始化.在构造函数完成之前,被构造的对象被认为“未完全生成”.当创建某个派生类的对象时,如果在它的基类的构造函数中调用虚函数, ...
- Package gtk+-3.0 was not found in the pkg-config search path
问题描述: 在fedora21系统上通过rpmbuild构建fcitx的二进制包时出现以上错误,经老程序员指点:“是相应的开发包没有安装” 解决办法: yum installl gtk3-devel ...
- 那些我离不开的 Sketch 插件
当谈论到插件时,我是一名极客.各种新颖的 Sketch 插件层出不穷,但是有那么几个是我怎么也离不开的. Sketch 运行器 多层的插件菜单再也不会影响我的效率了. 我推迟了好几年才使用这个插件,因 ...