link:http://hi.baidu.com/kuanjin8309/blog/item/547cd4cb5b30db43f31fe7f5.html
生物多样性
Biology diversity Pro 独立运行软件,可计算很多钟指数,还能完成一些其它的运算如聚类等,推荐..(5.09M)
Biotools:计算多样性指数的软件,是一个EXCEL宏,解压运行后将在EXCEL生成一个工具栏,只有4个按钮,使用非常方便,不过只能计算7个指数.本地下载(66K)
Bio-Dap:计算多样性指数的软件,解压后可直接运行,有独立的运行界面,不过需要以逗号分开的纯文本数据文件,可以计算包括Shannon-Weiner,Mackintosh指数在内的11个指数,还可以进行种-多度分布的拟合,但一次能运算的样地数有限.本地下载(273k).
Species Diversity & Richness:计算的多样性指数很全,但是一个试用版,只能计算10个样地,每个样地十个种。(A program to aid in biodiversity studies, offering a wide range of alpha and beta diversity related methods, graphical data representation, abundance distributions, and generation of simulated data.) 主页http://www.pisces-conservation.com/
Estimate:Estimate computes survival estimates from banding (ringing) recovery data
景观软件Fragstats3.3:一个很流行的计算景观格局指数的软件
Apack:计算景观格局指数可以与Fragstats3.3交互使用,DOS界面,使用起来不是太方便
SimMap:一个用于理论研究的景观中性模型
Seles:景观模拟语言 本地下载
景观管理系统
【编者按】为让大家更好地了解MapGIS新一代搭建式开发平台、数据中心系统、三维GIS平台,结合吴信才教授近期的有关报告和MapGIS最新技术发展情况特编辑整理此文。
近十年来,数字地球、数字城市、数字行业风起云涌,推波助澜,作为数字化发展的重要支撑技术GIS技术迎来了新的发展机遇,但是GIS技术发展走向何方,这是大家都非常关注的问题。中地数码集团凭借多年的实践经验和科学创新精神开创了“在新的一代GIS架构技术支持下的新一代的搭建式开发平台、数据中心系统和三维GIS平台”。
MapGIS7搭建式开发平台:不懂软件开发,也可搭建GIS系统
GIS行业欣欣向荣,但是GIS软件企业前赴后继,问题在哪里?很多学者都知道,GIS技术是跨学科,跨行业的,涉及面广。随着应用越来越广,系统越做越庞大,加之开发手段不方便,使得开发难度加大。目前多数企业普遍使用的是面向对象、组件化的开发技术,虽说是新技术,但它的开发手段复杂,对程序员的能力要求过高。同时,GIS软件企业发展面临着“热带高压”的现象。所谓“热带”就是用户要求过热,用户想很快看到原型系统,但是现在的系统太庞大,目前的开发模式不可能很快开发出原型系统;并且影响因素过多,拖时间长了,产生新的需求,项目永远结不了。所谓“高压”就是开发商承压过高。时间急迫,开发人员加班,周围人员帮不上忙,老总干着急;技术支持人员面对用户提出的新要求,要靠程序员去解决,程序员对代码重复编写产生厌烦情绪;因而程序员非常珍贵,对项目影响大。
面对这种情况,GIS软件企业路在何方?这是值得我们考虑的问题。在十年前,中地数码集团就预计了这个行业今后会遇着什么困难,考虑走哪条路:第一、融资加大投入,融资通常有两个途经:一是引入风险投资,二是融资上市。要上市谈何易。风险投资在我们身边很多,但GIS企业几乎没有一个成功的;第二、就是改行做数据生产,确实是一条比较好的道路,有很多GIS软件企业,经历了大风大浪后,最后改行做数据生产、改行做数据运营商,发展得比较好。另外一条路就是进行技术变革,首要就是开发技术的变革,解决开发难的问题,开发技术变革首先的责任就在平台商,中地公司作为一个软件平台开发商,要担负起技术变革的重任。
纵观二次开发技术体系的发展史,可分为三个阶段:第一是面向结构化程序开发技术阶段,也称为SOD开发技术阶段;第二是面向对象组件化程序开发技术阶段,也称为OOD开发技术阶段;第三是面向搭建式的程序开发技术阶段,也称为FOD开发技术阶段。前两者称为传统的开发模式,后者称为新一代的开发模式。目前绝大多数的系统和绝大多数的软件商都处于面向对象组件化程序开发技术阶段,这种开发技术很不方便。虽然面向对象组件化技术是先进的,但是开发手段并不方便。
与新一代的开发技术相比,传统的面向对象组件化的开发技术难度大,对计算机程序员要求过高,靠程序员来手工编程调试,不能流程化生产。新一代的软件开发技术--- 搭建式开发,实现零编程,可以减少软件开发量,提升软件开发质量,降低开发难度,使很多人都可以参与,学习更容易,维护更方便。传统的模式下,如果是软件需求变化了,需要修改程序,只有程序员在忙,其他的人帮不上忙。在新一代开发模式下如果是软件需求变化了需要修改程序,大家都可以一起分担、一起改进,所以这两种模式的效率相比起来相差是非常大的。(如图1)
图1:传统与新一代开发模式工作效率比较
新一代开发模式是由插件式开发、配置式开发和搭建式开发三种方式组成。搭建式开发,是基于工作流、电子表单、基于SOA的构件仓库(功能仓库)、搭建平台和运行平台组成。插件式二次开发,是基于SOA技术系统框架、SOA技术的基础插件、基础视图、少量编程(即需要插件时进行少量编程)。配置式二次开发是配置资源、目录、工具箱、视图、菜单、程序模板、实例模板、引导式加载程序实例。
新一代开发模式的效率,从开发周期来看,同样的任务,同样的人,开发周期是原来的五分之一,即原来需要一年的开发任务,在新的开发模式下,大概用两个多月就可以完成了,非常高的开发效率。从开发质量来看,以初次上线测试的BUG量来比较,传统的开发模式下,初次测试的BUG一般在三百多个以上,在新一代的开发模式下,初次测试BUG在三十个以下,相当于质量提高了十倍。
例如搭建一个简单的放大缩小、移动、显示的WebGIS系统,在传统开发模式下的手工编程,很优秀的程序员也要干几个小时。现在用搭建式的开发很方便,首先开一个窗口用于显示输出图形,然后把放大按钮、缩小按钮、移动按钮、显示按钮和返回按钮拖放到相应的地方,这样就把一个简单的WebGIS系统搭建起来了,可以进行显示、放大等功能,非常方便。(如图2)
图2:WebGIS搭建过程
搭建式系统开发技术可以是业务系统搭建,也可以是GIS系统搭建。业务系统搭建包括电子政务,以及一般的业务系统。GIS系统搭建包括应用GIS系统、WebGIS、信息发布等等。搭建开发技术有四个关键部件:一个是面向服务的体系架构,如果软件不是面向服务的体系架构,就不能说可以完成“全部搭建”,最多称得上“部分搭建”;第二个是功能完备的构件仓库(有时也称功能仓库)。构件仓库是松耦合的,不是构件库,也不是动态库,更不是组件库。动态库、组件库是紧耦合的,是通过程序员手工编程来连接调用的。构件仓库是可以搭建的,构件仓库的概念应该说是我们最先提出来的。第三个是方便灵活的可视化搭建平台。第四个是安全可靠的运行管理平台。(如图3)
图3:搭建开发技术的四个关键部件
下面介绍面向服务的架构技术。
新一代的开发模式必须有面向服务的体系架构技术才能实现,所以在新一代开发模式出现之前,中地公司的底层平台MapGIS7就是采用面向服务的体系架构技术。纵观GIS架构技术发展的三个阶段,第一个阶段是面向过程的架构技术 (POA),我们称为个体经济阶段;第二阶段是面向系统的架构体系 (EOA),我们称之为计划经济阶段,面向系统,面面俱到,所有东西都管起来。例如我们高校就是个小系统,在计划经济时期就是什么都有,食堂、幼儿园 、医院、车队等等,怎样办得好呢?一个国家也是,在计划经济时期管理机构非常庞大,支撑不了,所以中国必须走有中国特色的社会主义道路,建立社会主义市场经济体制。目前大多数系统是面向系统这种架构技术,所以到了难以支撑的地步,唯一的出路是使用面向服务的架构技术 (SOA),我们称为市场经济,根据需求为用户量身定做解决方案,提供服务。
体系结构的发展使搭建式开发成为可能,最早的面向过程的体系架构 (POA)只能用于面向结构化的程序开发 (SOD)技术,面向系统的架构 (EOA)可以用于面向对象和组件化的程序开发技术(OOD),只有面向服务的体系架构 (SOA)才能支持搭建式的程序开发技术 (FOD)。
MapGIS7系统 (SOA) 是多层体系架构,特点是:横向网络,纵向多层。MapGIS7的软件模块是多层的,最底层是数据管理层,上面是基础平台层,专业平台层,Web服务层,搭建平台层,最后是应用系统层。(如图4)
图4:MapGIS7的软件模块层次图
MapGIS7数据中心:彻底解决海量数据管理和共享问题 实现搭建开发这样的零编程平台需要一个全新的数据和功能的管理模式,因此提出了“数据中心”的新思想。什么是数据中心?它与搭建平台有什么关系?数据中心由数据仓库、构件仓库和搭建平台三部分组成,分别类似于物流中心的货物仓库、运输工具仓库(包括机械手、传送带、汽车、火车,集装箱等等)和配送平台。下面我们介绍数据仓库和构件仓库的概念。
要了解数据库和数据仓库、构件库与构件仓库的区别,首先从库(库房)和仓库入手。库房和仓库的相同点是都有货物、货架,但是仓库相比库房多了三部分:可重配置的目录、自动运输工具和维护保障系统。库房虽然也有目录,但目录是固定的,用本子来记录,是不可变的;仓库是用计算机来重配置目录的,所以仓库的目录是活的。库房把很多相同的货物堆在一个货架上,要提取货物时,用手工去分检、提取货物;仓库需要提取货物时,把卡一刷,机械手、分检器就自动地将货物提取出来。所以仓库的运输工具是自动的,并有一整套货物维护和安全保障系统。
同样,数据仓库比数据库多了三部分:可重配置的目录、服务方法和数据维护插件。数据库的目录是固定不变的;数据仓库的目录是活动的,它可以按地区、类型、年度分类来安排目录。数据库只是把很多同类的数据放在一个表上,要提取数据时手工编程提取,手工编程检索等;而数据仓库的数据提取、数据上载、数据挖掘等是有工具、有服务方法的,是自动进行的,同时还有一整套数据维护、数据更新和安全保障插件。(如图5)
图5:数据库和数据仓库的目录对比
依次类推,构件库和构件仓库的区别也一样,只有构件仓库才能用来搭建。动态库、组件库、构件库在应用时,与库房提货需要手工操作一样,需要手工编程来调用,因此它们是不能用于搭建系统的,不能支持数据中心。构件仓库则不同,可管理面向服务的功能构件,按照标准建立接口管理、配置可视化,再配上搭建平台就可以搭建了,构件仓库与数据仓库从某种意义来说是类似的。
假如有一大批库房在一起,是否可以称为一个物流中心?不行!这只是可以称为一个货物堆场。物流中心是由许多货物仓库、运输工具和配送平台组成的。我们提出数据中心这个概念的时候,有很多厂商包括国外厂商的推销员也说他们有数据中心,但是他们所指的数据中心是可以管理很多数据,把数据放在一起,这不是数据中心,而是个数据的堆场,不能有效地进行系统搭建。所以我们如果不清楚什么才是真正的数据中心,我们就拿物流中心来相比。物流中心和货物堆场,数据中心和数据堆场概念的区别是相似的。(如图6、7)
图6:数据中心和数据堆场概念的比较
图7:数据中心的分层体系结构图
搭建式开发改变了软件整个生产流程,改变了它的效率和模式。同样的任务、同样的人员,搭建式开发方式大大缩短了开发时间,节约80%以上的开发成本,提高80%以上的工作效率,对开发人员的要求大大降低。凡属本科毕业的相关专业,有一定的计算机应用基础的人,只要通过一周左右的时间,就能掌握搭建系统的使用方法,让用户从关心技术、实现细节功能,转向关心业务。着眼于专业流程分析,而不要花更多的时间投入于业务系统的编程。系统底层功能仓库能提供足够强大的功能构件,二次开发用户基于这些功能构件,就可搭建出面向专业的应用系统。这是GIS二次开发模式的重大变革,是一场革命。
图8:MapGIS7搭建系统的界面
MapGIS7三维开发平台:辅助世界特大城市管理和决策
随着我国城市规模不断扩大,城市建设由平面开发转向立体开发,打破了地质环境原有的平衡,城市地质灾害等问题日渐突出。城市的地下空间利用、地下安全、地下紧急事故处理都需要地质部门提供详细的数据资料。目前我国的城市地质灾害,主要是不了解城市地质情况造成的。有的城市进行城市规划和市政建设,不充分考虑城市地质状况,埋下了许多隐患。城市地质调查,是在城市及其周围地区或潜在城市化地区的特定空间范围内,综合考虑各种地质要素,研究其对城市发展提供的资源、施加的约束条件以及城市发展对各种地质要素产生的影响,为城市规划、大规模城市建设和城市管理提供基础数据。
世界的本原是三维的。传统的GIS将现实世界简化为平面上二维投影的概念模型,注定了它在描述三维空间现象上的局限。随着GIS应用的深入,人们越来越多地要求以真三维空间来处理问题。但三维空间是复杂的,基于三维的应用也存在着巨大的差异,以目前的研究现状和技术条件,研发通用三维GIS是不太现实的。基于以上认识, MapGIS7提供具有开放体系结构的三维处理平台 --- MapGIS7-TDE,在提供一般三维空间数据模型及管理功能的基础上,平台允许针对特定应用领域动态扩展建模及其分析功能插件,以适应特定的三维应用。
MapGIS7-TDE三维处理平台是中地数码在MapGIS7中推出的一套真三维空间数据处理开发平台。该平台本着“面向专业领域,开发主题型三维应用系统”的设计原则,同时为适应地学三维应用正在朝地表、地下信息集成,强调表达的真实感及实时性以及多维、网络化等方向发展,在MapGIS7内核模块基础上,全面整合GIS、DEM、三维景观建模、三维地质构模、可视化、三维模型显示、虚拟现实、数据库、网络通信等多方面的技术,采用先进的三维空间数据模型、构模算法、三维可视化技术及框架加插件的软件体系结构,是一个研制开发的技术起点高、算法新颖、易于扩展、可满足不同层次用户需求的三维空间信息存储、管理应用、开发的平台。目前,在平台所提供的基本框架、三维空间数据管理和渲染引擎基础上,中地公司开发了景观建模及可视化、地质建模及可视化、体数据建模及可视化、虚拟仿真显示驱动等面向具体应用领域的三维建模和可视化支撑工具,用户可根据需要自行选择配置或自己开发插件扩展平台功能。
国家863项目“上海城市地质信息系统”应用了MapGIS7对海量数据的处理能力,把上海地上地下2000米,6000平方公里的地质资料全部录入到系统,并通过三维显示、查询、分析、检索等方式,为城市规划、建设、管理、防灾减帧⒒肪持卫矸竦裙ぷ魈峁┓瘢ㄖ棵抛龊镁霾摺?刮鞘泄婊⒔ㄉ韬凸芾矸竦某鞘械刂实鞑楣ぷ鳎诠谑鞘状危诠庖参蕹墒炀椤U馐怯芍泄耸状瓮瓿傻氖澜缣卮蟪鞘械牡叵氯低辰ㄉ琛?br />
众所周知,上海地处入海河口,是由河海冲击、泥沙堆积形成的“新大陆”,建筑专家将现代上海比作“建在豆腐上的城市”。上海城市建设的加快、地面沉降和海岸冲淤等地质灾害的发生,以及2010年上海世博会选址以及大规模的地下空间开发、上海市东南部的临港新城规划实施等项目都对城市地质调查工作提出了迫切的需求。“上海市三维城市地质调查”工作于2004年4月24日率先启动,是全国第一个由国土资源部和地方政府合作开展的全国城市地质调查试点项目。通过近三年的努力,中国地质调查局于2007年2月1日在上海城市地质调查成果报告会上总结了上海城市地质调查阶段成果和三维可视化信息系统的建设。基于中地公司MapGIS7三维平台开发的“三维可视化城市地质基础信息与咨询服务系统”贯穿于整个地质调查工作中。此次总结的阶段成果和三维可视化信息系统的贡献主要包括以下五个方面:
(一)开展世博、临港新城地质调查,探索城市地质调查方法和服务社会经济建设的机制
上海世博会会址区、临港新城规划区地质调查专题于2005年4月、2006年7月通过了中国地调局与上海市房地资源局的野外验收及成果评审,成果被评定为优秀级。两个项目均利用数字化技术,建立了三维可视化地质结构模型,具有创新性。
世博会会址区地质环境调查查明了工程地质结构特征及与工程建设相关的水文地质条件,针对会址区地下空间开发特点,进行了适宜性评价;研究了会址区地面沉降对规划建设的影响,并针对防汛墙工程,布设监测点,分析会址区防汛墙沉降现状及原因,为防汛墙的改造、维护提供了可靠资料;开展了会址区环境地球化学调查,查明会址区重金属、有机污染物含量分布特征、存在形态及原因,为会址区土壤的修复提供基础数据。
临港新城规划区地质结构调查总结了规划区冲填土的物理、力学特性及在动荷载作用下的变形特征;研究了规划区内地面沉降、岸带稳定性及土壤盐渍化等地质环境问题;分析了规划区地质结构及地质灾害特征,并结合新城规划特点,进行了工程建设适宜性评价;研究成果为新城规划提供了基础依据。
(二)建立三维城市地质结构,为城市规划、土地规划与地下空间开发提供基础信息数据
在充分收集已有资料的基础上,建立了上海三维城市地质结构数据库,包括了上海市四十余年地质调查的所有钻孔和测试数据,同时补充新的数据入库,建立了地质信息的标准更新机制。数据库中包括了基岩钻孔823个,第四纪地质结构钻孔数量720个,及全市水文地质普查、各水源地水文地质详查及地面沉降调查等工作中取得的495个水文地质钻孔和相关的测试数据。系统建立了1962年以来的全市地下水位、水质及地下水开采量、回灌量与地下水动态监测信息。收集工程地质钻孔近10万个,其中40000个钻孔已建立数据库,其中控制性钻孔为3400个,全市达到1:5万调查精度,中心城区达到1:1万(即城市详细规划)精度,在规划的新城区也已按照城市总体规划阶段要求建立了相应的工程地质结构数据库。系统还建立了自1921年以来的地面沉降监测数据库,包括全市、市区地面沉降动态和分层标沉降监测信息。同时,将1995年以来的地铁、隧道、城市高架、西气东输管网、防汛墙等生命线工程沉降信息纳入数据库。
图9:上海城市地质信息管理与服务系统--实现了海量地质信息的科学管理,提供了钻孔、空间地质图信息的查询和检索等功能
(三)开展地质灾害调查与评价,提高城市安全的保障能力
对影响上海城市安全的地面沉降、海岸带冲淤等主要地质灾害进行调查评价,提出对策措施,确保城市安全。随着大规模城市建设、地下空间开发强度的增大和地下水开采的需要,地面沉降对轨道交通、防汛防涝、城市高架、重要桥梁等基础设施安全运营的影响日益显著,越来越引起政府管理部门的重视。2005年10月31日《上海市“十一五”地面沉降防治规划》要求至2007年全市平均地面沉降量控制在7毫米以内,至2010年,地面沉降量逐年递减。上海地面沉降防治取得了阶段成效。2000年全市平均地面沉降为12.3毫米,至2006年下降为7.5毫米。本次的城市地质调查工作对地面沉降防治工作推进起到了重要的技术支撑作用。例如,针对上海地区高层建筑群典型的布置方式以及不同的地层结构,进行模型试验,分析高层建筑群诱发地面沉降的规律和机理。在上海地区的区域地面沉降模型中首次实现了变系数三维地下水流模型与地面沉降模型的真正耦合。
图10:上海城市地质信息管理与服务系统--- 包括了自1962年以来的上海市地质环境监测数据,开发了地面沉降、地下水动态图形自动生成、分析评价功能
(四)系统调查了上海市地球化学环境状况
查明了上海地区土壤、地下水环境中地球化学元素的总体分布特征。对上海市6700平方公里陆域和滩涂土壤地球化学环境进行了全覆盖调查,共取样12310个,进行了54个指标化学分析测试,依据国家标准对土壤环境质量进行了初步评价,为土地规划和管理提供了重要的基础数据及科学依据。随着城市产业结构调整,市区内大量历史工业厂址被用于住宅建设开发,而大部分住宅建设用地未进行必要的调查评估工作。本次城市地质调查工作,在充分利用环境地球化学调查获得的海量数据信息基础上,结合上海市开展的创建节能省地生态型住宅建设,提出将土壤环境质量也纳入到上海市生态住宅的评价体系中,并结合部分住宅开发区建设进行了试点研究,提出生态住宅建设地球化学环境标准。
图11:上海城市地质信息管理与服务系统——根据工程规划线路,信息系统可以自动生成工程线路地质剖面图和地质数据统计,为城市规划、工程设计人员提供高效率、直观的地质工作平台
图12:上海城市地质信息管理与服务系统--根据工程规划线路(如地铁或过江隧道等),信息系统可以自动生成工程线路的三维隧道,模拟地下空间开发中的工程地质结构变化和水文地质条件,为地下空间开发规划、设计、建设及管理提供科学依据,为城市地质灾害应急反应提供技术保障
(五)建立三维可视化的城市地质信息管理平台,提高了社会服务水平
加强地质工作信息化是促进城市地质现代化工作模式形成、快速反应能力提升的重要手段,与中国地质大学合作,共同开发了三维可视化的“上海市城市地质信息管理与服务平台”。该系统在科学管理海量地质数据基础上具有地质钻孔,地质剖面的自动编辑功能,根据设定的技术参数统计查明地质环境监测信息,并初步实现了地下空间的三维可视化显示和地质过程模拟。城市地质调查项目为地质工作创造了良好的发展环境和广阔的空间,但也面临着地质调查成果展现、信息共享等方面的实际问题。因此,信息化工作对于提高地质服务社会经济发展的能力,推进城市信息共享是十分重要的平台。
初步建立了城市地质数据的综合管理平台,面向专业应用的综合分析评价,面向社会公众的信息服务,用直观的三维图形显示来代替枯燥的数据输出,借助人类强大的视觉及形象思维能力,使人们在三维图形世界中对地质数据进行本质上的分析和理解,从而获取深层次地质信息,实现地质成果表达的数字化、立体化、可视化、智能化。
上海城市地质信息管理与服务系统分为三个子系统进行开发,地质数据录导入与管理子系统、地质数据分析评价子系统、以及基于Internet的城市地质信息发布系统组成。其中地质数据录导入与管理子系统用于城市地质基础数据的录导入与管理;地质数据分析评价子系统用于数据查询统计、专业分析评价、三维地质模拟;地质数据共享与社会化服务子系统用于城市地质信息的网络发布。
图13:上海城市地质信息管理与服务系统--通过建立规划区域三维地质结构模型,按工程规划和设计需要,自动生成工程沿线的三维地质结构图,直观地分析评价工程线路地质结构、不良地质条件等情况
依托上海城市地质调查项目,对上海地质工作积累的丰富地质成果进行全面信息化。实现了上海地区地质、物探、化探、遥感及钻探等资料的一体化管理;同步整理地质钻孔、地面沉降监测数据,编制各专业地质图形空间数据库;基本建立了覆盖全市的地质信息数据库、同时,按原始资料数据、基础数据、模型数据、成果资料数据等分类原则,初步建立了分层次的数据库结构与管理系统,用户可以采用多种方式选择相关数据点进行属性查询、统计和分析。“上海城市地质数据中心”对多元的城市地质信息进行统一管理,通过城市地质网络信息平台及城市地质数据展示平台,实现地质数据共享、数据交换、数据服务。
图14:社会服务的窗口(上海城市地质信息网www.sigs.com.cn )
中地数码与上海市地质调查研究院合作开展的上海市三维可视化城市地质基础信息与咨询服务系统研发项目为中国地质调查局确定的六个试点城市(北京、上海、杭州、天津、广州、南京等)项目之一,成为试点城市项目中进展最为顺利,成效最显著的项目,项目研发情况及成果一直受到中国地质调查局、上海市房地局领导以及各试点城市有关部门的高度关注,形成了城市地质项目“全国看试点、试点看上海”的局面。
全球最全GIS解决方案的平台供应商
中地数码集团专业从事GIS的研究、开发、应用和服务,建立了以MapGIS7为品牌的系列GIS平台软件和应用软件产品超过100种,广泛应用于地矿、土地、房产、供水、排水、燃气、电信、石化、电力、林业、农业、公安、安全、交通、国防、军事、大众化等各领域。中地数码集团先后承担了几十个国家级、省部级科研项目,包括国家863项目、国家“十五”重点科技攻关项目、国家火炬计划项目、科技部中小企业创新基金项目等,完成了1000多种地理空间信息项目,积累了丰富的GIS软件研发开发和工程应用经验,可以为用户度身定做解决方案。MapGIS7在国家GIS软件测评中连续10年名列第一,囊括了中国GIS项目中30%以上的优秀工程,取得国家涉密集成和甲级资质证书,被评为国家高科技产业化基地和载人航天有功单位。
在面向服务第四代的地理系统MapGIS7的强有力的支持下,随着MapGIS7的数据中心和搭建平台的推出和应用推广,必将引起地理信息系统二次开发的革命式变革,把我们从传统的软件的开发模式解放出来,彻底地改变目前只有程序员才能进行软件开发的现状,使我们的增值开发商、合作伙伴和广大用户如虎添翼,受益匪浅,共同创造美好的GIS明天。
link: http://www.cnblogs.com/heone/archive/2008/08/29/1279189.html
author: 天下鹰
content:
1.1 使用范围
该操作适用于VS2005及以上版本。
函数调用说明
1.1.1 引用的添加
右键添加引用Excel Library,VS2005为11.0版本,VS2008为12.0版本
添加引用后会在程序的bin目录下有一个Interop.Excel.dll文件,在应用程序页面添加引用的命名空间 using Excel;
1.1.2 模板的读写方法
读模板的话,首先模板存放在某个路径下,根据模板把从数据库里取出的数据写回EXCEL然后生成一个新的EXCEL存放都另一个路径以供下载,模板不变。
//建立一个Excel.Application的新进程
Excel.Application app = new Excel.Application();
if (app == null)
{
return;
}
app.Visible = false;
app.UserControl = true;
Workbooks workbooks = app.Workbooks;
_Workbook workbook = workbooks.Add(template_path + """测试.xls");//这里的Add方法里的参数就是模板的路径 Sheets sheets = workbook.Worksheets;
_Worksheet worksheet = (_Worksheet)sheets.get_Item(1); //这里表示模板只有一个sheet表
if (worksheet == null)
{
return;
}
如果没有实际的物理模板,可以继承一个空的模板进行读写
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);//这里的Add方法里的参数就相当于继承了一个空模板
单元格的赋值如下
worksheet.Cells[i, i] = "达达集团";//表示EXCEL表的第i行第i列,对其它行列的赋值也一样
1.1.3 方法的调用
关于单元格处理的操作类在ExcelOperate.cs类文件里
设置连续单元格边框颜色
worksheet.get_Range(worksheet.Cells[i,1],worksheet.Cells[i, 14]).Borders.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);//表示第i行的第1列到14列的边框颜色为黑色,只需给定开始单元格和结束单元格
设置行高
excelOperate.SetRowHeight(worksheet, worksheet.Cells[i,1],worksheet.Cells[i, 14], 24.75);//行高设定为24.75
设置连续单元格的背景颜色
excelOperate.SetBgColor(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14], System.Drawing.Color.Silver);//设置背景颜色为银白色
设置连续单元格的字体大小
excelOperate.SetFontSize(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14],16);//字体设为16号大小
单元格字体的设置
excelOperate.SetBold(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14]);//黑体字
单元格字体颜色设置
excelOperate.SetColor(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14], System.Drawing.Color.Red); //体字颜色设为红色
单元格内容剧中显示设置
excelOperate.SetHAlignCenter(worksheet, worksheet.Cells[i,1],worksheet.Cells[i,14]);
合并单元格
worksheet.get_Range(worksheet.Cells[i,1],worksheet.Cells[i,14]).Merge(Missing.Value);//合并第i行1至14列的单元格 worksheet.get_Range (worksheet.Cells[i,1],worksheet.Cells[i,1]).Value2 = "无赖集团";//给合并后的单元格赋值,合并后的单元格为第i行的第一个单元格
(注:如果在程序中动态合并单元格,合并前必须保证各单元格的内容为空,所以一般在合并相同内容的单元格之前,先保存原有的值,清空要合并的单元格的值,然后进行合并操作再赋值即可,之所以要清空是因为我们在操作实际的EXCEL合并单元格的时候,如果各单元格有值,鼠标操作合并的时候会提示“选定区域包含多重数值。合并到一个单元格后只能保留最左上角的数据” ,点确定后单元格会保留最左上单元格的值,而程序执行过程中遇到这种情况会直接导致程序执行中断,无法正常导出)
保存生成的EXCEL文件
workbook.SaveAs(save_path, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);//save_path为要保存到的文件路径
excelOperate.Dispose(worksheet, workbook, app);//生成好EXCEL文件后关闭Excel进程
EXCEL模板中含多个sheet的操作
1. 如果模板中只包含固定的多各sheet(以2各为例),可以这样进行读写访问
_Worksheet worksheet1 = (_Worksheet)sheets.get_Item(1);//读第一个sheet
_Worksheet worksheet2 = (_Worksheet)sheets.get_Item(2);//读第二个sheet
赋值操作和上面说的类似,如下:
Worksheet1.Cells[i, i] = "赖达犯罪集团";
Worksheet2.Cells[i, i] = "赖达破坏集团";
2. 如果要在应用程序中动态生成多个sheet(以其中一个sheet为样本生成),如要按月份生成每月一个sheet,那么模板中只需包含一个sheet模板,可根据选择的月份个数在应用程序中复制相同的几个sheet即可。
for (int i = 1; i < monthCount; i++)
worksheet.Copy(Missing.Value, workbook.Worksheets[1]);//月统计工作薄,如果选择了三个月,即monthCount=3,那么就会再复制两个相同的sheet,然后进行读写操作,如下面的代码片段:
int item_id = 1;
_Worksheet ws = null;
for (int i = 0; i < tableMM.Rows.Count; i++)
{
……
if (tableMM.Rows[i]["DATE_MONTH"].ToString() == Month)
{
ws = (_Worksheet)sheets.get_Item(item_id);
ws.Cells[3 + i, 1] = rowNum;
ws.Cells[3 + i, 2] = tableMM.Rows[i]["PROJNO"];
continue;
}
……
ws.Name = "XX月份";//sheet的名称
item_id++;
}
esriRelCardinality.esriRelCardinalityOneToOne);
IDisplayRelationshipClass dispRelClass=feaLayer as IDisplayRelationshipClass ;
dispRelClass.DisplayRelationshipClass(relClass,esriJoinType.esriLeftInnerJoin);
十.统计分析
ITableHistogram tableHistogram=new BasicTableHistogramClass ();
tableHistogram.Table =((IDisplayTable)layer).DisplayTable ;
tableHistogram.Field =fieldName ;
object valueArray=null, freq=null;
IBasicHistogram basicHistogram=(IBasicHistogram)tableHistogram;
basicHistogram.GetHistogram(out valueArray,out freq);
IClassify classify=null;
int breakNum=6;
//分类方法
switch(ClassifyMethod )
{
case ClassifyMethodName.lsClassifyMethodEqualInterval:
{
EqualIntervalClass eq=new EqualIntervalClass ();
eq.Classify (valueArray,freq,ref breakNum);
classify=(IClassify)eq;
break;
}
case ClassifyMethodName.lsClassifyMethodStandardDeviation:
{
StandardDeviationClass sd=new StandardDeviationClass ();
IStatisticsResults stat= histogram as IStatisticsResults ;
classify=sd as IClassify;
classify.SetHistogramData (valueArray,freq);
IDeviationInterval di=sd as
请发表评论