GIS软件开发技术.docx

上传人:b****6 文档编号:3254191 上传时间:2022-11-21 格式:DOCX 页数:47 大小:678.99KB
下载 相关 举报
GIS软件开发技术.docx_第1页
第1页 / 共47页
GIS软件开发技术.docx_第2页
第2页 / 共47页
GIS软件开发技术.docx_第3页
第3页 / 共47页
GIS软件开发技术.docx_第4页
第4页 / 共47页
GIS软件开发技术.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

GIS软件开发技术.docx

《GIS软件开发技术.docx》由会员分享,可在线阅读,更多相关《GIS软件开发技术.docx(47页珍藏版)》请在冰豆网上搜索。

GIS软件开发技术.docx

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、可使用的数据

ArcViewGisShapefiles:

创建新层、读写数据,添加删除记录与几何要素

ArcSDE:

不能创建新层

ArcinfoCoverages:

只读

CAD格式及VPF数据库:

只读(VectorProductFormat是一种标准的基于空间关系数据模型的大型空间数据库的格式、结构与组织。

是美国国防部的标准)

外部数据库:

只读

ArcObjects:

ESRI

MapX:

Mapinfo

Supermap:

中科院地理所

一般用户(大多数用户)关心的问题:

应用程序的运行速度与稳定性。

不关心所采用的开发工具及内部实现方式。

只有特殊用户(少量用户)考虑与原有系统的兼容性才关心开发平台。

软件开发中应注意的问题:

代码的规范性:

1、命名约定2、代码缩进3、逻辑关系的排列次序

对于较为普通的问题尽量使用较常见的解决方式。

尽量不使用较为古怪的技巧(如:

两数的交换),这样会降低代码的可读性。

Delphi开发环境简介:

1、数据库应用2、OpenGL应用3、报表制作

02、通用GIS功能的界面框架设计

1、菜单的设计

2、工具条的设计

3、状态栏提示信息的显示(标准控件及1stClass控件的使用)

4、fcLookoutBar控件的使用

5、TActionList控件的使用

6、图标及标题的设置

03、MapObjects的模块间关系简介

属性、事件、方法:

属性:

对象的性质,方法:

对象的动作,事件:

对象的响应。

(只有MapControl有事件)

可创建对象与不可创建对象

为有效地使用MapObjects中的OLEAutomation对象,必须注意一些对象可以创建,一些对象不可创建。

如果某个对象可以创建,在对象图中对象名称下有一个Creatable标注。

如一个对象可以创建可用如下代码创建:

(假设创建点对象)

DimNewObjectasNewMapObjects2.Point

DimNewObjectasMapObjects2.Point

SetNewObject=NewMapObjects2.Point

在将对象的引用赋给变量、数据类型的元素或可写对象的属性时,须使用关键字Set;在创建对象的实例时,须使用关键字New

Var

NewObject:

ImoPoint;

Begin

NewObject:

=coPoint.Create;

End;

在Delphi中如一个对象可创建,可用coXXX.Create方法进行创建。

XXX为可创建对象名

值传递与引用传递:

值传递:

新的变量得到原始数据或对象的一个拷贝,其值的改变不影响原值。

Name属性;

引用传递:

新的变量得到原始数据或对象的内存地址,其值的改变影响原值。

Symbol属性

值传递

DimLayerNameAsString

LayerName=Map1.Layers.Item(0).Name

LayerName="MyLayerName"

MsgBoxLayerName

MsgBoxMap1.Layers.Item(0).Name

 

var

LayerName:

string;

begin

LayerName:

=ImoMapLayer(Map1.layers.Item(0)).Name;

LayerName:

='MyLayerName';

ShowMessage(LayerName);

ShowMessage(ImoMapLayer(Map1.layers.Item(0)).Name);

End;

引用传递

DimMySymbolAsNewMapObjects2.Symbol

SetMySymbol=Map1.Layers.Item(0).Symbol

MySymbol.Color=moRed

Map1.Refresh

 

var

MySymbol:

imoSymbol;

begin

MySymbol:

=coSymbol.Create;

MySymbol:

=ImoMapLayer(Map1.Layers.Item(0)).Symbol;

MySymbol.Color:

=moRed;

Map1.Refresh;

end;

MapObjects中的常量:

常量均以mo开头。

在编写代码时,可使用常量名也可使用常量左边的整数。

但最好使用常量名称以增强代码的可读性。

MainMap.MousePointer=moArrow;或MainMap.MousePointer=1;

第二章地图与图层

 

MapControl

LayersCollection

ØMapLayers

ØImageLayers

Rectangle、point

DataConnection

GeoDatasetsCollection

GeoDataset

TrackingLayer

查看地图

地图的放大、缩小、平移等操作

交互式方法:

Pan、TrackRegtangle、TrackPolygon、TrackCircle。

当使用上述方法时,运行时线程将暂停,等待用户使用鼠标与Map控件交互。

实现对地图的基本操作。

(地图的放大、缩小、平移)

PrivateSubMainMap_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)

DimrAsnewMapObjects2.Rectangle

IfbarDisplay.Buttons("Zoomin").Value=1Then

MainMap.Extent=MainMap.TrackRectangle

ElseIfbarDisplay.Buttons("Zoomout").Value=1Then

r=MainMap.Extent

r.ScaleRectangle(1.25)

MainMap.Extent=r

ElseIfbarDisplay.Buttons("Pan").Value=1Then

MainMap.Pan

ElseIfbarDisplay.Buttons("Identify").Value=1Then

CallfrmIdentify.Identify(x,y)

Endif

MainMap.Refresh

Endsub

 

procedureTMainFRM.MainMapMouseDown(Sender:

TObject;Button:

TMouseButton;Shift:

TShiftState;X,Y:

Integer);

var

r:

imoRectangle;

begin

iftbZoomIn.Downthen

MainMap.Extent:

=MainMap.TrackRectangle

else

iftbZoomOut.Downthen

begin

r:

=coRectangle.Create;

r:

=MainMap.Extent;//(Extent:

为地图的空间区域可理解为当前的显示范围)

r.ScaleRectangle(1.25);//

MainMap.Extent:

=r;

end

else

iftbPan.Downthen

MainMap.Pan

else

if(tbIdentify.Down)and(Button=mbLeft)then

//GetIdentify(X,Y);

MainMap.Refresh;

End;

 

获取鼠标坐标

在创建面向图形的应用程序时,必须解决两种坐标系统的转换问题:

定义窗体中控件的尺寸与位置的控制坐标,以及定义在打印机或显示器上图形的大小与位置的设备坐标。

MapObjects开发人员还须使用第三种坐标系统:

地图坐标系统。

此坐标定义了地图上几何要素或影像的笛卡尔位置。

为保证有效,此坐标系统必须与某种投影或非投影坐标相匹配,以定义物体在地表的位置。

在MapObjects中,ToMapPoint方法以参数形式接收MouseDown、MouseUp、MouseMove事件传递的鼠标位置的x,y参数。

这些x,y值是以控制坐标来表达的。

ToMapPoint方法将窗体上点的位置转换成相应的地图上的点位置。

FromMapPoint方法实现相反的转换。

类式的方法有:

ToMapDistance与FromMapDistance

PrivateSubMap1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)

DimMyPointAsNewPoint

SetMyPoint=Map1.ToMapPoint(X,Y)

Text1.Text=Str(MyPoint.X)+""+Str(MyPoint.Y)

EndSub

 

procedureTForm1.Map1MouseMove(Sender:

TObject;Shift:

TShiftState;X,Y:

Integer);

var

MyPoint:

ImoPoint;

begin

MyPoint:

=coPoint.Create;

MyPoint:

=Map1.ToMapPoint(x,y);

Edit1.Text:

=FloatToStr(MyPoint.X)+'‘+FloatToStr(MyPoint.Y);

end;

 

图层集合(Layers)

Ø每个地图控件有且只有一个Layers集合

ØLayers集合可包含MapLayer与ImageLayer两类地图文件

Ø每个图层可有自已的显示方式

DimiAsInteger

Fori=0ToMap1.Layers.Count-1

MsgBoxMap1.Layers.Item(i).Name

Nexti

 

var

i:

integ

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1