当前位置:文档之家› 开发GIS应用简明教程

开发GIS应用简明教程

开发GIS应用简明教程
开发GIS应用简明教程

开发GIS应用简明教程

关于C#开发GIS应用简明教程的说明

Web上的GIS,我个人觉得C#+MAPX并不是一个好的解决办法,因为有许多的GIS工具更适合于WEB环境和C#语言,只是我自己在这方面也没什么研究。所以只能对大家说抱歉了。

第一章准备

使用C#开发GIS应用,你应该首先在系统中安装Visual Studio .Net(建议使用2003版本),然后还需要安装MapInfo公司开发的MapX 5.0版本.MapX

的4.X版本和.Net的兼容有一些问题.可能无法实现本教程介绍的某些功能.

另外,你还应该尽可能地收集所有关于.NET,C#和MapX有关的资料,教程非常实用,专门解决技术问题,而不打算列举资料,所以,最好手头上有一些

备查的资料.如果实在找不到,最起码要求能看懂MSDN.Met和MapX的帮助.

关于.Net的安装很多教程都有涉及,此处不再赘述

MapX 5.0的安装很容易,按照提示一步步就可以安装,和一般的软件安装没什么区别,安装完控件以后千万别忘了同时安装附带的地图数据.

安装好以上软件后,还需要在.Net编程环境中加入MapX 5.0控件.

在.Net编程环境中新建一个WindeosApplication(Windows应用程序)项目,然后在菜单中选择”项目/添加引用”,打开如下图的窗口,在窗口中选

择COM标签,在组件名称列表中双击MapInfo MapX V5.单击"确认"按钮,即可将Map5控件加入到.Net的工具箱中.

现在,所有的准备工作都已经完成了,为了测试安装是否正确,我们做个简单的地图放大程序.

在刚刚打开的项目中,从工具栏中选择Mapinfo MapX V5控件,把它画到项目中的Form1窗口上,如下图:

增加一个Button控件button1,将它的Text属性改为”放大”,如下图:

在设计窗口中双击按钮并编写代码如下:

private void button1_Click(object sender, System.EventArgs e)

{

axMap1.CurrentTool=MapXLib.ToolConstants.m iZoom InTool;

}

编译,运行程序.如果没有什么错误的话,准备工作就已经完成了.

练习:1. 完成应用程序,在窗口中实现放大,缩小,漫游功能.

2. 熟悉MapInfo MapX中的GeoSet Manager程序.

3. 了解GIS的有关知识.(推荐到"程序员资源大联盟"网站查看相关版块的内容.

第二章入门

1.工具(ToolConstants)

在上一章里我们试着做了一个将地图放大的应用程序.在这章里,我们将接触到更多的工具,并介绍自定义工具.

MapX为开发人员提供一系列的工具,这些工具的作用各有不同,我们通过开发一个应用程序来了解这些工具的作用,至于这些工具的具体说明,可

以在MapX的帮助文档中,通过查找"Available Standard Tools" 看到相应的解释.一些MapX的相关资料也有介绍.

在.Net编程环境中新建一个C#的WindeosApplication(Windows应用程序)项目,然后在菜单中选择”项目/添加引用”,打开如下图的窗口,在窗口

中选择COM标签,在组件名称列表中双击MapInfo MapX V5.单击"确认"按钮,将Map5控件加入到.Net的工具箱中.

接着,将MapInfo MapX V5 控件画到窗体上,再在窗体上画一个Com boBox控件com boBox1.如下图:

双击设计窗体,编写Form1_Load代码如下:

private void Form1_Load(object sender, System.EventArgs e)

{

ArrayList ToolsList=new ArrayList();

ToolsList.Add(MapXLib.ToolConstants.m iArrowTool);

ToolsList.Add(MapXLib.ToolConstants.m iCenterTool);

ToolsList.Add(MapXLib.ToolConstants.m iLabelTool);

ToolsList.Add(MapXLib.ToolConstants.m iPanTool);

ToolsList.Add(MapXLib.ToolConstants.m iPolygonSelectTool);

ToolsList.Add(MapXLib.ToolConstants.m iRadiusSelectTool);

ToolsList.Add(MapXLib.ToolConstants.m iSym bolTool);

ToolsList.Add(MapXLib.ToolConstants.m iTextTool);

ToolsList.Add(MapXLib.ToolConstants.m iZoom InTool);

ToolsList.Add(MapXLib.ToolConstants.m iZoom OutTool);

com boBox1.DataSource=ToolsList;

}

以上代码通过一个数组ToolsList,将MapXLib的工具加入到com boBox1中.MapX还有一些其它的工具,它们的作用是往地图上加上点,线,多边型和

圆.因为这些工具要求有操作图层,一并在介绍图层的时候介绍.关于ArrayList的用法,请参考C#的有关资料.

接着,双击com boBox1,并编写代码如下

private void com boBox1_SelectedIndexChanged(object sender, System.EventArgs e) {

axMap1.CurrentTool=(MapXLib.ToolConstants)com boBox1.SelectedItem;

}

应注意,在C#中必须要显式地把com boBox1的选择项目SelectedItem(数据类型为object)转换为MapXLib.ToolConstants.因为ToolConstants是

MapX自己定义的一个枚举数据类型,C#不能自动完成这种枚举成员变量到object的数据转换.

编译执行程序,从com boBox1中选择不同的工具,在地图上进行操作,你可以了解到MapX工具集的强大功能.

实际上,MapX提供的工具集就好像Photoshop,AutoCAD的工具栏一样,为你提供了一些控制地图的工具.但是,在开发GIS的时候,这些工具是不能完

全满足要求的.所以,还应该学会自定义工具.

下面,通过一个在地图上测距的例子,来介绍一下如何在C#下自定义MapX工具

如前所述建立一个C#的Windows应用程序并将Mapinfo MapX V5 控件加到窗体上.并加入一个Button控件button1.将button1的Tex t属性改为"测

距",再在窗口中放上两个Label控件label1,label2,将它们的Tex t属性设置为""空字符串,如下图: 双击设计窗体,编写Form1_Load代码如下:

private void Form1_Load(object sender, System.EventArgs e)

{

axMap1.CreateCustom Tool(100,MapXLib.Tool TypeConstants.m iToolTypePol y, MapXLib.CursorConstants.m iCrossCursor,null,null,null);

}

在加载窗口的时候,我们定义了一个工具.它的编号是100(不要和MapX本身的工具编号重复),它的类型是一个多义线,采用十字光标.

关于此函数的用法,建议查看MapX的开发手册和相关资料.

现在我们定义了一个编号为100的工具,可以在程序中使用它了.双击设计窗体中的button1,编写它的Click事件处理代码如下:

private void button1_Click(object sender, System.EventArgs e){

axMap1.CurrentTool=(MapXLib.ToolConstants)100;

}

现在编译运行,单击button1,就可以在地图上使用这个工具了.但是还有一部分重要的代码没有完成:测距!

完成测距功能的代码在C#使用MapX开发GIS中非常具有代表性,也比较有难度.我在首次使用

C#+MapX开发GIS的时候,被这个问题困扰了很久.项目

经理也来研究,过两天说有结果了,但他给出的例子根本就行不通.当然,会了就不难了.其实,也很简单. 首先,在窗口类中声明两个私有全局变量以保存测出的距离和总距,注意声明代码的位置:

public class Form1 : System.Windows.Form s.Form

{private AxMapXLib.AxMap axMap1;

private System.Windows.Form s.Button button1;

private System.Windows.Form https://www.doczj.com/doc/0115568045.html,bel label1;

private System.Windows.Form https://www.doczj.com/doc/0115568045.html,bel label2;

///

/// 必需的设计器变量。

///

private https://www.doczj.com/doc/0115568045.html, ponentModel.Container com ponents = null;

private double Dis=0,DisSum=0;

现在来编写工具的事件.注意,在MapX画多义线的时候,它触发消息的方式和一般的工具是不同的,首先,它并不是用鼠标一点击就完成了的,还可

以继续画下去,所以,不应该在MapX控件的ToolUsed事件中编写,而应该在PolyToolUsed事件中实现测距.代码如下:

private void axMap1_PolyToolUsed(object sender,

AxMapXLib.CMapXEvents_PolyToolUsedEvent e){

MapXLib.PointsClass pts=new MapXLib.PointsClass();

swi tch(e.flags)

{

case (int)MapXLib.ToolFlagConstants.m iToolInProgress:

pts=(MapXLib.PointsClass)e.points;

Dis=axMap1.Distance(pts._Item(pts.Count-1).X,

pts._Item(pts.Count-1).Y,

pts._Item(pts.Count).X,

pts._Item(pts.Count).Y);

DisSum+=Dis;

break;

defaul t:

Dis=0;

DisSum=0;

break;

}

label1.Tex t="距离:"+Dis.ToString("#.00");

label2.Tex t="总距"+DisSum.ToString("#.00");

}

这段代码虽短.但要注意的地方很多.

首先,定义一个MapXLib.PointsClass类型的变量pts,注意,是PointsClass,不是PointClass.前者是点集,后者是点.为什么要增加那么一个变量

呢?因为MapX的PolyToolUsed事件的返回参数e的成员points不是MapXLib.PointsClass类型,而是object.类型.所以需要这么一个变量来转换它,

当然,你也可以在程序使用pts的地方直接使用(MapXLib.PointsClass)e.points,但那样一来程序就比较难懂了;

其次,要判断事件的标识e.flags的值,它指出工具当前的状态,是刚开始画多义线呢,还是正在画多义线,或者已经结束了,或者结束退出.我们只

要在画的时候测距就可以了.其它时候将距离和总距都设置为0;

接着,还要注意的是e.points的点数据保存方式,e.points首先是一个object,当在画多义线的时候,它被初试化为一个MapXLib.PointsClass的变

量,并以二维数组的方式保存点集.这个数组是从1开始的,而不是从0开始的.它保存了多义线上每个转折点的坐标,鼠标每点一下,就增加一个新

的数据到点集,我们计算最后一条直线长度,应该从这个数组的末尾往前取.计算好距离以后再加入到总距中.许多测距的程序例子都要做一个循

环,其实是不必要的.

最后,请注意数字转换到字符串的格式问题.在这个例子中我们保留两位小数.

补充一点,因为没有设置地图的地理坐标系统,所以测出来的距离单位是英里,如果要改为公里,把MapX控件的MapUnit属性改为m iUnitKilom eter

就可以了.要提高测量精度,除了可以通过转换格式的时候增加小数位,还应该注意到地图的测绘精度.否则,再多的小数位也是没有意义的.

练习

1.建立一个应用程序,加入MapX控件和一个Com boBox控件,两个:Label控件,在Com boBox中加入第一个例子中的所有工具和测距工具,在Com boBox

中选择测距工具时实现测距功能.

2.将测距工具的光标改成箭头光标.并以米为单位显示测距数据.

2.图层和图元(Layers and Features)

有关图层和图元的概念,请参照相关资料.

图层的应用分为几个方面,我们分别加以介绍.

1)图层的创建:

创建永久图层:

在C#中,使用以下方法创建永久图层:

https://www.doczj.com/doc/0115568045.html,yer lyr;

lyr=https://www.doczj.com/doc/0115568045.html,yers.CreateLayer("MyLayer","D:\\MapTest\\MyLayer.Tab",0,32,axMap1. DisplayCoordSys);

当执行这两句程序时,在指定的路径生成了一系列文件.它们是:

MyLayer.Dat:图层的数据文件,它保存的是图层的数据库数据;

MyLayer.ID:图层数据的唯一的,自动生成的编码,用以区分不同的图元;

MyLayer.IND:图层数据的索引文件,以实现图层上图元的快速查找;

MyLaer.MAP:图层上图元的图形数据;

MyLaer.TAB:这是一个文本文件,它的作用是将图层的有关信息保存起来,供GST地图文件或其它程序调用图层.

用记事本打开MyLayer.TAB文件,看到如下内容:

!table

!version 450

!charset WindowsSim pChinese

Definition Table

Description "MyLayer"

Type Native charset "WindowsSim pChinese"

Fields 1

GEONAME char (32) Index 1 ;

第一行总是"!table",说明这是一个图层表的文件;

第二行指出图层文件的版本号,MapInfo MapX 5.0生成的图层版本号是450;

第三行指出生成图层的操作系统;

接着是对图层的定义段:

首先指出图层的描述,就是我们上面程序代码中的"Mylayer".

接着说明了字符集类型是简体中文;

然后指出表格中只有一个字段,这个字段的名称是"GEONAME",是长度为32的字符类型字段,在表中的列索引为1.

2)添加现有的图层:

添加现有图层的方法和一般的程序语言没有很大的区别,我们在当前图层上添加刚才创建的永久图层,程序代码如下:

https://www.doczj.com/doc/0115568045.html,yerInfo li;

li=new https://www.doczj.com/doc/0115568045.html,yerInfoClass();

li.Type=https://www.doczj.com/doc/0115568045.html,yerInfoTypeConstants.m iLayerInfoType Tab;

li.AddParam eter("FileSpec","D:\\MapTest\\MyLayer.tab");

li.AddParam eter("Visible",false);

li.AddParam eter("AutoCreateDataset",true);

li.AddParam eter("DatasetNam e","MyLayer");

https://www.doczj.com/doc/0115568045.html,yers.Add(li,0);

https://www.doczj.com/doc/0115568045.html,yersDlg("","");

axMap1.SaveMapAsGeoset("测试","D:\\MapTest\\MyMap.GST");

在程序的最后,我们显示了图层信息对话框,以观察图层是否已经添加到当前的地图中.可以看到,地图中添加了我们创建的图层"MyLayer".放在

第0层.

然后,将地图保存在一个MyMap.GST的地图文件中,这个地图的标题是"测试".

3)移除图层:

好,接着我们上面做的工作,将工程的axMap1的GeoSet属性设置为刚刚生成的地图文件:

"D:\MapTest\MyMap.GST".现在我们将MyLayer从地图中

移除.

添加一个按钮,在按钮的Click事件中编写如下代码:

https://www.doczj.com/doc/0115568045.html,yersDlg("","");

https://www.doczj.com/doc/0115568045.html,yers.Rem ove(1);

https://www.doczj.com/doc/0115568045.html,yersDlg("","");

我们使用两次显示图层对话框的方式查看程序的效果,应该注意的是在Rem ove第0层的时候使用的是Rem ove(1),如果不清楚图层的位置,就要作一

个循环,将图层的位置取出来再移除,如下:

int lyrind=0;

https://www.doczj.com/doc/0115568045.html,yersDlg("","");

for( int i=1;i

{

if (https://www.doczj.com/doc/0115568045.html,yers[i]._Nam e.Trim()=="MyLayer")

{

lyrind=i;

break;

}

}

https://www.doczj.com/doc/0115568045.html,yers.Rem ove(lyrind);

https://www.doczj.com/doc/0115568045.html,yersDlg("","");

移除操作只在内存中进行,也就是说,程序并不删除任何文件,也没有将图层真正地从地图集合中去掉,当程序重新启动的时候,MyLayer图层仍然

在地图中.

3)移除所有图层:

使用https://www.doczj.com/doc/0115568045.html,yers.Rem oveAll();就可以移除所有图层,用法和Rem ove相似.

4)图层定位:

和其它编程语言一样,使用axMap1.Move(1,2)函数就可以将图层的位置改变.

5)创建临时图层

临时图层和永久图层不同,它只存放在内存中,当关闭程序以后该图层将不存在.

在这里我们将使用LayerInfo对象来创建临时图层,这和传统的MAPX程序相近,但是引入了C#编程的一些特色:

https://www.doczj.com/doc/0115568045.html,yerInfoClass li=new https://www.doczj.com/doc/0115568045.html,yerInfoClass();

MapXLib.Features ftrs=null;

MapXLib.FieldsClass flds=new MapXLib.FieldsClass();

MapXLib.Fields Myflds=null;

MapXLib.Dataset dts=null;

flds.Add("State","State_Nam e",

MapXLib.AggregationFunctionConstants.m iAggregationSum,

MapXLib.FieldTypeConstants.m iTypeString);

dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.m iDataSetLayer,

https://www.doczj.com/doc/0115568045.html,yers._Item(1),"MyLayer",0,0,0,flds,false);

Myflds=dts.Fields;

ftrs=https://www.doczj.com/doc/0115568045.html,yers._Item("USA").Selection.Clone();

li.Type=https://www.doczj.com/doc/0115568045.html,yerInfoTypeConstants.m iLayerInfoType Tem p;

li.AddParam eter("Nam e","USA Tem p Layer");

li.AddParam eter("Fields",Myflds);

li.AddParam eter("Features",ftrs);

https://www.doczj.com/doc/0115568045.html,yers.Add(li,1);

https://www.doczj.com/doc/0115568045.html,yersDlg("","");

这段程序有两个关键的地方:

一个是在C#中DataSets.Add的用法,在许多编程语言中,都可以使用空的参数或者干脆不用参数来调用这个函数,但是在C#中是不行的,必须8个参

数全部指定.而且,还应该事先初始化Fields参数.这个函数的使用涉及到许多方面的知识,包括对MAPX相关概念的理解和C#编程的认识,是一个很

重要,也比较难掌握的技术.后面的章节中我们还会作进一步的探讨.

另一个是li.AddParam eter和li.Type的配合使用问题,这在许多的MAPX书籍中都有论述,此处不再重复.

以上程序最好能自己多琢磨琢磨.才能更好地掌握C#开发GIS的要领.

6)缩放图层:

所谓的缩放图层,并不是指将单个图层缩放.而是指定图层的可见范围比例,例如,设置一个图层在缩小显示大于5英里的时候隐藏.小于5英里的时

候显示.和其它编程语言一样,只要设置Layer的Zoom Min和Zoom Max就可以了.

7)显示整个图层:

这里要提及的一个技巧是在C#下面怎样显示整个图层.众所周知,在VB下面只要:

Map1.Bounds = https://www.doczj.com/doc/0115568045.html,yers("USA").Bounds

一句程序就可以轻松实现.但是要是在C#中这样写的话,百分百会出错.其实,这里有一个小小的技巧,聪明的你一定能看出来:

axMap1.CtlBounds=https://www.doczj.com/doc/0115568045.html,yers._Item("USA").Bounds;

8)在图层上绘制永久图形:

我们在介绍工具的时候,有一些工具没有介绍,这些工具其实是用来在图层上创建永久图形对象的(图元).当在图层上绘制了图形以后,这些图形

将以数据记录的形式保存在图层表中,也就是创建了一个图元.如果不想保存图元,可以在临时图层里绘制.

https://www.doczj.com/doc/0115568045.html,yers._Item("USA Tem p Layer").Editable=true;

https://www.doczj.com/doc/0115568045.html,yers.InsertionLayer=https://www.doczj.com/doc/0115568045.html,yers._Item("USA Tem p Layer");

axMap1.CurrentTool=MapXLib.ToolConstants.m iAddLineTool;

上面的程序使用了画线的工具,在地图上拖动鼠标就可以在临时图层上画线了.这些工具使用的前提是必须指定axMap1的插入图层

(InsertionLayer).才能在图层表中插入数据.

关于图层的关键技术就介绍到这里,掌握了这些技术以后,在作进一步的研究时,例如动画图层和绘制图层的开发,遇到的困难应该不大.

下面我们介绍C#对MAPX图元的编程技术.

9)在图层上创建图元:

根据MAP Info提供的MapX 5.0开发手册,创建图元有两种方法,用两段代码说明这两种代码在C#的实现方法:

第一种实现方法:直接使用Feature类创建图元

MapXLib.Style sty=new MapXLib.StyleClass();

MapXLib.Feature ftr=new MapXLib.FeatureClass();

ftr.Attach(axMap1.GetOcx());

ftr.Type=MapXLib.Feature TypeConstants.m iFeature Type Tex t;

sty.TextFontColor=255;

sty.TextFont.Size=12;

ftr.Style=sty;

ftr.Caption="New Feature";

ftr.Point.Set(axMap1.CenterX,axMap1.CenterY);

https://www.doczj.com/doc/0115568045.html,yers._Item("US Top 20 Cities").Style=sty;

ftr=https://www.doczj.com/doc/0115568045.html,yers._Item("US Top 20 Cities").AddFeature(ftr,new

MapXLib.RowValuesClass());

ftr.Update(ftr,new MapXLib.RowValuesClass());

有几个要注意的地方:

ftr.Attach(axMap1.GetOcx());

如果在VB6下,这句程序应该是这样的:

ftr.Attach Map1

从这里可以看到在C#中因为严格的类型管理所带来的一些变化.如果不进行GetOcx()的转换,即使在https://www.doczj.com/doc/0115568045.html,下也是错误的.

ftr=https://www.doczj.com/doc/0115568045.html,yers._Item("US Top 20 Cities").AddFeature(ftr,new

MapXLib.RowValuesClass());

我们在这个程序中加入了一行空的数据,这也就代表着我们加入的图元不包含任何数据信息.这是为了在介绍图元的时候方便大家掌握,并不意味

着这样增加图元就不能将数据保存进去,实际上,通过设置一个新的RowValues变量,是可以将数据信息保存到图元中的.我们将在后面的章节中介

绍如何将数据保存在图元中.

ftr.Update(ftr,new MapXLib.RowValuesClass());

这句程序的作用是将创建的图元保存到图层表中,这种保存是永久保存的.除非是在临时图层上增加

的图元,否则下次打开地图文件的时候,将看

到创建的图元仍然保留在地图上.因此,在对图元操作之前请备份好地图文件,避免不必要的损失.

另外,关于图元的类型(Type)和风格(Style),应该和其所在的图层相对应,比如上面程序中关于Type 和Style的设置,都是和"US Top 20 Cities"

图层的类型对应的.有关类型和风格的设置,请查阅相关手册.

第二种实现方法:使用FeatureFactory创建图元

MapXLib.Feature ftr=new MapXLib.FeatureClass();

MapXLib.Point p=new MapXLib.PointClass();

p.Set(axMap1.CenterX,axMap1.CenterY);

ftr=https://www.doczj.com/doc/0115568045.html,yers._Item("US Top 20

Cities").AddFeature(axMap1.FeatureFactory.Create Tex t

(p,"New Feature",MapXLib.PositionConstants.m iPositionCC,

new MapXLib.StyleClass()),

new MapXLib.RowV aluesClass());

这段代码和上面和第一种实现方法类似,我们在这里不再设置图元的Type和Style. FeatureFactory类似于设计模式中的Factory模式,从它可以产生各种类型的图元,这个过程相当于设置了图元的Type.

10)查找图元:

查找图元是很简单的,可以用下边的代码实现:

MapXLib.FindFeature fRes=null;

fRes=https://www.doczj.com/doc/0115568045.html,yers._Item("US Top 20 Ci ties").Find.Search("New York","");

axMap1.CenterX=fRes.CenterX;

axMap1.CenterY=fRes.CenterY;

上面这段代码将找到的图元放置在地图中央.这里要注意的是不能使用

MapXLib.FindFeature fRes=new MapXLib.FindFeatureClass();

来创建FindFeature对象,否则将会出错:

"带有CLSID {436052C3-43E3-11D0-83EB-00AA00BD34FC}的COM对象无效或未注册。"这是MapX 5.0的一个Bug.要避开它,只要在创建对象的时候

赋null值就可以了.

下面我们对程序作一些改进,来避免找不到图元的时候出错,并在找到图元以后选择该图元: MapXLib.FindFeature fRes=null;

fRes=https://www.doczj.com/doc/0115568045.html,yers._Item("US Top 20 Ci ties").Find.Search("New York","");

if (fRes.FindRC % 10 ==1)

{

axMap1.CenterX=fRes.CenterX;

axMap1.CenterY=fRes.CenterY;

https://www.doczj.com/doc/0115568045.html,yers._Item("US Top 20 Ci ties").Selection.Add(fRes);

}

11)图元的修改:

图元的增加,修改和删除都是非事务性的,也就是说,所作的修改都永久性地对图层表数据产生影响.这可以使用户对多个图元进行操作后一次更

新地图,但是在更新之前并不能看到更新后的效果.我们在使用第一种方法创建图元的时候,在最后更

新:

ftr.Update(ftr,new MapXLib.RowValuesClass());

但是在FeatureFacory创建图元的时候是不用Update的,因为FeatureFactory的相关方法中已经包含了Update.根据MapX 5.0的开发手册介绍,修

改了某个图元并更新时应使用Feature.Update方法,当使用其它图元取代某个图元,应使用Layers.UpdateFeature方法.

12)图元的删除:

和其它编程语言一样,删除图元使用DeleteFeature方法,有关介绍请参看MapX的联机帮助和开发手册.

练习:

1.结合以上例子,并参考相关资料,在地图上建立一个临时图层,并在该图层上加入图标类型(.bm p文件)的图元.

2.自定义一个工具,使用该工具删除图元.

注意: 在对图元操作之前请备份好地图文件,避免不必要的损失.

第三章数据处理

在介绍数据处理之前,我们先在MapInfo中生成自己的地图,在本章中将全部使用自己生成的地图.这是因为MapX本身提供的地图和实际应用的地

图在数据结构上有较大的差异.不适合用来介绍MapX的数据处理.

首先安装好MapInfo,最好能使用7.0以上的版本.以下操作在MapInfo Professional 7.0版本下完成.

打开MapInfo,界面如下图:

单击工具栏最左边的按钮,新建一个图层数据表.如下图在"New Table"窗口中按照上图选择后单击"Create..."按钮,建立一个新的数据图

层.MapInfo会弹出一个窗口,如下图:

在这个窗口中设置好数据表的字段属性.单击"Add Field"按钮将字段添加到表中,我们在这里将添加4个字段:ID,名称,月供年限和水电费.设置

好的字段如下图:

设置好以后,单击"Create..."按钮,MapInfo将询问建立图层表的文件路径.将你的图层表文件名改为"HouseLayer.Tab",存放到合适的路径下.例

如:" E:\Test\DataMap\".

保存完毕以后,得到一个空白的图层表文件,MapInfo打开了这个文件显示如下:

这个图层表上现在还没有任何图形,我们在图层上增加两个图元,并把数据添加上去.

在Drawing工具条上选择画矩形的工具,在HouseLayer Map上画一个矩形,然后使用拷贝粘贴的功能将其复制为另一个矩形.

选择图元后,对两个图元稍做修饰.如下图:

现在,简单的作图就完成了.

接着输入和图形相关的数据.选择如下图指示的按钮,在图层上点选图元,打开输入数据的窗口.

在输入数据的窗口中输入以下两条数据:

ID 名称月供年限水电费

0001 A栋25 18.77

0002 B栋30 25.12

保存图层.MapInfo的画图工作就完成了.

你还需要在MapX 5.0自带的工具Geoset Manager里把刚刚画好的图层放到一个地图文件(.GST 格式)里,才能被MapX调用,我们把这个文件命名为"

小区.GST".

好,准备工作就绪,现在我们开始介绍MapX的数据处理.

1.数据读取 (Data Reading)

先对程序的功能作一些说明:把小区地图放在MapX控件上,并且在窗口的左边放置一个ListView,在这个ListView中显示所有的HouseLayer图层表

中的图元数据.

和以往不同的是,我们的程序界面做了一些改动,以跟踪数据的变化.

下图是窗口设计界面:

可以看到,我们在窗口左边放置了一个ListView控件,并在ListView中增加了4列(Colum ns)来显示数据.同时,把MapX控件的地图换成了我们自己

制作的"小区"地图.

在button1的单击事件button1_Click中编写如下代码:

MapXLib.Fields flds=new MapXLib.FieldsClass();

https://www.doczj.com/doc/0115568045.html,yer lyr=https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer");

MapXLib.Dataset dts=null;

flds.Add("ID","ID",MapXLib.AggregationFunctionConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeString);

flds.Add("名称","名称",MapXLib.AggregationFuncti onConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeString);

flds.Add("月供年限","月供年限

",MapXLib.AggregationFunctionConstants.m iAggregationSum,

MapXLib.FieldTypeConstants.m iTypeInteger);

flds.Add("水电费","水电费",MapXLib.AggregationFunctionConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeFloat);

dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.m iDataSetLayer,lyr,lyr.Nam e,0,0,0,flds,false);

listView1.Item s.Clear();

for(int i=1;i<=dts.RowCount;i++)

{

listView1.Item s.Add( new ListViewItem(new string[]{dts[i,1].ToString(),

dts[i,2].ToString(),

dts[i,3].ToString(),

dts[i,4].ToString()}));

}

axMap1.DataSets.Rem oveAll();

代码依旧很短,是对以前所介绍知识的进一步深化.这里要注意的是对dts的应用.运行程序,可以看到程序把所有的图元数据都正确地读取出来了

.

在程序末尾,我们将MapX控件中的DataSets全部移除,这是为了以后再使用DataSets方便. 2.添加数据(Data Adding)

在图层表上添加数据实际上就是添加图元,只不过这个图元是带有数据信息的.

仍然使用读取数据的例子,我们在窗口上增加一个按钮button2,编写它的单击事件代码

button2_Click如下:

MapXLib.Feature ftr=new MapXLib.FeatureClass();

MapXLib.Points pts=new MapXLib.PointsClass();

MapXLib.Point pt=new MapXLib.PointClass();

MapXLib.RowValues rvs=new MapXLib.RowV aluesClass();

MapXLib.Fields flds=new MapXLib.FieldsClass();

https://www.doczj.com/doc/0115568045.html,yer lyr=https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer");

MapXLib.Dataset dts=null;

flds.Add("ID","ID",MapXLib.AggregationFunctionConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeString);

flds.Add("名称","名称",MapXLib.AggregationFuncti onConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeString);

flds.Add("月供年限","月供年限

",MapXLib.AggregationFunctionConstants.m iAggregationSum,

MapXLib.FieldTypeConstants.m iTypeInteger);

flds.Add("水电费","水电费",MapXLib.AggregationFunctionConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeFloat);

dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.m iDataSetLayer,lyr,lyr.Nam e,0,0,0,flds,false);

rvs=dts.get_RowValues(0);

rvs._Item("ID").Value="0003";

rvs._Item("名称").Value="C栋";

rvs._Item("月供年限").Value=20;

rvs._Item("水电费").Value=21.73;

ftr.Attach(axMap1.GetOcx());

ftr.Style=https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer").Style;

ftr.Style.RegionPattern=MapXLib.FillPatternConstants.m iPatternSolid;

ftr.Style.RegionColor=16711680;

ftr.Type=MapXLib.Feature TypeConstants.m iFeature TypeRegion;

pt.Set(1,1);

pts.Add(pt,1);

pt.Set(2,1);

pts.Add(pt,2);

pt.Set(2,2);

pts.Add(pt,3);

pt.Set(1,2);

pts.Add(pt,4);

ftr=axMap1.FeatureFactory.CreateRegion(pts,ftr.Style);

ftr=https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer").AddFeature(ftr,rvs);

ftr.Update(ftr,rvs);

axMap1.DataSets.Rem oveAll();

在上面的程序中我们实现了将一个新的图元加入到图层表中,这个图元的数据信息如下表:

ID 名称月供年限水电费

0003 C栋20 21.73

应该要注意的是我们首先还是使用了DataSets.Add将数据读出来,再使用get_RowValues得到行数据结构,然后才是对行数据的赋值.

运行程序,单击button1,可以看到左边的ListView中只有两条记录,再单击button2,看到图层上增加了一个蓝色的矩形图元,这就是我们增加的带

数据的图元,再单击button1,可以看到新增图元的数据信息出现在左边的ListView中.

3.修改数据(Data Modifying)

现在,要在窗口中添加另一个按钮button3了.这个按钮要实现的功能是将"A栋"的名称改成"A1栋".也就是说,我们要对A栋的数据进行修改.这个

按钮的代码如下:

MapXLib.FindFeature ftrRes=null;

MapXLib.Points pts=new MapXLib.PointsClass();

MapXLib.Point pt=new MapXLib.PointClass();

MapXLib.RowValues rvs=new MapXLib.RowV aluesClass();

MapXLib.Fields flds=new MapXLib.FieldsClass();

https://www.doczj.com/doc/0115568045.html,yer lyr=https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer");

MapXLib.Dataset dts=null;

ftrRes=https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer").Find.Search("0001","");

if (ftrRes.FindRC % 10==1)

{

flds.Add("ID","ID",MapXLib.AggregationFunctionConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeString);

flds.Add("名称","名称",MapXLib.AggregationFuncti onConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeString);

flds.Add("月供年限","月供年限

",MapXLib.AggregationFunctionConstants.m iAggregationSum,

MapXLib.FieldTypeConstants.m iTypeInteger);

flds.Add("水电费","水电费",MapXLib.AggregationFunctionConstants.m iAggregationSum, MapXLib.FieldTypeConstants.m iTypeFloat);

dts=axMap1.DataSets.Add(MapXLib.DatasetTypeConstants.m iDataSetLayer,lyr,lyr.Nam e,0,0,0,flds,false);for (int

i=0;i

{

if (dts.get_V alue(i,"ID").ToString().Trim()=="0001")

{

rvs=dts.get_RowValues(i);

rvs._Item("名称").Value="A1栋";

ftrRes.Update(ftrRes,rvs);

break;

}

}

axMap1.DataSets.Rem oveAll();

}

可以看到,我们使用了前面章节所介绍的查找图元的技术.然而在给行数据赋值的时候仍然不得不在

数据集中进行循环,以取得其它行数据,实际

上,如果通过控件(例如DataGrid或ListView)取到了图元的数据,是不必进行这样的循环的,直接对RowValue的所有字段都进行赋值就可以了.

4.删除数据(Data Deletion)

删除数据其实就是删除图元,只要找到图元,直接删除就可以了.但是要注意的是,因为图元包含了数据,所以在删除数据以后还要紧缩表.好在紧

缩表也十分简单.

仍然使用我们前面的例子,加一个button4,在它的单击事件中编写代码如下:

MapXLib.FindFeature ftrRes=null;

ftrRes=https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer").Find.Search("0003","");

if (ftrRes.FindRC % 10 ==1)

{

https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer").DeleteFeature(ftrRes);

}

//紧缩表

https://www.doczj.com/doc/0115568045.html,yers._Item("HouseLayer").Pack(https://www.doczj.com/doc/0115568045.html,yerPackConstant.m iPackAll);

如果在删除图元以后没有紧缩表的话,单击button1,将会看到ListView中多了一条空白的数据.

本章讲述的数据处理技术重在活学活用.关于数据处理还有一些重要的内容,例如专题图等技术,将在后面更为深入的章节中讲述.

练习:

1.在DataGrid中读取HouseLayer的所有图元数据,并将DataGrid内修改后的数据更新到图层表中.

2.使用自定义工具增加和删除带数据的图元.

在C#中怎样获取打印机的当前状态?

要获得打印机的状态,应该定义一个联合.

enum PrinterStatus

{

其他状态= 1,

未知,

空闲,

正在打印,

预热,

停止打印,

打印中,

离线

}

其中的"正在打印"和"打印中"是同一个意思,至于为什么会是这样,目前还不知道.

在程序中添加System.Managem ent的引用:using System.Managem ent;

然后编写获取打印机状态的函数如下:

///

/// 获取打印机的当前状态

///

/// 打印机设备名称

/// 打印机状态

private PrinterStatus GetPrinterStat(string PrinterDevi ce)

{

PrinterStatus ret=0;

string path=@"win32_printer.DeviceId='"+PrinterDevice+"'";

Managem entObject printer=new Managem entObject(path);

printer.Get();

ret=(PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);

return ret;

}

调用示例:

MessageBox.Show(GetPrinterStat("\\\\192.168.0.88\\Sam sung SCX-4x16 Series").ToString());

实现两个Com boBox互动的代码

private const string m_strConnection=@"Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Registry Path=;Jet OLEDB:Database

Locking Mode=1;Jet OLEDB:Database Password=;Data Source=""F:\源码

\Study\TestTwoCom bo\bin\Debug\data.m db"";Password=;Jet

OLEDB:Engine Type=5;Jet OLEDB:Global Bulk

Transactions=1;Provider=""Microsoft.Jet.OLEDB.4.0"";Jet OLEDB:System

database=;Jet

OLEDB:SFP=False;Extended Properties=;Mode=Share Deny None;Jet OLEDB:New Database Password=;Jet OLEDB:Create System

Database=False;Jet OLEDB:Don't Copy Locale on Com pact=False;Jet OLEDB:Com pact Without Replica Repair=False;User ID=Adm in;Jet

OLEDB:Encrypt Database=False";

private OleDbConnection cn=new OleDbConnection();

private OleDbDataAdapter da;

private DataTable dtbDept=new DataTable();

private DataTable dtbEm p=new DataTable();

private void Form1_Load(object sender, System.EventArgs e)

{

m_ConnectToDB();

da=new OleDbDataAdapter(@"SELECT * FROM 部门",cn); da.Fill(dtbDept);

da.SelectCom m https://www.doczj.com/doc/0115568045.html,m andText=@"SELECT * FROM 员工"; da.Fill(dtbEm p);

m_CloseConnection();

m_LoadDept();

}

///

/// 连接数据库

///

private void m_ConnectToDB()

{

cn.ConnectionString=m_strConnection;

if(cn.State==ConnectionState.Closed)

{

cn.Open();

}

}

///

/// 关闭数据库连接

///

private void m_CloseConnection()

{

if(cn.State==ConnectionState.Open)

{

cn.Close();

}

}

///

/// 加载部门信息

///

private void m_LoadDept()

{

if(dtbDept.Rows.Count>0)

{

cm bDept.DataSource=dtbDept;

cm bDept.DisplayMem ber="部门名称";

}

}

private void m_LoadEm p()

{

if(cm bDept.SelectedIndex>=0)

{

dtbEm p.DefaultView.RowFilter="部门

ID='"+dtbDept.Rows[cm bDept.SelectedIndex]["部门ID"].ToString().Trim()+"'"; cm bEm p.DataSource=dtbEm p.DefaultView;

cm bEm p.DisplayMem ber="姓名";

}

}

private void cm bDept_SelectedIndexChanged(object sender, System.EventArgs e) {

m_LoadEmp();

}

GIS设计及应用复习题.doc

GIS软件应用(MapInfo)(书) 一.填空题 1. MapInfo软件具备的GIS基本功能有、、、 和等。 1. GIS基本功能有、、、、和 等 地理信息输入、编辑、查询、显示、分析和输出 P8 2. GIS(mapInfo)中空间数据可用和数据结构表示。 2. GIS中目前主要采用和数据结构表示空间数据。 矢量和栅格 P9 3. 根据代码符号的表示形式可将代码分为、和三种类型。 数字型、字母型、数字和字母混合型 P10 3. 根据代码符号的作用可将代码分为和两种类型。 P10 分类码和标识码 4. MapInfo中提供的坐标系统有、和三种类型。 经纬度表示的地理坐标系统、多种投影坐标系统和非投影(Non-Earth)坐标系 P13 4. MapInfo系统默认的坐标系统是,并用表示坐标值。 经纬度表示的地理坐标系统,用十进制弧度值表示坐标值。 5. MapInfo中提供的选取地理目标方法可分为、和三种类型。 定位区域属性 P25 6.地理数据采用的表示方法有、、和等。 文字、报表、图表、地图和数字地图等 7. MapInfo中地图标注可采用和两种方法实现。 自动标注或交互式标注 8. 通常一个MapInfo表包含、、、 和等五个文件。 属性数据的表结构文件(.TAB)、属性数据文件(.DAT)、交叉索引文件(.ID)、图形数据文件(.MAP)、索引文件(.IND)。 9. MapInfo中,除了一般操作的图层外,还有和两个特殊图层。 装饰图层、无缝图层 9. MapInfo中的图层控制工具可以控制、、和属性。 图层可见、可编辑、可选和可标注 10. MapInfo中,输入线的工具有、和 直线、折线、曲线

webgis应用开发(附源码)

另辟渠道的webgis应用开发(附源码) 在用ARCIMS开发webgis中小型应用程序的时候,我相信很多人和我一样,就是如何将保存在简单数据库(如ACCESS)里的一些专题点信息该如何体现在地图上,这些点多则有3000,4000,另外还可通过地图操作(添加,平移)进行专题点编辑。如果直接用HTML VIEWER,这可是个不大不小的难题。一开始,我们使用了ACETATELAYER方式进行处理,效果不甚理想,在局域网中多用户并发访问时就有明显的速度瓶颈,更何况INTERNET上。 如下代码就是在此问题上做出的一种解决方案尝试,即部分地图信息客户端化。目前我正在开发,只是部分调试仅在局域网中通过,并没有完全成熟,在线面上还是处理开发阶段。现在介绍一下代码的基本思想,希望大家能够加以讨论。该代码使用JAVASCRIPT开发,它以基础图层地图图片为底图,在此之上进行图层扩展,客户端形成一套小型的webgis,与ARCIMS同步刷新,形成无缝整合,给人感觉就是一个整体的webgis系统。该代码在对象层次关系上模拟ACTIVEX CONNECTOR的重点对象。通过不同refres h函数与基础图层同步更新(为提高客户端速度,开放了很多refresh方式,即只refresh发生改变的对象坐标位置,当然放大缩小平移之类的操作就需要整个客户端refresh,因为每个点都发生了位置变化)。之所以如此层次化,一方面是为了增强代码的可读性和可维护性,另一方面通过封装具体VML代码实现来简化开发过程。这样一来,可以大大减轻服务端的处理,客户端和服务端同时处理,提高地图的运行速度。 我想重点说明的是,如果将部分地图信息移到客户端,必然需要自主开发一些原本集成好的功能(比如说在FeatureLayer中的WHEREEXPRESSION,BUFFER等功能)用于客户端。以BUFFER为例,圆形如何画,必然是vml的oval,可以把它作为一个特殊地图图层来看待,它是一个圆,而不是点,线,区(折线),这就是图层类型扩展。同样的道理还用在监控(关于监控的需求可查看https://www.doczj.com/doc/0115568045.html,/bbs/disp bbs.asp?BoardID=23&ID=14998),它是一种特殊的点层,它具体表现内容更丰富,所以也可以把它看成一种图层类型。 当然,之所以费尽心思放在客户端做,还有个很重要的目的就是为了解决地图特殊信息的可编辑。首先说明,此方法对基础图层的属性是无能为力的,它仅是用于在客户端生成的专题信息。 以本代码为例,客户端添加一个新点则需要先在相关对象中add,还需要通过数据库的方式将点保存。如果移动某客户端生成点,则显示客户端的移动过程,然后更改该对象的left和top到XY即可。另外要注意的是,客户端gismap对象中的所有涉及点的坐标都是地图坐标,所以经常需要屏幕坐标和地图坐标之间的转换,以前我说过,现在就不多说了,代码也体现比较明显。 以下是未完成代码的详细内容,以后会将很多实现补充上来,希望给有此需求的人员带来启示,并欢迎大家跟贴讨论,恭请候教。 function GisMap() { var i ; this.control = drawonmap ; //控件名称 this.visible = true ; //是否显示 this.mapXMin = 0 ; //地图最小X this.mapYMin = 0 ; //地图最小Y this.mapXMax = 0 ; //地图最大X this.mapYMax = 0 ; //地图最大Y https://www.doczj.com/doc/0115568045.html,yers = new Layers() ; //图层集合对象 ///返回含屏幕坐标的point对象 this.fromMapPoint=function(mapX,mapY) { var point = new PointObject() ;

gis软件开发

《gis软件开发》(2013-2014学年第二学期) 专业:地理信息科学 姓名:李金超

姓名:1126104252 实验人:李金超 实验时间:2014年6月3日---2014年6月12日 实验目的:(1)了解和掌握基于ArcGIS平台和.NET编程环境进行GIS二次开发的基础知识。 (2)熟悉vs软件,建立ArcGIS Engine 应用程序框架,实现地图浏览和添加shp数据和实现窗口联动的功能。 实验环境:在Windows XP环境下,使用C#语言,在Visual Studio 2010中进行GIS软件设计开发,程序的编程。 实验内容: 实验原理:(1)Visual studio 2010(简称VS)是一个基本完整的开发工具集,它包括整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境等。本实验使用Visual Studio 2010版本。VS是使用C#语言进行程序编码的良好开发环境,对C#语言和。 (2)ArcGIS Engine是ArcObjects组件跨平台应用的核心集合,它提供多种开发的接口,可以适应C++等开发环境。开发者可以使用这些组件来开发定制的GIS和地图应用。 (3)使用ArcGIS Engine在Visual studio 环境中二次开发GIS程序,可以使用程序创建向导来建立开发程序的框架,并在Visual studio 集成开发环境中使用ArcGIS Engine 提供的控件来建立基于窗体的应用程序,同时添加ArcGIS Engine组件并基于组件编写GIS应用系统。 实验步骤:

1、新建项目 启动VS2010,选择“文件|新建|项目”,在项目类型中选择Visual C#,再选择Windows 应用程序模板,输入名称“My Map”,点击确定。 2、添加控件 选择工具箱中的“菜单和工具栏|StatusStrip(状态栏)”,将其拖入到窗体。 选择工具箱中的“ArcGIS Windows Forms”节,将“AxToolbarControl”控件拖入窗体,并将其属性中的Dock 设置为Top。 选择工具箱中的“容器|SplitContainer(容器)”拖入窗体,并将其属性中的Dock 设置为Fill。将TabControl 控件拖入Panel1,将Alignment 属性设置为Bottom,Dock 属性设置为Fill。点击TabPages 属性右边的按钮,弹出TabPage 集合编辑器,将tabPage1 的Name 设置为“Layer”,Text 设置为“图层”;将tabPage2 的Name 设置为“Property”,Text 设置为“属性”。如下所示:

《WebGIS课程》期末考试复习

网络地理信息系统 第一章绪论 1.名词解释 WebGIS:即互联网地理信息系统,是Internet与WWW技术应用于GIS开发的产物,是利用WEB技术拓展和完善GIS的一项新技术。 2.简答 (1)WebGIS的组成以及各个承担的功能: WEB浏览器:用户通过浏览器获取分布在Internet上的各种地理信息 通信协议:通过相关协议,设定浏览器与服务器之间的通信方式及数据访问接口,是地理信息在Internet上发布的关键技术。 WEBGIS服务器:根据用户请求操作GIS数据库,为用户提供地理信息服务,实现客户端与服务器的交互。 (2)WebGIS的基本架构: (3)WebGIS的特点。 1、基于Internet/Intranet标准 2、分布式体系结构:有效平衡客户端与服务器端的处理负载 3、发布速度快,范围广 4、数据来源丰富,分布储存 5、用户界面友好 6、平台无关 7、成本低廉,操作简单

(4)WebGIS的作用。 <1>促使传统工作站版的GIS走向分布式、大众化,使GIS真正走进人们的生活、工作和学习中; <2>空间数据的分发、获取、浏览更加方便、快捷; <3>更加友好的、互动的可视化界面,是对传统GIS的一种革新; <4>使空间分析无处不在,人们能够随时随地使用GIS的分析功能; <5>将GIS与其他软件系统之间的集成变得更加容易,推动了GIS向纵深快速发展,使GIS走向企业化、社会化、网络化和智能化。 补充知识点: WebGIS基本思想:就是在Internet网上提供地理信息,让用户通过浏览器获得一个地理信息系统中的数据和服务 WebGIS的功能:地图服务、数据查询服务、地理编码服务、要素服务、导航或位置服务、个性化地图服务、远程数据维护功能。 3.论述 结合实例说明当前WebGIS的发展趋势和研究前沿(至少四个)。 大数据、云计算、分布式、三维GIS、移动GIS (1)基于分布式计算的WebGIS 要实现地理信息的分布式计算,必须采用标准的、开放的和广泛支持的分布式对象体系结构。例如,CORBA具有完美的平台无关性和兼容性,如与JAVA结合,可解决代码复杂、实现困难的问题,因而受到日益广泛的支持,必将成为未来WebGIS发展的主流技术 (2)三维GIS 目前GIS大多提供了一些较为简单的三维显示和操作功能,但与真正的三维表示和分析还有很大差距,真正的三维GIS必须支持真三维的矢量和栅格数据模型及以此为基础的三维空间数据库,解决三维空间操作和分析问题。

GIS设计和开发

gis设计与开发 Gis设计与开发思路 现实需求、GIS概念模型、机理过程、人机交互系统、现实需求 开发方式:独立开发,扩展式二次开发,集成式二次开发 第一章GIS设计思想内容,标准 (一)GIS设计目标 通过改进系统设计方法,严格执行开发的内容划分,进行阶段质量把关以及做好项目建设的组织管理工作,从而达到增强系统的实用性,降低系统开发和应用的成本,延长系统生命周期的目的。 (二)GIS设计的特点 1、数据:数据量大,实体种类繁多、实体间关联复杂的特点 2、功能:GIS设计以空间数据为驱动 3、工程:GIS工程投资大,周期长,风险大,涉及部门繁多 二gis设计的理论基础 Gis工程学:GIS本身发展和将系统工程学思想引入GIS设计的产物 (一)GIS工程学体系 1、任务:寻求系统总体最优化 2、基础理论:(1)系统学思想(整体性,层次性,相关性,功能性,动态性),(2)系统工程学(3)软件工程学(4)地理信息科学三层次(理论,技术,应用) 3、方法论:根据GIS工程学的基础理论而形成的一系列程序化的基本操作技术与方法(二)GIS工程学的特点 1、以空间信息系统工程优化为目的 2、横跨多学科 3、直接面向决策,为可持续发展提供决策支持 4、与GIS产业化密切相关 三GIS设计的内容 (一)设计原则:标准化,先进性,兼容性,高效性,可靠性通用性 (二)设计内容 软件设计和数据库设计 第二章gis设计的方法 一、结构化生命周期法 1、结构化生命周期法又称结构化分析和设计方法,又称结构化系统开发方法 结构化生命周期法是系统分析员,软件工程师,程序员以及最终用户按照用户至上的原则,自顶向下分析与设计和自底向上逐步实施建立计算机系统的一个过程,是组织,管理和控制信息系统的开发过程的一种基本框架。 2、基本思想:(1)要求设计过程必须严格按照阶段进行 (2)在系统建立之前就必须严格的定义和描述用户的需求。 3、阶段划分:(1)系统开发的准备阶段 (2)调查研究及可行性研究阶段

GIS设计与开发 简答题 论述题练习题

简答题 1.何为GIS设计? GIS设计就是在GIS开发的整体过程中,遵循一般软件工程的原理和方法,结合GIS开发的特点、特殊规律和要求,对GIS软件从系统定义、系统总体设计、系统详细设计、空间数据库和地理模型库设计、GIS实施、GIS软件测试与评价、直到GIS维护的各个阶段进行工程化规范的方法体系。 2.GIS设计的目标和主要内容是什么? GIS设计目标就是通过改进系统设计方法、严格执行开发的阶段划分、进行各阶段质量把关以及做好项目建设的组织管理工作,从而达到增强系统的实用性、降低系统开发和应用的成本、延长系统生命周期的目的。GIS设计包括软件设计和数据库设计两部分的内容。 3.GIS有哪些特点? GIS作为一个特殊的软件领域,其主要特点是海量数据存储及空间数据与属性数据一体化管理,基于GIS本身的特殊性,GIS设计也有其自身的特点:⑴ GIS处理的是空间数据,具有数据量庞大、实体种类繁多、实体间的关联复杂等特点。⑵ GIS设计以空间数据为驱动。⑶ GIS工程投资大、周期长、风险大、涉及部门繁多。 4.简要说明GIS有哪些产品模式及其主要特征。 GIS产品可归结为以下几种模式。 数字地图 数字地图是GIS最简单、最基本的产品之一。通过GIS的地图数据库,可以实现地图的数字化存储,即数字地图。 b)桌面制图 很多GIS产品具有桌面制图的功能(如MapInfo公司的MapInfo,ESRI公司的ArcView,ArcEditor和ArcInfo等产品)。桌面制图提供的产品不仅可以对数字地图进行显示、漫游、缩放,还可以对地图进行实时的编辑。桌面制图是GIS传统的市场领域,也是份额最大的一块。 c)桌面GIS 桌面GIS同时管理空间信息与属性信息,可以进行简单的空间分析操作,还可以在此基础上进行二次开发。由于它们具有界面友好、操作简单等优点,所以广泛应用于城市规划、土地管理、市政管理等部门。 d)专业化GIS 专业化GIS的主要特点是具有相对较强的分析功能。地理数据的基本组成要素包括空间数据、属性数据和拓扑数据。其中,拓扑数据指的是地理要素间的空间位置关系。专业化GIS不仅存储地理要素的空间数据和属性数据,而且还对其拓扑数据进行存储,极大增强了GIS的空间分析功能。 5.为实现地理信息资源共享,必须具备哪些基本条件? 要实现地理信息资源共享,必须具备三个基本条件:一是数据资源的贮备;二是要有技术支撑系统的保障,例如通讯技术、网络技术、数据库技术等现代化技术手段;三是共享规则的制订、被广泛采纳和遵循,主要包含标准、规范、政策和相关法律。 6.简要说明使用结构化生命周期法进行GIS设计需要完成的六个阶段内容。 ⑴系统开发准备阶段。针对用户提出开发系统的要求,有关人员进行初步调查,组成开发领导小组,制定开发的进度和计划。如果新系统开发采取外包方式,本阶段还要包括招投标过程。⑵调查研究及可行性研究阶段。采用各种方式进行调查研究,了解现行系统的界限、组织分工、业务流程、资源及薄弱环节等,绘制现行系统的相关图表。在此基础上,与用户协商方案,提出初步的新系统目标,并进行系统开发的可行性研究,提交可行性报告。⑶系统分析阶段。在对现行系统进行调查研究的基础上,使用一系列的图表工具进行系统的目标分析,划分子系统以及功能模块,构造出新系统的逻辑模型,确定其逻辑功能需求,交付新系统的逻辑功能说明书。⑷系统设计阶段。根据逻辑模型进行物理模型的设计,并具体选择一个物理的计算机信息处理系统。这个阶段还要进行人-机过程的设计、代码设计、输入、输出、文件数据库设计及程序模块、通讯网络设计等。⑸系统实施阶段。系统实施是新系统付诸实现的实践阶段,主要是实现系统设计阶段所完成的新系统物理模型。包括软硬件设备的安装和调试、程序设计、代码编写、调试。还包括对用户及操作人员进行培训,编制操作、使用手册和有关文档。⑹维护和评价阶段。对系统的修改和完善进行维护,如针对系统处理过程、程序、文件、数据库甚至某些设备和组织的变动进行相应的维护。系统的评价,广义上贯穿于系统开发过程的始终,这里主要指系统开发后期的评价。旨在将建成的新系统与预期的目标做一一比较,不同的指标综合体现为用户的满意程度——可接受性。、原型法是应软件设计新情况和新要求的出现而产生的,其特点主要体现为鼓励用户不断修改和完善需求,并根据新的需求不断修改和完善原型。请说明应用原型法开发信息系统各个阶段的内容。 7.原型法开发信息系统包括哪几个阶段? ⑴确定用户的基本需求。在这一阶段中,用户根据系统的特点清楚地表达自己的基本需求,系统分析开发人员据此来确定系统的规模及基本框架,判断系统需要的数据能否得到,同时应估算出开发原型的成本。⑵开发初始原型。开发初始原型仅仅反映用户的基本需求,并不要求完善。⑶利用原型来提炼用户需求。用户通过亲自使用原型,从而了解其需求得到的满足程度以及存在的问题。开发人员一方面记录下用户提出的该系统的缺点和不足之处;另一方面也要借助原型系统引导、启发用户表达对系统的最终要求,在用户和开发人员共同反复讨论过程中进一步提炼用户需求以及需要修改和变动之处。⑷修正和改进原型。开发人员根据第三阶段中用户提出的修改意见或发现的问题,对初始原型系统进行修改、扩充和完善。这是一个多次反复的过程,直到用户满意为止。 8.用UML模型进行系统的分析和设计有什么优点? 采用UML模型进行系统的分析和设计具有以下优点:①在面向对象设计领域,存在数十种面向对象的建模语言,都是相互独立的,而UML可以消除一些潜在的不必要的差异,以免用户混淆;②通过统一语义和符号表示,能够稳定面向对象技术市场,使项目根植于一个成熟的标准建模语言,从而可以大大拓宽所研制与开发的软件系统的适用范围,并大大提高其灵活程度。 9.系统定义时期的主要任务是什么? 系统定义时期的主要任务是确定软件开发工程必须完成的总目标以及工程的可行性;导出实现工程目标应该采用的策略即系统必须完成的功能;估计完成该项工程需要的资源和成本;并且制定工程进度表;最后编写系统需求分析报告。这个时期的工作通常又称为系统分析,由系统分析员负责完成。10.简述GIS数据字典的任务? GIS数据字典的任务是对GIS数据流图中出现的所有被命名的图形要素在数据字典中作为一个词条加以定义,使得每一个图形要素的名字都有一个确切的解释。 11.简述GIS成本有哪些部分组成? GIS的成本由五个部分组成:①购置并安装软硬件及其相关设备的费用;②生产系统所需数据的费用;③软件开发费用;④系统安装、运行和维护费用; ⑤人员培训费用。 12.总体设计的主要任务是什么? 总体设计的主要任务是确定系统总体架构与软、硬件配置,根据系统分析成果进行系统功能模块的划分,建立模块的层次结构及调用关系,确定模块间的接口及人机界面,并设计数据库总体结构。 13.试述详细设计与总体设计阶段工作的差别? 详细设计以总体设计阶段的工作为基础,但又不同于总体设计阶段,这主要表现为以下两个方面:⑴在总体设计阶段,数据项和数据结构以比较抽象的方式描述,例如,总体设计阶段可以声明矩阵在概念上可以表示一幅遥感图像,详细设计就要确定用什么数据结构来表示这样的遥感影像。⑵详细设计要提供关于算法的更多细节,例如,总体设计可以声明一个模块的作用是对一个表进行排序,详细设计则要确定使用哪种排序算法。总之,在详细设计阶段为每个模块增加足够的细节,使得程序员能够以相当直接的方式对每个模块编码。 14.结构化方法详细设计的主要表达工具有哪些? 结构化方法详细设计的主要表达工具有:程序流程图、N-S盒式图、问题分析图、类程序设计语言、序列图和活动图。 15.试说明关系型数据库建库三个范式的内涵。 第一范式(first normal form,简称1st NF)要求同一张表中没有重复项出现,如果有则应将重复项删除。这个删除重复项的过程就称为规范化处理。第二范式(sencond normal form,简称2nd NF)要求每个表必须有一个(而且仅一个)数据元素为主关键词(primary key),其它数据元素与主关键词一一对应。主关键词在表中必须具有唯一性,作为主关键词的数据项中不能出现重复的记录。第三范式(third normal form,简称3rd NF)是指表格中的所有数据元素不但要能够唯一地被主关键词所标识,而且他们之间还必须相互独立,不存在其它的函数关系。也就是说对于一个满足2nd NF的关系表来说,表中有可能存在某些数据元素的函数还依赖于其它非关键词数据元素的现象。 16.程序编写的组织管理包括哪些内容? 程序编写的组织管理包括:1)对程序员组织训练;2)购进软件消化利用;3)程序编写;4)程序模块的调试;5)程序模块的验收。 17.组件式GIS具有哪些特点? 1)小巧灵活、价格便宜;2)无须专门GIS开发语言,直接嵌入可视化开发工具;3)不逊色于传统GIS软件的强大GIS功能;4)直接嵌入各种开发工具,开发简捷;5)更加大众化,使非专业的普通用户也能够开发和集成GIS应用系统。 18.简述述组件式GIS应用系统的开发过程。 用户调研、可行性研究、用户需求分析、系统总体设计、系统详细设计、基础平台选择、熟悉基础平台、进行二次开发、系统测试、系统维护和系统使用。 19.简述程序代码编写过程中应注意的问题? 1)程序语言的选择;2)程序设计风格的确定;3)系统代码文档的编写。20.简述程序调试过程中发现的错误有哪些排除方法? 方法有:1)硬性排错:采用试验的方法,比如设置临时变量、增加调试语句、设置断点、单步执行等。2)归纳法排错:准备几组有代表性的输入数据,反复执行,对得出的错误结果进行整理、分析、归纳,提出错误原因及位置假想,再用新的一组测试数据去验证这些假想。3)演绎法排错:针对各组测试数据所得出的结果,列举出所有可能引起出错的原因,然后逐一排除不可能发生的原因与假设,将余下的原因作为主攻方向,最终确定错误位置4)跟踪法排错:在错误征兆附近进行跟踪找错;错误诊断出来以后,需要进行修改;修改完后,应立即利用先前的测试用例,重复先前的测试过程,进一步验证排错的正确性。 21.系统文档主要包括哪些内容? 系统文档主要包括系统实施方案、系统架构方案、系统分析报告、系统总体设计、数据库设计报告、系统详细设计、系统测试报告、用户手册等。22.如何有效地维护和管理系统文档? 1)软件开发小组应由一位文档保管员负责集中保管本项目的已生成文档(主 文档)。2)开发小组成员可根据工作需要自己保留一些个人文档,但这些文档 一般都应是主文本的复制件,应与主文本保持一致,在做必要修改时,也应 同步修改主文档。3)开发人员个人只保存主文档中与本人工作有关的部分文 档。4)在新文档取代旧文档时,管理人员应及时注销旧文档。在文档的内容 有更改时,管理人员应随时修订主文档,使其及时保持最新。5)在软件开发 过程中,可能需要修改已完成的文档。修改主文档前应充分估计修改可能带 来的影响,并且按照提议—评议—审核—批准—实施的步骤加以严格控制。 6)开发过程结束时,文档管理人员应收回开发人员的个人文档,并同时检查 个人文档与主文档的一致性,当发现两者有差别时,应立即着手解决。 23.简答系统实施阶段的任务? 系统实施阶段的任务可概括为以下五个方面: ①硬件和软件的购置及安装。包括计算机、绘图机、数字化仪、扫描仪等输 入输出和分析处理设备以及各种支撑软件如操作系统、数据库系统、编译系 统的购置安装。②程序的编写与调试。由于各模块的详细设计已经形成,只 需要编写相关程序。一般的处理办法是自编程序,但对于一些比较特殊的成 熟的算法可购买,程序编写后要进行调试,以减少程序的错误。③系统的安 装与调试。即对系统硬软件的安装及调试。④培训。在购买硬件、编写软件 的同时,应对用户进行培训。同时,这也是考验及检查系统结构、硬件设备 和应用程序的过程。⑤系统中有关数据的录入或转换。指的是各种地图数据 及属性数据的输入或从其它系统转化过来的过程,这个工作量是相当大的, 需要耗费大量人力、物力及时间。 24.在系统实施阶段,如何选择程序语言? 程序语言的选择应作如下考虑:①考虑编程的效率及代码的可读性。一般应 选择高级语言作为主要的编程工具。②考虑要符合详细设计的思想。一般应 选择结构化的语言,如C、Pascal等,这些语言的特点是直接支持结构化的 控制结构,具有完备的过程结构和数据结构。③程序设计语言应是一种通用 语言。因为GIS软件既包括数据、图形处理及分析,还包括对各种软硬件的 控制等,任何一种专用型的高级语言都无法完全胜任。④考虑到程序的执行 效率以及对某些特殊硬件的控制和操作要求。可以针对特定的模块采用混合 编程,达到程序的特别目的。⑤考虑编码和维护成本。选择合适的高级语言 以降低编码量及日常维护工作中的困难程度。⑥根据系统开发的不同规模, 选择合适的高级语言。比如对于一个大型的GIS,用Turbo C就可能不完全 适用,而应选择Visual C++等易于项目管理的高级语言。⑦根据不同的开发 平台和使用平台,选择不同的语言。⑧系统的兼容性、移植性等。 25.简单述GIS软件评价的含义以及评价的内容。 GIS评价是在GIS测试的基础上,通过对技术因子、经济因子和社会因子(如 进行评价,从而得出对系统整体水平以及系统实施所能取得的效益的认识和 评价。软件评价的内容包括:1)技术评价:可靠性、可扩展性、可移植性、 系统效率。2)经济评价:系统产生的效益、软件商品化程度、技术服务支持 能力、软件维护与运行管理。3)社会评价:系统的科学价值、系统的政治与 军事意义、系统决策能力、管理工作改革。 26.试简述GIS维护流程? 1)提交GIS维护申请;2)评估维护请求;3)维护过程;①确定维护的类型。 ②改正性维护。③适应性和完善性维护。④实施维护工作。⑤编写详细的维 护报告。 简述GIS可行性研究工作的主要内容? 简述系统详细设计阶段的目标与任务? 简述地理建模的一般过程? 简述GIS软件维护工作的影响因素? 论述题 1.论述系统可行性研究的主要内容是什么? 2.论述GIS工程学的主要任务、理论基础和内容分别是什么? 3.GIS规范化和标准化在GIS产业化和社会化过程中的作用是什么?其具体 内容主要体现在哪些方面? 4.论述GIS详细设计阶段的表达工具有哪几种?各有什么特点? 5.简要论述GIS软件评价的基本方法,评价类型及评价指标? 6.论述空间数据库建库流程? 7.试简述结构化生命周期法包括哪几个阶段?每个阶段的基本任务是什么? 8.简述在GIS系统实施时有哪些系统实施人员参与及他们各自的任务? 9.论述地理信息管理与更新的主要技术手段及各自的特点? 1

WebGis的主流技术及发展方向

WebGis的主流技术及发展方向 一、WebGIS技术概述GIS经历了单机环境应用向网络环境应用发展的过程网络环境GIs应用从局域网内客户服务器(ClientServerCS)结构的应用向Intemet环境下浏览器服务器DOwserServerBS)结构的WebGISm应用发展。随着Intemet的发展WebGIS开始逐步成为GIS 应用的主流WebGIS相对于CS结构而言具有部署方便、使用简单、对网络带宽要求低的特点为地理信息服务的发展奠定了基础。 二、WebGIS的特点(1)更广泛的访问范围。全球范围内任意一个客户可同时访问多个位于世界各地不同的WebGIS服务器上的最新数据Internet所特有的这些优势大大方便了WebGIS的数据管理 使分布式的多数据源的数据管理和合成更易于实现。(2)平台独立性。无论客户机与服务器是何种机器操作系统如何或者服务器端使用何种WebGIS软件由于使用了通用的Web浏览器用户都可透明访问WebGIS数据库在本机或某个服务器上进行分布式部件的动态组合和空间数据的协同处理与分布实现远程异构数据的共享。(3)真正大众化的GIS。以往的GIS由于成本高、技术难度大往往成了少数专业人士拥有的专业工具很难推广。而且对于每个用户来说,在每个客户端都要配备昂贵的专业GIS软件但用户经常使用的却只是一些最基本的功能 这在实际上造成了极大的浪费。WebGIS则给更多的用户提供了使用GIS的机会。WebGIS在客户端通常只须使用通用浏览器进行浏览和查询(有时还要加入一些免费使用的插件、ActiveX控件等) 从而大大降低了系统成本。(4)平衡高效的计算负载。以往的G1S大多使用文件服务器结构的处理方式 其处理能力完全依赖于客户端 效率较低。而WebGIS能充分利用网络资源 将基础性、全局性的处理交由服务器执行 而把数据量较小的简单操作交给客户端去完成。这种计算模式能灵活高效地寻求计算负荷和网络流量负载在服务器端和客户端的合理分配 是一种较理想的优化模式。(5)良好的可扩展性。WebGlS很容易与Web中的其他信息服务进行无缝集成 可以建立灵活多样的GIS应用。例如随着通信终端向多媒体和移动化方向发展 数字移动电话、PDA(个人数字助理)将成为webGIs的客户端

GIS在旅游线路设计中的应用(定稿)总结

1绪论 1.1 研究背景 作为朝阳型的世界第一大产业,旅游业越来越受到人们的亲睐,数十年来全球旅游业实现了持续发展。来自世贸组织的预测,在21世纪初中国将成为世界上最大的旅游国。而到2020年,中国入境旅游的人数就将达1.37亿人次,对如此巨大的旅游流的研究也显得具有极大的紧迫性和必要性。其实科技的不断发展,也使得地理学研究的各个方面都需要有新技术融入,尤其是如此蓬勃的旅游业。旅游流研究中海量的数据反映出的丰富信息以及各景区景点间的联系和动态变化资料需要GIS技术的支撑和协调。建立一个专门研究中国旅游景区整体规划的地理信息系统能从定量、动态等方面进行综合分析处理,把各种地理信息数据转换成支持决策的科学根据。 人类用来纪录各种空间现象的主要工具之一,地图对于人类的生产生活实在是不可忽视。经过长时间的经验累积,人类都是按照惯用的使用方法及使用型态来使用地图;不再是用纸张来而是电子讯号来传递信息的电子地图,有着许多传统地图无法达到的优势,例如:查询分析,路径规划等。再次基础上结合计算机的发展,地理信息系统(GIS)即应运而生。 虽然早在50年前加拿大地理信息系统(CGIS)就已经开始运作,但在早期,其主要的工作平台也都是价钱昂贵的工作站计算机,极高的软硬件价位也使得小老百姓望而却步,只有政府或大型研究机构才能负担,这使得多年来GIS始终定位在专业用途上;就连操作人员,也必须经过多年训练的专业人才才能胜任各项工作。可叹的是近十年来的发展,使用者计算机接口及软硬件功能的进步使得地理信息系统已经可以很方便地在个人计算机上安装,经过短期训练的人员也可以加以操作。 1.2 国内外研究现状 信息技术在第一届信息技术与旅游国际会议上被认为是现代旅游业发展与提高竞争力的一个决定性的因素。例如分布式旅游目的地数据库会对

GIS软件开发技术

第一章MapObjects基础Gis常用开发平台 MapObjects简介 ?MapObjects功能 ?MapObjects优点 ?MapObjects基础 编程规范

01、Gis软件开发常用开发平台 常用开发平台的比较: VB:较易入门 VBA:对于扩充原有功能较好。如AutoCAD、ArcMap中的VBA。开发效率最高的一种开发方式(常常是一个语名即可实现其它开发工具要几十甚至上百行的代码才能实现的功能)。缺点是所开发出的应用程序不能脱离相应的运行环境。(如在ArcMap中开发的应用程序,必须先要安装ArcMap) VC++:较为灵活,开发资料众多。可实现对系统的全面操作。缺点是学习起来较难,所开发出的应用程序常常会产生难以预计的错误。(如内存泄露等) Delphi:可扩充性最好,现已有上万个带源码的控件可供使用,几乎涉及到各各方面。如数据库控件InfoPower3000、OpenGL控件GLScene,工业控制控件等。 GIS组件简介: MapObjects:ESRI 1、可实现功能: 2、可使用的数据 ArcView Gis Shapefiles:创建新层、读写数据,添加删除记录与几何要素 ArcSDE:不能创建新层 Arcinfo Coverages:只读 CAD格式及VPF数据库:只读(Vector Product Format是一种标准的基于空间关 系数据模型的大型空间数据库的格式、结构与组织。是美国国防部的标准) 外部数据库:只读 ArcObjects:ESRI MapX:Mapinfo Supermap:中科院地理所

一般用户(大多数用户)关心的问题:应用程序的运行速度与稳定性。不关心所采用的开发工具及内部实现方式。只有特殊用户(少量用户)考虑与原有系统的兼容性才关心开发平台。 软件开发中应注意的问题: 代码的规范性:1、命名约定2、代码缩进3、逻辑关系的排列次序 对于较为普通的问题尽量使用较常见的解决方式。尽量不使用较为古怪的技巧(如:两数的交换),这样会降低代码的可读性。 Delphi开发环境简介: 1、数据库应用 2、OpenGL应用 3、报表制作

gis设计与应用试题

第一章 一.地理信息系统基本概念 1.地理信息系统:GIS是处理地理数据的输入、输出、管理、查询、分析和辅助决策的计算机系统。2.GIS使用的工具:计算机软、硬件系统; 3.GIS研究对象:空间物体的地理分布数据及属性 4.GIS数据建立过程:采集、存储、管理、查询、分析和显示。 5.GIS是在计算机软、硬件支持下,采集、存储、管理、处理、检索、分析和显示空间物体的地理分布数据及与之相关的属性,并以回答用户问题等为主要任务的技术系统。 二.GIS软件技术经历以下五个阶段:集成式GIS,模块式GIS,核心式GIS,组件式GIS,万维网GIS 三.GIS发展的各阶段特点 1集成式GIS 特点在一个系统中集成了GIS的各项功能 存在问题系统过于复杂,软件成本高;难与其它系统集成 2模块式GIS 特点:系统分成许多相对独立的功能模块 存在问题:难于与其它系统集成 3核心式GIS 特点:从底层提供GIS功能,通过API访问 存在问题:开发难度高,不能进行可视化程序设计 4组件式GIS 特点:通过标准通信接口实现模块间通信及GIS与其它系统集成 存在问题:有待于进一步发展 5万维网GIS 特点:结合Internet,实现GIS的共享和互操作 存在问题:目前还不成熟 四.GIS构成:硬件软件数据人员 五.GIS软件的分类:工具型软件应用型软件 地理信息系统的类型: 工具型地理信息系统,应用型地理信息系统(专题地理信息系统,区域地理信息系统),大众地理信息系统 第二章 一.GIS软件的主要特点 (1)在存储技术上,传统的GIS采用两库结构,即空间数据库和属性数据库的分离。 (2)在数据组织与处理模式上,传统的GIS仍然沿袭地图处理的模式。在实现上,将空间数据组织成物理实体(点、线、面等)、图层、地图和图库几个层次。 (3)在网络和分布式环境下系统组成方面,传统的GIS支持树型的系统结构和主-从工作模式,上下级数据交换基本上以图层为单位进行。 (4)在空间数据管理范围方面,目前的GIS可以比较有效地处理二维空间数据,并能较好地处理DEM数据、实现三维实体的表面显示。 (5)在数据共享和功能共享方面,虽然目前开始注意元数据问题,已经解决了不同格式空间数据之间转换问题,可以实现有缝的数据共享。但是GIS功能共享和互操作问题尚未得到解决。以系统为中心的问题没有得到根本克服。 因此,传统的GIS软件的特点可以简要地归纳为:以系统为中心,以地图为基础,二维处理,静态管理,尺度割裂,数据集中。 二、GIS软件开发过程中的问题 (1)经费预算经常突破,完成时间一再拖延。 (2)开发的软件不能满足用户的要求。 (3)开发的软件可维护性差。 (4)开发的软件可靠性差。 (5)数据工程量特别大,特别是数据采集工作量十分大。 (6)软件需求与软件生产的矛盾日益加剧,突出表现在软件生产率低。 (7)软件可重用性差。

GIS设计与实现课程设计

目录 1.设计背景:................................................................................................................ 2.设计目标.................................................................................................................... 设计原则与设计方法...................................................................................................... 1.设计原则:................................................................................................................ 设计方法.......................................................................................................................... 三、需求分析(系统定义).......................................................................................... 1.系统设计的方法........................................................................................................ 2.系统定义:................................................................................................................ 四、系统设计(系统结构体系、模块设计).............................................................. 结构体系设计:.............................................................................................................. 2.系统模块设计:........................................................................................................ 五、数据库设计.............................................................................................................. 1.概述............................................................................................................................ 2.需求分析.................................................................................................................... 3.概念设计.................................................................................................................... 4.逻辑模型.................................................................................................................... 5.物理设计.................................................................................................................... 6.数据字典设计............................................................................................................ 六、系统实施计划.......................................................................................................... 七、总结.......................................................................................................................... 设计背景与目标 1.设计背景: 随着现代社会的发展,大学校园的规模日益扩展,传统的管理方法显得力不从心,为了提高效率,节省物力人力资源,大学校园的管理也将逐步实现现代信息化管理。而地理信息系统(一种基于空间数据库的空间信息处理与分析技术,已被广泛应用于市政、交通、电信、军事和旅游等领域,具有极其广泛的应用前景,从地理关系的角度分析和解决与地理信息有关的问题往往会得到意想不到的效果。)技术的发展恰好迎合了这个需求,可以为大学校园的数字化、信息化管理提供相应的技术支持,大学校园多媒体管理系统应运而生。我校虽然已经有了较完善的校园多媒体管理系统,但是身为我校地理信息系统专业的学生,专业相关的课程设计选择这个题目显得更有意义,特建立我校的空间管理GIS系统。 2.设计目标 要求包括道路及道路基本信息、建筑基本信息、校园特殊标记的空间数

WebGIS_网络地理信息系统的应用与实现

WebGIS—网络地理信息系统的应用与实现 黄宪明1,刘就女2 (1.广东工业大学机电工程学院图学与数字媒体系,广州 510090;2.华南理工大学机械工程学院工业设计与图学研究所,广州 510640) 摘要:地理信息系统GIS(Geographical Information System)是在计算机软硬件系统的支持下,对整个或部分地球表层空间中的有关地理分布数据进行采集、存储、管理、运算、分析,以及进行可视化表达的信息处理与管理系统。GIS在商业、农业、水利和交通等行业具有非常广泛而实际的应用。在Internet 引入到GIS,即WebGIS出现后,使GIS的应用进入了一个新的发展阶段。为此,简要地探讨了WebGIS的应用和实现技术。 关键词:自动控制技术;WebGIS;应用;实现技术 中图分类号:TP273+.5 文献标识码:A 文章编号:1003─188X(2005)04─0243─02 WebGIS即网络地理信息系统,是Internet技术应用于GIS开发的产物。GIS通过Internet功能得以扩展, Internet用户可以浏览WebGIS站点中的空间数据、制作专题图以及进行各种空间检索和空间分析,从而使GIS进入千家万户。 1 WebGIS的应用领域 国内的GIS首先是应用在科研部门和测绘与资源环境等领域,然后在城市规划等部门展开,现在已经扩展到农业、商业、土地管理、水利及交通运输等领域。 1.1 WebGIS在农业中的应用 在美国资源部和威斯康星州合作建立了以治理土壤侵蚀为主要目的的多用途、专用的土地GIS中,利用GIS在综合分析评价与模拟预测中的应用功能,不仅对地理空间数据进行编码、存储和提取,而且将对现实世界各个侧面的思维评价结果作用其上,得到综合分析评价结果。该系统通过收集耕地面积、湿地分布面积、季节性洪水覆盖面积、土壤类型、专题图件信息及卫星遥感数据等信息,建立了威斯康星地区的壤潜在的侵蚀模型,探讨了土壤恶化的机理,提出了合理的方案,达到土壤保护的目的;同时,利用它对土地进行长期的动态研究,避免土质的重心恶化。 1.2 WebGIS在商业中的应用 WebGIS在银行网点管理信息系统上的应用,是其商业应用的一个例子。基于WebGIS的银行网点管理信息系统,利用先进的电子地图,使每一网点在地图上可标识;同时运用传统的管理信息系统对网点进行管理,实现管理信息系统的可视化,并且通过Internet在网络上进行发布,使系统不仅具备原有的特点,同时还具备可视化特性及空间分析能力。 2 WebGIS的实现方法 2.1 WebGIS的结构体系 用户是利用浏览器,通过互联网来使用WebGIS 的,所以,WebGIS采用B/S(浏览器/服务器)的网络结构。这是一种3层的结构模式:以地理空间数据、业务数据、设施数据等组成的数据层;以GIS 信息服务平台和业务信息服务平台构成的业务逻辑层;以管理信息系统为平台的系统应用层。图1为系统总体结构框架图。 图1 系统总体结构图 2.2 WebGIS的网络结构 WebGIS的网络设计采用结构化设计方法,图2为某银行网点的网络结构。根据需要,图2中左上 收稿日期:2004-12-15 作者简介:黄宪明(1973-),男,江西定南人,助工,硕士,(E-mail) swordsman730329@https://www.doczj.com/doc/0115568045.html,。

相关主题
文本预览
相关文档 最新文档