插件式GIS应用框架的设计与实现--基于C#和ArcGIS Engine 9.2
基本信息
编辑推荐
从软件架构的角度讨论GIS应用框架开发过程,为读者剖析GIS二次开发原理.
从“为什么”开始,以“怎么做”结束,并涉及多项.NET高级主题的内容和适用范围...
推荐阅读
内容简介回到顶部↑
本书是为想学习基于net framework的插件式框架技术和arcgis engine 9.2组件集的这两种类型读者而撰写的,其最大的特点是从“为什么”开始,以“怎么做”结束,深入浅出地介绍了相关知识的原理和使用范围,并最终将其应用于一个插件式gis应用框架的开发过程之中。
入门新手在成长为一名合格程序员的过程中总会遇到个瓶颈阶段,也许你熟练地掌握了一门语言的语法,并成功地写了几个小程序,让自己颇有成就感。那么接下来呢?你是否有足够的劲头去深人了解语言的一些高级特征,甚至开始思考某些术语的准确含义、差别和使用场合?也许你正试图这么做,但最后或多或少地都会有些沮丧——你无法简单地将这些知识点融合起来,以形成自己头脑中的技术地图——你有一堆珍珠,却不能串成价值更高的项链。
这正是一本带你度过这一阶段的书,它从软件架构的角度来讨论插件式gis应用框架开发过程,从而让你了解和熟悉多项.net高级主题的内容和适用范围。无论是纯粹的.net爱好者,还是对arcgis engine感兴趣的gis程序员,都能从本书中按得自己想要的东西。
本书的目标读者需要拥有一定的c#和net framework基础知识,并熟悉arcgis的开发技术。
入门新手在成长为一名合格程序员的过程中总会遇到个瓶颈阶段,也许你熟练地掌握了一门语言的语法,并成功地写了几个小程序,让自己颇有成就感。那么接下来呢?你是否有足够的劲头去深人了解语言的一些高级特征,甚至开始思考某些术语的准确含义、差别和使用场合?也许你正试图这么做,但最后或多或少地都会有些沮丧——你无法简单地将这些知识点融合起来,以形成自己头脑中的技术地图——你有一堆珍珠,却不能串成价值更高的项链。
这正是一本带你度过这一阶段的书,它从软件架构的角度来讨论插件式gis应用框架开发过程,从而让你了解和熟悉多项.net高级主题的内容和适用范围。无论是纯粹的.net爱好者,还是对arcgis engine感兴趣的gis程序员,都能从本书中按得自己想要的东西。
本书的目标读者需要拥有一定的c#和net framework基础知识,并熟悉arcgis的开发技术。
作译者回到顶部↑
本书提供作译者介绍
蒋波涛,华南理工大学建筑学院建筑技术科学专业硕士毕业。所用所著,皆半路而成。目前在宁波市规划与地理信息中心从事项目管理与开发工作。关注GIS、设计模式和RIA技术,2006年曾出版《ArcObjects开发基础与技巧——基于VisualBasic.NET》一书。专长:ArcGIS平台开发技术(ArcGIS Desktop、ArcGIS Engine、ArcGIS Server和ArcIMS等)、Microsoft.NET平台开发技术(ASP.NET Web程序和Windows程序)、Ajax富客户端技术(YUI、ExtJS)
著作:《GIS for Web应用开发之道》(译)、《插件式GIS应用框架的设计与.. << 查看详细
著作:《GIS for Web应用开发之道》(译)、《插件式GIS应用框架的设计与.. << 查看详细
目录回到顶部↑
前言
联系博文视点
第1章 走进插件式gis应用框架
1.1 应用框架精讲
1.1.1 应用框架简介
1.1.2 应用框架的特点
1.1.3 gis应用框架
1.2 插件式应用框架
1.3 arcgis engine简介
1.3.1 arcgis产品框架
1.3.2 gis开发组件——arcgis engine
1.3.3 arcgis engine产品类型
1.3.4 arcgis engine 9.2新特性展现
1.4 第三方ui组件——janus systems
1.5 小结
第2章 框架插件引擎设计
2.1 他山之石——arcmap插件机制
2.2 框架通信契约——接口
2.2.1 接口的秘密
2.2.2 实现接口与显式实现接口
联系博文视点
第1章 走进插件式gis应用框架
1.1 应用框架精讲
1.1.1 应用框架简介
1.1.2 应用框架的特点
1.1.3 gis应用框架
1.2 插件式应用框架
1.3 arcgis engine简介
1.3.1 arcgis产品框架
1.3.2 gis开发组件——arcgis engine
1.3.3 arcgis engine产品类型
1.3.4 arcgis engine 9.2新特性展现
1.4 第三方ui组件——janus systems
1.5 小结
第2章 框架插件引擎设计
2.1 他山之石——arcmap插件机制
2.2 框架通信契约——接口
2.2.1 接口的秘密
2.2.2 实现接口与显式实现接口
前言回到顶部↑
应用程序的开发是一项针对性很强的工作,程序的模块设计、层次划分、语言选择和系统部署都依赖最终用户的具体需求、软硬件环境甚至个人的喜好。因此,在应用程序开发过程中,项目人员必须花费大量的时间进行项目前期调研,编制不同阶段的需求分析和建设方案,然后才能进入编码阶段,根据具体需求开发各种功能组件。.
如果每一个开发过程都是如此这般,每一次都要从头开始,舍弃以前的项目经验和成果,软件开发显然就是一件乏味且充满重复性的劳动。人类进化的显著特点之一是擅长学习已经存在的知识和经验,并将它们作为开发更广阔未知领域的工具。软件的开发也应该如此:吸取以往的开发经验和教训,尽量重复使用已经存在的组件和材料,以降低开发成本,缩短新技术的学习曲线并提高开发效率。
幸运的是,代码的重用从来不是一个过时的话题。在软件开发过程中,为了实现这一目标,函数库、类库、设计模式和框架等机制先后被提出,不断地为提高软件生产效率和代码质量而努力。而框架,作为这些重用机制中一种最高级的类型,在结构复杂、需求多变的各种规模程序设计中具有很强的吸引力——框架不仅仅提供了大量的可重用组件,而且提供了一种工作模式去协助开发人员扩展自身的功能。特别是插件式框架,它以一种更加灵活和宽松的方式实现了框架功能的无限扩展和功能聚合,更重要的是,这种扩展方式不会涉及框架本身的代码安全等核心问题。
本书的主题是设计一个基于插件式架构的GIS应用框架,GIS开发是一种典型的“因势而变”工程,由于不同类型的用户在地理数据的存储、使用和部署方式上都有很大差别,根据实际需求定制开发是不可避免的。而插件式GIS框架,则是满足定制要求的最好方式之一——扩展方便、部署简单和高度可重用。
为了开发这个框架,本书使用了C#2005语言、.NET Framework 2.0基础类库、ESRI的ArcGIS Engine 9.2组件库和Janus WinForm Controls第三方组件库。
应用框架使用的开发语言是C#,它总是在.NET Framework中运行。因此,本书许多章节的内容将首先讨论为开发该框架某一部分而使用的关于C#和.NET Framework 2.0的相关知识。这些内容并非简单的语言语法,它还包括许多隐藏在语法后的使用技巧和实质内涵,即使其中的某些内容并没有直接用于框架设计,但它对于想要深入了解C#和.NET Framework高级主题的读者仍然具有很高的阅读价值。
插件式GIS应用框架使用了ArcGIS Engine组件库作为其GIS部分的二次开发包,因此本书中介绍了大量关于ArcGIS Engine的知识,尤其是ArcGIS Engine 9.2版本包含的新组件和新的扩展框架,这个重要的组件库使GIS开发工作变得更加容易和便捷,开发的程序功能也更加强大。但本书并没有系统地介绍其相关的内容。如果读者还不熟悉ArcGIS Engine或ArcGIS开发,可以参看拙著《ArcObjects开发基础与技巧——基于VisualBasic.Net》(武汉大学出版社,2006)或其他有关ArcGIS开发的书籍。..
除了具体的技术,在本书中将要讨论的另一个重点是开发一个插件式GIS应用框架的模式,它包括设计模式和工作模式两部分。这些知识是开发者从初窥门径到登堂入室必须了解的内容,是隐藏在GIS应用框架中的精髓。
本书从一个插件式GIS应用框架的项目实例入手,循序渐进地介绍了开发这样一个框架的设计思考和代码实现过程,通过先理论后实践的方式,解答了为什么要这样做和怎样做的问题。首先设计插件式框架的核心——插件引擎,然后介绍基于插件引擎的框架宿主程序,接着开始设计框架的不同类型插件,这样一个插件式框架的雏形就建立起来了。为了让它具备GIS功能,本书继续深入介绍了宿主程序的高级设计内容——如何将GIS算法转换为代码和框架辅助类库设计的知识。最后,插件式GIS应用框架被打包和部署。
在项目介绍过程中,本书始终坚持了迭代开发的思想,没有在一开始就抛给读者一堆设计完整的代码。事实上,无论开发人员经验多么丰富,都免不了“再回首”的过程,因此,许多设计“缺陷”被刻意留在代码中,当读者深入学习后,会自然而然地发现这些缺陷,而此时读者理解这些缺陷和解决这些缺陷会变得更加胸有成竹。我认为这种组织方式更适合普通读者的学习曲线和理解习惯。
因此,这并不是一本关于C#的语法书,它只挑选了C#中的某些高级主题进行深入讨论;这也不是一本ArcGIS Engine 9.2开发包的参考手册,它介绍的是如何使用这些组件进行实际的程序开发;本书不是介绍如何使用拖曳控件方式开发应用程序,它更关注如何设计和实现一个插件式框架;这也并不是一本只讲解如何使用ArcGIS组件的书籍,它还介绍了两个实用的GIS算法并基于ArcGIS Engine实现;最后,本书的软件成果并非一个只能供学习ArcGIS Engine而开发的简单Demo,它完全可以投入实际应用。
本书适合以下读者阅读:
具有一定C# 和.NET Framework基础知识,并动手写过代码的读者;
已经熟悉ArcGIS开发技术,并希望开发水平更上一层楼的程序员;
对软件架构设计,特别是插件式框架设计有兴趣的读者。
最后,我希望这本书能够帮助读者有效地改进自己的思考方式,提高技术水平和开发能力。请读者在开发工具VS2005中认真地键入书中每一行代码,了解程序到底发生了什么变化。我相信,唯有如此,读者才能真正了解我的写作本意和迭代开发的精髓。...
如果每一个开发过程都是如此这般,每一次都要从头开始,舍弃以前的项目经验和成果,软件开发显然就是一件乏味且充满重复性的劳动。人类进化的显著特点之一是擅长学习已经存在的知识和经验,并将它们作为开发更广阔未知领域的工具。软件的开发也应该如此:吸取以往的开发经验和教训,尽量重复使用已经存在的组件和材料,以降低开发成本,缩短新技术的学习曲线并提高开发效率。
幸运的是,代码的重用从来不是一个过时的话题。在软件开发过程中,为了实现这一目标,函数库、类库、设计模式和框架等机制先后被提出,不断地为提高软件生产效率和代码质量而努力。而框架,作为这些重用机制中一种最高级的类型,在结构复杂、需求多变的各种规模程序设计中具有很强的吸引力——框架不仅仅提供了大量的可重用组件,而且提供了一种工作模式去协助开发人员扩展自身的功能。特别是插件式框架,它以一种更加灵活和宽松的方式实现了框架功能的无限扩展和功能聚合,更重要的是,这种扩展方式不会涉及框架本身的代码安全等核心问题。
本书的主题是设计一个基于插件式架构的GIS应用框架,GIS开发是一种典型的“因势而变”工程,由于不同类型的用户在地理数据的存储、使用和部署方式上都有很大差别,根据实际需求定制开发是不可避免的。而插件式GIS框架,则是满足定制要求的最好方式之一——扩展方便、部署简单和高度可重用。
为了开发这个框架,本书使用了C#2005语言、.NET Framework 2.0基础类库、ESRI的ArcGIS Engine 9.2组件库和Janus WinForm Controls第三方组件库。
应用框架使用的开发语言是C#,它总是在.NET Framework中运行。因此,本书许多章节的内容将首先讨论为开发该框架某一部分而使用的关于C#和.NET Framework 2.0的相关知识。这些内容并非简单的语言语法,它还包括许多隐藏在语法后的使用技巧和实质内涵,即使其中的某些内容并没有直接用于框架设计,但它对于想要深入了解C#和.NET Framework高级主题的读者仍然具有很高的阅读价值。
插件式GIS应用框架使用了ArcGIS Engine组件库作为其GIS部分的二次开发包,因此本书中介绍了大量关于ArcGIS Engine的知识,尤其是ArcGIS Engine 9.2版本包含的新组件和新的扩展框架,这个重要的组件库使GIS开发工作变得更加容易和便捷,开发的程序功能也更加强大。但本书并没有系统地介绍其相关的内容。如果读者还不熟悉ArcGIS Engine或ArcGIS开发,可以参看拙著《ArcObjects开发基础与技巧——基于VisualBasic.Net》(武汉大学出版社,2006)或其他有关ArcGIS开发的书籍。..
除了具体的技术,在本书中将要讨论的另一个重点是开发一个插件式GIS应用框架的模式,它包括设计模式和工作模式两部分。这些知识是开发者从初窥门径到登堂入室必须了解的内容,是隐藏在GIS应用框架中的精髓。
本书从一个插件式GIS应用框架的项目实例入手,循序渐进地介绍了开发这样一个框架的设计思考和代码实现过程,通过先理论后实践的方式,解答了为什么要这样做和怎样做的问题。首先设计插件式框架的核心——插件引擎,然后介绍基于插件引擎的框架宿主程序,接着开始设计框架的不同类型插件,这样一个插件式框架的雏形就建立起来了。为了让它具备GIS功能,本书继续深入介绍了宿主程序的高级设计内容——如何将GIS算法转换为代码和框架辅助类库设计的知识。最后,插件式GIS应用框架被打包和部署。
在项目介绍过程中,本书始终坚持了迭代开发的思想,没有在一开始就抛给读者一堆设计完整的代码。事实上,无论开发人员经验多么丰富,都免不了“再回首”的过程,因此,许多设计“缺陷”被刻意留在代码中,当读者深入学习后,会自然而然地发现这些缺陷,而此时读者理解这些缺陷和解决这些缺陷会变得更加胸有成竹。我认为这种组织方式更适合普通读者的学习曲线和理解习惯。
因此,这并不是一本关于C#的语法书,它只挑选了C#中的某些高级主题进行深入讨论;这也不是一本ArcGIS Engine 9.2开发包的参考手册,它介绍的是如何使用这些组件进行实际的程序开发;本书不是介绍如何使用拖曳控件方式开发应用程序,它更关注如何设计和实现一个插件式框架;这也并不是一本只讲解如何使用ArcGIS组件的书籍,它还介绍了两个实用的GIS算法并基于ArcGIS Engine实现;最后,本书的软件成果并非一个只能供学习ArcGIS Engine而开发的简单Demo,它完全可以投入实际应用。
本书适合以下读者阅读:
具有一定C# 和.NET Framework基础知识,并动手写过代码的读者;
已经熟悉ArcGIS开发技术,并希望开发水平更上一层楼的程序员;
对软件架构设计,特别是插件式框架设计有兴趣的读者。
最后,我希望这本书能够帮助读者有效地改进自己的思考方式,提高技术水平和开发能力。请读者在开发工具VS2005中认真地键入书中每一行代码,了解程序到底发生了什么变化。我相信,唯有如此,读者才能真正了解我的写作本意和迭代开发的精髓。...
序言回到顶部↑
GIS(Geographic Information System,地理信息系统)早已不是什么新鲜的技术,特别是近些年来互联网已经深入我们日常生活的方方面面,人们有机会走进GIS的世界,才发现GIS原来这样精彩。在这背后,是GIS应用的日渐丰富,似乎世界上的一切都能与其扯上关系,其实这还真是一个再自然不过的道理,因为世间万物都有一个共同的属性,就是所处的位置,而地理位置,正是GIS的基础。.
GIS的名头虽然不新鲜了,但GIS的前景仍然是很美妙的,毕竟从全世界的范围来看,GIS的应用朝气蓬勃,不断在崭新的领域创造价值,所以也吸引着广大的专家、工程师、学子将目光投向这一“超新星”。目前,国内几乎所有拥有地理专业的高校都设立了GIS这门课程,这预示着未来我们会遇到越来越多志同道合的伙伴在这一行当贡献各自的聪明才智。
平台软件是GIS应用的基本保证,而平台软件能够支持定制开发,这是对它的基本要求。在国内,在平台软件基础上做开发尤其受关注,对GIS的从业者来说,需要掌握的一个重要的技能就是GIS平台软件的二次开发。虽然 “二次开发”看似比“一次开发”简单,但需要学习者掌握的技术也不少:除了GIS的基础知识外,还要懂得基本的程序设计方法和思路,了解至少一门编程语言的语法和开发环境,同时熟悉该GIS产品的开发原理和开发资源。..
要求这么多的背景知识可难为了GIS的爱好者,好在本书的作者蒋波涛就是设身处地帮助大家思考如何破解这道难题的。本书不走常见的套路——要么侧重在组件式技术本身,要么空泛介绍GIS产品的主要组件——而是高屋建瓴地从设计模式和开发框架出发,剥茧抽丝,为读者展开一幅清晰透彻的GIS开发画卷。本书也包含了大量的基础知识,包括组件技术、.NET框架、C#语言、ArcGIS Engine开发接口等,无论读者从哪个角度出发,我深信都能够从本书中咀嚼出滋味。
我要对希望快速汲取GIS知识力量的伙伴说,想象力比知识本身更重要,而想象力来自于对原理的掌握。想象不是凭空遐想,而是对原理的创造性延伸。本书的意义在于它并不只向读者介绍了一个GIS开发产品,况且ArcGIS Engine也仅仅是ArcGIS产品大家族中的一个小成员,更重要的是它为读者剖析了一种GIS二次开发的原理,为大家开启了一扇通向“想象力”的知识之窗。...
王 昊
ESRI中国(北京)有限公司技术总监
GIS的名头虽然不新鲜了,但GIS的前景仍然是很美妙的,毕竟从全世界的范围来看,GIS的应用朝气蓬勃,不断在崭新的领域创造价值,所以也吸引着广大的专家、工程师、学子将目光投向这一“超新星”。目前,国内几乎所有拥有地理专业的高校都设立了GIS这门课程,这预示着未来我们会遇到越来越多志同道合的伙伴在这一行当贡献各自的聪明才智。
平台软件是GIS应用的基本保证,而平台软件能够支持定制开发,这是对它的基本要求。在国内,在平台软件基础上做开发尤其受关注,对GIS的从业者来说,需要掌握的一个重要的技能就是GIS平台软件的二次开发。虽然 “二次开发”看似比“一次开发”简单,但需要学习者掌握的技术也不少:除了GIS的基础知识外,还要懂得基本的程序设计方法和思路,了解至少一门编程语言的语法和开发环境,同时熟悉该GIS产品的开发原理和开发资源。..
要求这么多的背景知识可难为了GIS的爱好者,好在本书的作者蒋波涛就是设身处地帮助大家思考如何破解这道难题的。本书不走常见的套路——要么侧重在组件式技术本身,要么空泛介绍GIS产品的主要组件——而是高屋建瓴地从设计模式和开发框架出发,剥茧抽丝,为读者展开一幅清晰透彻的GIS开发画卷。本书也包含了大量的基础知识,包括组件技术、.NET框架、C#语言、ArcGIS Engine开发接口等,无论读者从哪个角度出发,我深信都能够从本书中咀嚼出滋味。
我要对希望快速汲取GIS知识力量的伙伴说,想象力比知识本身更重要,而想象力来自于对原理的掌握。想象不是凭空遐想,而是对原理的创造性延伸。本书的意义在于它并不只向读者介绍了一个GIS开发产品,况且ArcGIS Engine也仅仅是ArcGIS产品大家族中的一个小成员,更重要的是它为读者剖析了一种GIS二次开发的原理,为大家开启了一扇通向“想象力”的知识之窗。...
王 昊
ESRI中国(北京)有限公司技术总监
书摘回到顶部↑
第1章走进插件式GIS应用框架
1.1应用框架精讲
1.1.1应用框架简介
“框架(Framework)是个系统全部或部分的可复用设计,通常由一组抽象类和类之间的协作组成”。
软件产品的开发是一项复杂的系统工程,随着它需要解决的问题复杂度的不断提高,软件产品的研发早已从过去“作坊式”开发演化到了当今符合一系列工业标准和规范的开发模式。软件产品面对的具体应用需求日益多元化、软件项目开发规模日益大型化,这两个因素促使软件开发团队的管理变得越来越复杂,软件开发项目的可控性变得越来越不稳定。
为了寻找“银弹”,IT工业界采用了多种方法,它们包括制定各种软件开发标准和规范、发明具有更高生产力的编程语言、开发更好的编译器和运行时(Runtime)、提供功能更加强大的可分发组件库和探索更好的软件开发模式。但对于应用程序员而言,各种标准、规范和不断涌现的编程语言并不在自己可以控制的范围之内,大部分情况下,我们只能从软件工程的角度出发,在设计层面采用一些独特的软件架构和设计模式以达到我们期待的下列目的:
尽量提高软件的可重用性,避免不必要的重复编码工作。
增强组件的封装性。
提高软件的模块化程度。
不同功能模块之间能够无缝集成。
软件具有灵活的可扩展性。
软件产品的扩展和开发实现标准化。
软件产品具有面向不同应用层面的适应性和易移植性。
……
1.1应用框架精讲
1.1.1应用框架简介
“框架(Framework)是个系统全部或部分的可复用设计,通常由一组抽象类和类之间的协作组成”。
软件产品的开发是一项复杂的系统工程,随着它需要解决的问题复杂度的不断提高,软件产品的研发早已从过去“作坊式”开发演化到了当今符合一系列工业标准和规范的开发模式。软件产品面对的具体应用需求日益多元化、软件项目开发规模日益大型化,这两个因素促使软件开发团队的管理变得越来越复杂,软件开发项目的可控性变得越来越不稳定。
为了寻找“银弹”,IT工业界采用了多种方法,它们包括制定各种软件开发标准和规范、发明具有更高生产力的编程语言、开发更好的编译器和运行时(Runtime)、提供功能更加强大的可分发组件库和探索更好的软件开发模式。但对于应用程序员而言,各种标准、规范和不断涌现的编程语言并不在自己可以控制的范围之内,大部分情况下,我们只能从软件工程的角度出发,在设计层面采用一些独特的软件架构和设计模式以达到我们期待的下列目的:
尽量提高软件的可重用性,避免不必要的重复编码工作。
增强组件的封装性。
提高软件的模块化程度。
不同功能模块之间能够无缝集成。
软件具有灵活的可扩展性。
软件产品的扩展和开发实现标准化。
软件产品具有面向不同应用层面的适应性和易移植性。
……
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· InfoQ中文站论坛:.NET讨论区(InfoQ .NET)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· WCF的开山之作 WCF画卷的清明上河图(WCF WF WPF)

点击看大图







加载中...