本书以"北京市地理信息公众查询系统"为例,按照软件工程的思想与要求,介绍如何运用C#语言及地理信息系统二次开发组件MapObjects,进行地理信息系统(GIS)的二次开发。全书共分8章,首先概述了地理信息系统的软件工程设计方法,从第2章开始,以"北京市地理信息公众查询系统"为例,详细阐述了GIS系统的需求分析、总体设计、详细设计、主界面实现与主要功能的编码实现。本书适用于政府、企业相关部门的GIS研究开发人员,也适合作为高等院校地理学、地理信息系统、房地产、环境科学、资源与城乡规划管理、区域经济学等专业学生的GIS实习教材和参考书,以及各种GIS培训学员的教材用书。以计算机为核心的信息处理系统技术是二次世界大战后科技革命的主要标志之一。在信息的诸多类型中,与空间相关的信息是十分重要的,人类赖以生存的地球是个三维空间,其中的万物无不与空间位置相关,如何利用计算机处理空间相关信息是地理信息系统(GeoeraphiclnformationSystem,GIS)产生和发展的原动力。GIS起源于2世纪6年代,它作为有关空间数据管理、空间信息分析及其传播的计算机系统,在其4多年的发展历程中已经取得了很大成就,并广泛地应用于土地利用、资源管理、环境监测、交通运输、城市规划、经济建设以及政府各职能部门。并且随着计算机技术的不断发展,计算速度越来越快,使得地理信息系统技术应用领域越来越广泛。最近几年来,地理信息系统无论是在理论上还是应用上都处在一个飞速发展的阶段,并呈现出广阔的应用前景。"数字地球"概念的提出,更进一步推动了作为其技术支撑的GIS的发展。不管人们将21世纪称为什么世纪,GIS的广泛应用、普及必将是其一个重要的特征。今天,GIS已是一个全球拥有数十万开发人员和数十亿美元的产业。世界各国已设计出大量实用化的地理信息系统,常用的GIS软件已达4多种,比较著名的有美国环境系统研究所(ESRl)的ARC/INFO和ArcView,澳大利~GENASYS公司开发的GENAMAP,美国Clark大学GeorgePerkinsMarsh研究所的IDRISI,中国地质大学开发的MapGIS,原武汉测绘科技大学开发的GeoStar,北京大学遥感与地理信息系统研究所开发的CityStar等等。另外,随着Intemet/Intranet的迅猛发展,万维网地理信息系统(WebGIS)软件也开始走向市场,国内的产品主要有成都华好网景科技有限公司的OKMap、武汉测绘科技大学开发的IntemetGeoStar(GeoSurf),国家遥感应用工程技术研究中心网络与运行工程部开发的地网GeoBeans。虽然GIS软件产品繁多,但是由于GIS软件具有专业性强的特点,它们不可能解决所有的问题,因此,针对某些具体问题,还必须由用户进行二次开发才能解决。正是出于这种需求,各大GIS厂商在推出基础地理信息系统平台的同时,一般都提供专门的语言与二次开发组件便于用户进行二次开发,例如Maplnfo公司的MapBasic、MapX,ESRI公司的AVENUE、MapObjiects,以及RSI公司的IDL、IDLDrawWidget等。我国在这方面主要有北京超图地理信息技术有限公司的SuperMap。虽然目前介绍这方面知识的书籍逐渐开始多起来,但都只是零散地介绍各种组件的功能,至今国内市场上还没有介绍如何利用某一地理信息系统二次开发组件来实现一个功能相对齐全并且实用的系统。这正是本书编写的目的。本书按照软件工程技术的要求,以"北京市地理信息公众查询系统"为例,介绍了如何利用C#语言以及地理信息系统二次开发组件Mapo均ects,进行地理信息系统的二次开发,包括系统的需求分析、总体设计、详细设计、主界面实现与主要功能的编码实现等几部分内容。第1章"地理信息系统软件工程"讲述了软件工程技术在GIS系统开发中的几个应用方面,包括需求分析、数据管理设计、用户界面设计、设计模式在GIS软件开发中的应用。在GIS开发过程中应用软件工程技术,可以提高软件开发效率和质量。第2章"需求分析"介绍了"北京市地理信息公众查询系统"的需求分析,包括需求概述、功能需求以及功能需求详细描述。第3章"系统总体设计"介绍了系统平台选择、系统总体框架、系统数据组织及系统开发进度安排等。第4章"系统详细设计"根据系统的总体设计结构分别从北京市地理信息公众查询系统的数据库设计和一些相关类的设计两方面来详细阐述GIS系统的设计。第5章"系统主界面的实现"首先简单介绍MapObjects的功能、特点、结构及其数据源,然后介绍如何设计系统的主界面及主要实现代码。第6章"选择与查询功能的实现"主要介绍如何通过查询与数据集有关的表从数据中获取信息,以及如何通过空间和逻辑的查询方法从数据中获取信息。第7章"系统其他辅助功能"介绍了系统中其他一些辅助功能的实现,例如当鼠标移动到某地物上并稍做停留后,出现一个小标签,显示该地物的名称,以及距离量算、面积量算的实现,等等。为了让读者更加全面地掌握MapObiects的开发,第8章介绍了"北京市地理信息公众查询系统"开发过程中没有涉及到的一些对象,包括投影对象、地址匹配对象、动态跟踪层(TrackingLayer)对象与地理事件(GeoEvent)对象。科海网站提供了本书涉及的所有源代码,以及实现书中内容所需的所有组件。读者可以从www.khp.com.cn中下载这些资料。由于时间仓促,书中难免有一些错误、遗漏,恳请读者谅解,并提出批评和指正。