ArcGISEngine基礎開發(fā)教程_第1頁
ArcGISEngine基礎開發(fā)教程_第2頁
ArcGISEngine基礎開發(fā)教程_第3頁
ArcGISEngine基礎開發(fā)教程_第4頁
ArcGISEngine基礎開發(fā)教程_第5頁
已閱讀5頁,還剩155頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1創(chuàng)建第一個ArcGISEngine桌面應用程序

ArcGISEngine9.3提供了豐富的GlS組件方便用戶快速的定制開發(fā)一個GIS應用程序,無需寫代碼即可實:

編輯以及空間分析功能。接下來使用ArcGISEngine9.3提供了MapControlApplication模塊來創(chuàng)建第一彳

程序提供編輯功能。

1.1目標

1.創(chuàng)建第一個ArcGISEngine桌面應用程序

2.為應用程序添加編輯功能。

1.2準備工作

1.IDE:VisualStudio2005/2008

2.ArcGISEngineDeveloperkit9.3

3.制作ArcGIS實驗數(shù)據(jù)地圖文檔MXD

1.3設計流程圖

創(chuàng)建第一個ArcGISEngine桌面應用程序

體驗編輯功能

1.4制作地圖文檔

在ArcMap中加載數(shù)據(jù)后,點擊保存生成一個*.mxd地圖文檔,如圖1所示:

圖1

1.5創(chuàng)建第一個ArcGISEngine桌面應用程序

在VisualStudio2008中新創(chuàng)建項!選擇魚ArcGIS宜Engine&MapControlApplication,點擊確定,如圖2

圖2

可以看到在VisualStudio中看到在新創(chuàng)建的項目中自動加載了ToolBarControl、TocControl>Licensee

及一個.NETToolStripMenultem菜單控件,如圖3所示:

圖3

1.6加載MXD地圖文檔數(shù)據(jù)

單擊F5鍵運行程序,然后單擊打開MXD地圖文檔按鈕打開MXD地圖文檔,如圖4所示:

File

7。?ec::::?2oa

點擊打開地圖文檔按鈕打

MXD公用

s,極

文忤集I.I090325!^630ArcGIS93?快痍方式

快捶方式

■?面

GESR1-TM144KB

)H

公用ThinkspatiallywithG!S4(xUntitted.mxd

A23快捷方式a|E$R!ArcM4>

PJ萬it_____|

二主鼠、河陽攫機mxd

?I

____I

文件含OO:UntitledbBid?^ArclipDocuments(?-?xd?

[打開9)M取扁

-248.74,920.74UnknownUnits

圖4

可以看到應用程序把MXD地圖文檔加教到MapControl地圖上,可以使用ToolbarControl提供的常用GIS

511699.43403132395Meters

圖5

1.7為應用程序添加編輯功能

在應用程序設計模式下右鍵單擊ToolbarControl,單擊屬性選項彈出ToolbarControl屬性對話框,單擊Item:

對話框,單擊Toolset選項卡,選擇FeatureEditors選項,拖動到屬性對話框工具欄的指定位置。如圖6所

條ArcEngineControlsApplication

File

irControl

麥?代sc

:CentreArcGISEngneMapControl

?于]崛8)trollName:axMapControll

置于陽■⑸

快速添加功能

洌齊奧網(wǎng)曳G)Editor

示意圖

ActiveX-關于_

拖動Feature選擇Toolset選項

ftfl^MainFonn*Editing工具集到

X的切⑴

黑鞭刑體今

Q??(Y)送位置/

3碰W)

XM*(D)

?性腳

右鍵單擊、、八0?ac::::?*?

Toolbarcontrol選擇Item^選項觸擊Add按鈕,

點擊屬性。?eiri>ltt卡H.,必?-彈出Controls

Te”

9-■/17gCommands對話

900

圖6

1.8體驗使用編輯功能

運行應用程序,可見工具條多了一個和ArcMap中功能類似的編輯工具集,開始對面圖層進行編輯創(chuàng)建一個新

圖7

綜上GlS應用開發(fā)人員通過使用ArcGISEngine可以快速創(chuàng)建自定義GIS應用程序。

3械(38.28KB)

ArcGISEngine基礎開發(fā)教程(2)——學習幾何對象與空間參考

2.1目標

1.熟悉ArcGISEngineGeometry模型,通過程序構建常用幾何對象

2.熟悉空間參考

3.通過野外測量點構建一個polygonshapefile功能開發(fā)

2.2準備工作

1.IDE:VisualStudio2005/2008

2.ArcGISEngineDeveloperkit9.3

3.自造一份包含X,丫坐標的*.txt文本文檔數(shù)據(jù)(即野外測量點)

2.3Geometry主要幾何對象模型圖

圖1

Geometry是ArcGISEngine中使用最為廣泛的對象集之一,用戶在創(chuàng)建、刪除、

編輯和進行地理分析的時候,就是處理一個包含幾何形體的矢量對象;除了顯示

要素意外,控件對象選擇,要素符號化,標注要素,編輯要素都需要Geometry

參與。圖1是Geometry的主要幾何對象模型圖,接下來將一一介紹這些幾何對

象。

2.4幾何對象

2.4.1Point和MultiPoint幾何對象

Point幾何對象

Point:是一個。維的幾何圖形,具有X,Y坐標值,以及一些可選的屬性:如高程值(Z值),

度量值(M值)和ID號,點對象用于描述精確定位的對象,例如一個電話亭在一個城市的

精確位置以下代碼演示如何創(chuàng)建個Point對象:

1.IPointpPoint=newPointClass();

2.pPoint.X=100;

3.pPoint.Y=100;

MultiPoint幾何對象

MultiPoint:點集對象是一系列無序的點的群集,這些點具有相同的屬性信息。例如可以用

一個點集來表示整個城市天然氣調壓站。如下圖所示:一個Multipoint對象由6個Point

對象組成。

IMultipointwith1

sixpoints

圖2

以下代碼片段演示如何構建Multipoint對象:

〃定義第一個點

IPointpPointl=newPointClass();

pPointl.X=100;

pPointl.Y=100;

〃定義第二個點

IPointpPoint2=newPointClass();

pPoint2.X=200;

pPoint2.Y=200;

……〃構建其他點

IPoinlColledionpMultipoint=newMuitipointCkiss();

objecto=Type.Missing;

〃添加第個點,不需要設置點的順序,參數(shù)設置為Type.Missing

pMultipoint.AddPoint(pPointl,refo,refo);

〃添加第二個點,不需要設置點的順序,參數(shù)設置為Type.Missing

pMultipoint.AddPoint(pPoint2,refo,refo);

……//添加其他點

2.4.2Segment幾何對象

Segment有起點,終點和參數(shù)定義三個方面定義。。

它有四個子類分別是,

名有四個子類分別是“

2.4.3Path和Ring幾何對象

Path幾何對象

Path是連續(xù)的Segment的集合,除了路徑的第一個Segment和最后一個Segment外

其余的Segment的起始點都是前一個Segment的終止點,即Path對象的中的Segment

不能出現(xiàn)分離,Path可以是任意數(shù)的Line,CircularArc,曰lipticArc和BezierCurve的組

合。

J個Path由四個

Segment組成

圖4

一個或多個Path組成一個Polyline對象。

Ring幾何對象

Ring是一個封閉的Path即起始和終止點有相同的坐標值。它有內部和外部屬性。

圖5

■?個或多個Ring對象組成一個Polygon對象。

2.4.4Polyline和Polygon幾何對象

Polyline幾何對象

Polyline對象是由一個或多個相連或者不相連的path對象的有序集合,它可以是單個

Path對象組成,也可以是多個相連的Path對象組成,或者是多個分離的Path組成,如下

圖所示。Polyline通常用來代表線狀地物如道路,河流,管線等等。

圖6

--個Polyline對象必須滿足以下準則:

1.組成Polyline對象的所有Path對象必須是有效的。

2.組成Polyline對象的所有Path對象不能重合,相交或自相交。

3.組成Polyline對象的多個Path對象可以連接與某一點,也可以分離。

4.Path對象的長度不能為0.

IPolyline是Polyline類的主要接口,IPolyline的Reshape方法可以使用一個Path對象

為?個Polyline對象整形,IPolyline的SimplifyNetwork方法用于簡化網(wǎng)絡。

Polyline對象可以使用IGeometryCollection接口添加Path對象的方法來創(chuàng)建,使用該

接口需注意以下情況:

1.每一個Path對象必須是有效的,或使用IPath::Simplify方法后有效。

2.由于Polyline是Path對象的有序集合,所以添加Path對象時必須注意順序和方向。

3.為了保證Polyline是有效的,可以創(chuàng)建完Polyline對象后使用ITopologicalOperator

接口的Simplify方法。

以下代碼片段為使用IGeometryCollection接口創(chuàng)建■—個Polyline對象:

〃定義第一個點

IPointpPointl=newPointClassO;

pPointl.X=100;

pPointl.Y=100;

〃定義第二個點

1PointpPoint2=newPointClass();

pPoint2.X=200;

pPoint2.Y=200;

〃創(chuàng)建一個Line對象

ILinepLine=newLineClassO;

〃設置Line對象的起始終止點

pLine.PutCoords(pPointl,pPoint2);

//QI到【Segment

1SegmentpSegment=pLineas(Segment;

〃創(chuàng)建一個Path對象

SegmentCollectionpPath=newPathClass();

objecto=Type.Missing;

〃通過ISegmenlColleclion接口為Palh對象添加Segment對象

pPath.AddSegment(pSegment,refo,refo);

〃創(chuàng)建?個Polyline對象

IGeometryCo11ectionpPolyline=newPolylineClass();

//通過IGeometryCollection為Polyline對象添力IIPath對象

pPolyline.AddGeometry(pPathasIGeometry,refo,refo);

Polylgon兒何對象

2Polylgon對象是由一個或多個Ring對象的有序集合,它可以是由單個Ring對象構成,

也可以使用多個Ring組成如下圖所示。其中Ring可以分為OuterRing(外環(huán))和Inner

Ring(內環(huán))之分。外環(huán)和內環(huán)都是有方向的,它們的區(qū)別是外環(huán)的方向是順時針的,內環(huán)

的方向是逆時針。Polygon通常用來代表有面積的多邊形矢量對象,如行政區(qū),建筑物等。

Polygons

□□訴Ring

H外環(huán)

口內環(huán)

一個外環(huán)

一個內環(huán)

多個內環(huán)多個內環(huán)

圖7

以下代碼片段演示如何構建一個Polygon:

〃創(chuàng)建一個Ring對象,通過ISegmenlCollection接口向其中添加Segment對象

ISegmentCollectionpSegCollection=newRing('lass();

objecto=Type.Missing;

pSegCollection.AddSegment(pSegmentl,refo,refo);

pSegCollection.AddSegment(pSegment2,refo,refo);

//QI到IRing接口封閉Ring對象,使其有效

IRingpRing=pSegCollectionasIRing;

pRing.Close();

〃使用Ring對象構建Polygon對象

IGeometryCo11ectionpGeometryColl=newPolygonClassO;

pGeometryColl.AddGeometry(pRing,refo,refo);

2.4.5Envelope幾何對象

Envelope是所有幾何對象的外接矩形,用于表示幾何對象的最小邊框,所有的幾何對象

都有?個Envelope對象,IEnvelope是Envelope對象的主要接口,通過它可以獲取兒

何對象的XMax,XMin,YMax,YMin,Height,Width屬性。通過IEnvelope的Expand方

法還可以按比例縮放Envelope對象的范圍,如下圖所示:

Envelope

Expand

0x縮放

fY縮放

0

2.4.6Curve對象幾何對象

除去Point,MultiPoint和Envelope外,其他所有的幾何體都可以看做是Curve(曲線)。

Line,Polyline,Polygon,CircularArc,BezierCurve,曰lipticArc和CircularArc都是曲線

的一種,它們都實現(xiàn)了ICurve接口。

ICurve接口的Length屬性用于返回一個Curve對象的長度。

ICurve接口的FromPoint和ToPoint屬性可以獲得Curve對象的起止點。

ICurve接口的Reverseorientation方法可以改變?個Curve對象的節(jié)點次序即調動

Curve對象的起始點和終止點互相調換。

ICurve接口的IsClosed屬性則可以判斷?個Curve對象起始點和終止點是否在一"立置

上。

ICurve接口的GetSubcurve方法可以復制一?條Curve對象的特定部分,例如一條10千

米公路的Curve對象,獲取2-5千米處的公路的曲線代碼片段如下所示:

//QI到ICurve接口

ICurvepCurve=pPolylineasICurve;

〃創(chuàng)建一個Polyline對象

1CurvepNewCurve=newPolyIineClassO;

boolbtrue=true;

〃獲取-5千米間的曲線對象

pCurve.GetSubcurve(2,5,btrue,outpNewCurve);

此外ICurve的QueryTangent和QueryNormal方法分別用于獲取Curve對象上某一

點的曲線的切線和法線。

2.4.7TriangleStrip和TrangleFan,Trangle.Ring幾何對象

TriangleStrip和TrangleFan,Trangle,Ring是構成MultiPatch幾何對象的構建對象。

TriangleStrip幾何對象

TriangelStrip對象是由一系列點定義的曲面片組成,而曲面片是有若干個三角形所組成,

所以這個曲面可以定義為:(0,1,2),(2,1,3),(2,3,4),(4,3,5)?

圖9

TrangleFan幾何對象

一個TrangleFan對象由一系列點定義的曲面片組成,所不同的是所有的三角形共享一個

頂點。如下圖所示,所以這個曲面可以定義為:(0,1,2),(0,2,3),(0,3,4),(0,4,5)。

0

2

圖10

Triangle幾何對象

Triangle由三個點所確定如下圖,一個Triangle可定義為(0,1,2)等。

圖11

Ring幾何對象

Ring和前邊介紹的組成Polygon的Ring一樣,例如下邊一個房屋組成它的墻是個

OutRing對象,而窗戶和門是InnerRing對象。

innerRing

圖12

2.4.8Multipatch幾何對象

Multipatch幾何對象用于描述3D圖形,可以由TriangleStrip,TriangleFan,Triangle

和ring對象組合構成組成。Multipatch可以通過多種方式創(chuàng)建,一種是通過導入外部3D

格式數(shù)據(jù)文件(3DStudioMax.3dsfiles,OpenFlight.fitfiles,COLLADA.daefiles,

Sketchup.skpfiles,VRML.wrlfiles),另外ArcGISEngine提供了多種創(chuàng)建

Multipatch幾何對象的方法:

如果創(chuàng)建沒有貼圖紋理,沒有法向,沒有組成部分信息的Multipatch時,只需創(chuàng)建好組成

的Multipatch的各個部分即可,然后通過MultiPatch的IGeometryCollection接口添

加各個組成部分即可。

如果要為Multipatch每個組成部分添加紋理信息,法向信息,屬性信息就必須使用

GeneralMultiPatchCreator對象來創(chuàng)建,通過其IGeneralMultiPatchlnfo接口來為

MultiPatch各個組成部分定義法向,材質,屬性信息。通過IGeneralMultiPatchlnfo接

口可以獲取這些MultiPatch的各個組成部分的信息。

通過IConstructMultiPatch接口和lExtrude接口操作GeometryEnvironment對象可

以通過拉伸Polyline對象(拉伸為墻)和Polygon對象(拉伸為多面體)來創(chuàng)建MultiPatch.

通過訪問3D符號庫,獲取3DSymbol來渲染點,把三維符號放置在點的位置從而生成

Multipatch.

下圖為MultiPatch對象的貼圖原理:

3.2Mulitipatch貼圖、渲染原理

圖13

接下來給大家介紹通過GeneralMultiPatchCreator創(chuàng)建?個有紋理MultiPatch的方法:

需要使用以下三個對象:

GeometryMaterial:用于構建材質,通過IGeometryMaterial創(chuàng)建的材質可以作為

TextureLineSymbol或者TextureFillSymbol屬性用來創(chuàng)建這些符號,也M以把它添加

到GeometryMaterialList對象中,用于GeneralMultipatchCreator對象構建

Multipatch對象。

GeometryMaterialList:材質對象的容器用于GeneralMultiPatchCreator對象調用Init

方法時使用。

GeneralMultiPatchCreator:用于創(chuàng)建有紋理的貼圖的Multipatch.o

以卜代碼片段演示如何創(chuàng)建一個MultiPatch對象

///

<summary)

///

構建Multipatch幾何對象

III

</summary>

///

<relurns〉返回Multipatch幾何對象</relurns>

publicIMuitiPatchCreateMultipatch()

try

〃創(chuàng)建圖形材質對象

IGeometryMaterialtexture=newGeometryMaterialClassO;

texture.TextureImage=@"C:\Temp\MyImage,jpg”;

〃創(chuàng)建材質列表對象

1G(?(T.'rialListmaterialList=newGeoii'I'ialListChiss();

〃向材質列表添加材質

materialList.AddMaterial(texture);

〃創(chuàng)建GeneraIMultiPatchCreator對象

IGeneraIMultir^atchCrecilormultiPatchCreator

二new(lenoi\ilMul1iPatchCreatorCkiss();

multiPatchCreator.Init(4,1,false,false,false,4,materialList);

〃設置Part:可以使三角扇或環(huán)

multiPatchCreator.SetPatchType(O,esriPcitchType.esriPatchTypeTriangleStrip);

multiPatchCreator.SetMaterialIndex(0,0);

multiPatchCreator.SetPatchPointIndex(0,0);

multiPatchCreator.SetPatchTexturePointIndex(0,0);

〃創(chuàng)建真實points.

WKSPointZupperLeft=newWKSPoiir.();

WKSPointZlowerLeft=newWKSPointZ();

WKSPointZupperRight=newWKSPointZ();

WKSPointZlowerRight=newWKSPointZ0;

upperLeft.X=0;

upperLeft.Y=0;

upperLeft.Z=0;

upperRight.X=300;

upperRight.Y=0;

upperRight.Z=0;

lowerl.eft.X=0;

lowerLeft.Y=0;

lowerLeft.Z=-100;

lowerRight.X=300;

lowerRight.Y=1;

lowerRight.Z=TOO;

multiPatchCreator.SetWKSPointZ(0,refupperRight);

multiPatchCreator.SetWKSPointZ(1,reflowerRight);

multiPatchCreator.SetWSPointZ⑵refupperLeft);

multiPatchCreator.SetWKSPointZ(3,reflowerLeft);

〃設置貼圖的點

WKSPointtextureUpperLeft=newWKSPoint.();

WKSPointtextureLowerLeft=newWKSPoint();

WKSPointtextureUpperRight=newWKSPoint();

WKSPointtextureLowerRight=newWKSPoint();

textureUpperLeft.X=0;textureUpperLeft.Y=0;

textureUpperRight.X=1;textureUpperRight.Y=0;

textureLowerLeft.X=0;textureLowerLeft.Y=1;

textureLowerRight.X=1;textureLowerRight.Y=1;

multiPatchCreator.SetTextureWKSPoint(0,reftextureUpperRight);

multiPatchCreator.SetTextureWKSPoint(1,reftextureLowerRight);

multiFJatchCreator.SetTextureWKSPoint(2,reftextureUpperLeft);

multiPatchCreator.SetTextureWKSPoint(3,reftextureLowerLeft);

//創(chuàng)建MultiPatch對象

1Mu11iPatchmultiPatch=multiPatchCreator.CreateMultiPatch()asIMuiliPatch;

returnmultiPatch;

catch(ExceptionErr)

MessageBox.Show(Err.Message,“提示

〃,MessageBoxBulions.OK,MessageBoxIcon.Information);

)

2.4.9Geometry集合接口

通過前邊對于具體的Geometry對象的介紹可知,除了Point對象之外,其他幾何對象都

是通過其他兒何對象集合構建而成。如MultiPoint對象是點的集合,Path對象是Segment

對象的集合,Polyline對象是Path對象的集合,Polygon對象是Ring對象的集合,

Multipatch對象是TriangleStrip和TrangleFan,Trangle,Ring對象的集合。

ArcGISEngine提供了三個主要的幾何圖形集合接口用于對幾何對象的操作,分別是

IPointCollectionJSegmentCollection和IGeometryCollection,這些接口揭示出

ArcGISEngine的幾何模型的實質——它們是一種組合構成的模式,這種組合并不一定按

照嚴格的層次結構組織。

在前面介紹一些兒何對象的時候,也給大家演示了部分使用功能,這三個接口在程序開發(fā)中

經(jīng)常使用到,接下來簡單闡述以下這三個接口的使用方法。

1GeometryCollection接口IGeometryCollection接口被Polygon,Polyline,

Multipoint,Multipatch,Trangle,TrangleStrip,TrangleFan和GeometryBag所實

現(xiàn)。IGeometryCollection接口提供的方法可以讓開發(fā)者對一個兒何對象的組成元素即子

對象進行添加,改變和移除。例如:

組成Polyline對象的子對象是Path對象。

組成Polygon對象的子對象是Ring對象。

組成Multipoint對象的子對象是Point對象。

組成MultiPatch對象的子對象是TrangleFanTrangleStrip,Triangle或Ring對象。

組成GeometryBag對象的是任何類型的幾何體對象,實際上GeometryBag是一個口]■以

容納任何類型幾何對象的容器。

IGeometryCollection的Geometry屬性可以通過一個索引值返回一個組成該幾何對象

的某個子對象,而GeometryCount返回組成該幾何對象的子對象的數(shù)目。

IGeometry的AddGeometry和AddGeometries方法都用于向一個幾何對象添加子對

象,它們的區(qū)別是前者一次只能添加一個幾何對象,而后者可以一次添加一個兒何對象數(shù)組。

除此之外,AddGeometry方法可以將子對象添加到幾何的指定索引值的位置,而

AddGeometries方法將子對象數(shù)組添加到集合的最后。

在使用AddGeometry方法添加子對象到Polygon對象的過程中,如果子對■象即Ring出

現(xiàn)覆蓋現(xiàn)象,那么多邊形就沒有封閉或出現(xiàn)了包含關系,那么這個Polygon就不是簡單

Polygon,因此通過IGometryCollection來創(chuàng)建一個Polygon時,需要使用

ITopologicalOperator的Simplify方法保證其有效性。

通過IGeometryCollection創(chuàng)建一個Polygon對象的代碼片段如卜:

III

<summary)

///

構造Polygon對象

III

</summary>

///

<paramname="pRingList”>Ring對象集合</param>

///

returns〉返回一個Polygon對象〈/returns)

private1PolygonConstruetorPo1ygon(List<JRing>pRingList)

try

〃創(chuàng)建一個Polygon對象

JGeoinoiry('oI1ectionpGCollection=newIV)lygonClass();

objecto=Type.Missing;

/遍歷Ring集合

for(inti=0;i<pRingList.Count;i++)

〃通過IGeometryCollection接口的AddGeometry方法向Polygon對象中添加Ring子對象

pGCollection.AddGeometry(pRingList,refo,refo);

}

//QiSITopologicalOperator

/Topologica1OpenitorpTopological=pGCollectionas1TopologicsiOperator;

//執(zhí)行Simplify操作

pTopologica1.SimplifyO;

IPolygonpPolygon=pGCollectionasIPolygon;

//返回Polygon對象

returnpPolygon;

)

catch(ExceptionErr)

(

Show(Err.Message,"提示”,WwyMQ'Rwi()n5.OK,,Icon.Information);

returnnull;

)

)

同樣可以通過IGeometryCollection的AddGeometryCollection方法可以將一個

Polygon中的所有子對象Ring添加到另外一個多邊形中,這樣就實現(xiàn)了合并兩個多邊形對

象為一個多邊形對象的功能,這非常有用。

以下代碼片段演示如何合并兩個Polygon對象為一個Polgyone對象:

///

〈summary)

〃/

合并兩個Polygon

///

〈/summary)

///

<paramname="firstPolygon")第一個Polygon</param>

///

<parciinna毗二'第二個Polygon〈/param>

/〃

<returns返回合并后的Polygon</returns>

privateIPolygonMergePolygons(IPolygonfirstPolygon,IPolygonSecondPolygon)

(

try

(

//創(chuàng)建一個Polygon對象

/GeometryCo/1ectionpGCollectionl=newPolygonClass();

IGeome11-yCo11ectionpGCollection2=firstPolygonas1GeometryCoHe:

IGeome11-yCo1ledionpGCollection3-SecondPolygonasIGeo/ne11yCollecIion;

//添力口firstPolygon

pGCollectionl.AddGeometryCollection(pGCollection2);

//添力口SecondPolygon

pGCollection].AddGeometryCollection(pGCollection3);

//QI至ITopologicalOperator

1Topologic'ci1OpePcitoi-pTopological-pGCollection!as1TopologicalOperator;

//執(zhí)行Simplify探作

pTopological.Simplify();

IPolygonpPolygon=pGCollectionlas[Polygon;

//返回Polygon對象

returnpPolygon;

catch(ExceptionErr)

兒、Show(Err.Message,”提示〃,J/.OK,,VcgcBcxkon.Information);

returnnull;

}

2.4.9.21SegmentCollection接U

!SegmentCollection接口被Path,Ring,PolylinePolygon四個類所實現(xiàn),它們被稱作

是Segment集合對象,使用這個接口可以處理組成Segment集合對象中的每一個子

Segment對象。使用ISegmentCollection接口可以為一個Segment集合對象添加,插

A,刪除Segment子對象。!SegmentcollectionSetCircle/ffSetRectangle

法提供了一種簡單不需要添加Segment的情況下構建一個完成的Path,Ring,Polyline和

Polygon的方法。

2.4.9.31Pointcollection接口

/PointCollection可以被多個幾何對象類所實現(xiàn),這些對象都是由多個點構成如:

Mullipoint,Path,Ring,Polyline,Polygon,TriangleFan,TrangleStrip,Trangle,Multipa

tch等,它們都可以稱作PointCollection對象,通過IPointCollection接口定義的方法可

以獲取,添加,插入,查詢,移除幾何對象中的某個頂點。同以上兩個接口一樣它也定義了

操作一個點集合對象的方法,例如通過AddPoint方法可以向PointCoUection對象中的特

定索引位添加一個點對象,如果不指定位置,則添加到最后。通過IPointCollection的Point

屬性通過頂點索引可以得到某一頂點.

在本章節(jié)最后的Demo實例將為大家演示IPointCoTlection提供的功能。

2.4.1。幾何對象總結

在Geometry模型中的幾何對象分為兩種類型,一類是用來直接構建要素類的稱為高級幾

何對象,一類用來構建高級幾何對象相對低一級的幾何對象成為構建幾何對象如下表所示:

幾何對象名

所屬類別構成子幾何對象用于創(chuàng)建和編輯的接口

IGeometryCollection,

Polyline高級Path

IPointCollection

IGeometryCollection,

Polygon高級Ring

IPointCollection

IGeometryCollection,

MultiPoint高級Point

IPointCollection

TrangleFan,RingIGeometryCollection,

MultiPatch高級

TrangleStripJrangle,IPointCollection

ISegmentCollection,

Ring低級Segment

IPointCollection

ISegmentCollection,

Path低級Segment

IPointCollection

Segment低級PointIPointJLine,ICurve

IGeometryCollection,

TriangleFan低級Point

IPointCollection

IGeometryCollection,

TriangleStrip低級Point

IPointCollection

IGeometryCollection,

Triangle低級Point

IPointCollection

Point高級/低級無IPoint

2.5空間參考

2.5.1空間參考簡介

空間參考(SpatialReference)是GIS數(shù)據(jù)的骨骼框架,能夠將我們的數(shù)據(jù)定位到相應

的位置,為地圖中的每,?點提供準確的坐標。在同一個地圖上顯示的地圖數(shù)據(jù)的空間參考

必須是一致的,如果兩個圖層的空間參考不一致,往往會導致兩幅地圖無法正確拼合,因此

開發(fā)個GIS系統(tǒng)時,為數(shù)據(jù)選擇正確的空間參考非常重要。

ArcGISEngine提供了一系列對象供開發(fā)者管理GIS系統(tǒng)的坐標系統(tǒng)。對大部分開發(fā)者而

言了解ProjectedCoordinateSystem,GeographicCoordinateSystem,

SpatialReferenceEnvironment這三個組件類是非常有必要的,對于高級開發(fā)者而言,

可能需要自定義坐標系統(tǒng)可以使用這些對象

Projection,Datum,Angularllnit,Spheriod,PrimeMeridian和GeoTransformation

等。

2.5.2修改空間參考

以下代碼片段演示了如何改變一個圖層的空間參考。

1.Ill<summary>

2.///改變圖層的空間參考

3.Ill</summary>

4.Ill<paramname="pFeatureLayer">|f|^</param>

5.Ill<paramname="pGeoType”>空間參考類型</param>

6.privatevoidChangeLayerRef(IFeatureLayerpFeatureLayer,intgcsType)

7.{

8.try

9?{

10.IFeatureClasspFeatureClass=pFeatureLayer.Featureclass;

11.//QI到IGeoDataset

12.IGeoDatasetpGeoDataset=pFeatureClassasIGeoDataset;

13.//QI到IGeoDatasetSchemaEdit

14.IGeoDatasetSchemaEditpGeoDatasetSchemaEdit=pGeoDatasetas

IGeoDatasetSchemaEdit;

15.if(pGeoDatasetSchemaEdit.CanAlterSpatialReference==true)

16.(

17.〃創(chuàng)建SpatialReferenceEnvironmentClass對象

18.ISpatialReferenceFactory2pSpaRefFactory=new

SpatialReferenceEnvironmentClass();

19.〃創(chuàng)建地理坐標系對象

20.IGeographicCoordinateSystempNewGeoSys=

pSpaRefFactory.CreateGeographicCoordinateSystem(gcsType);//4214代表

Beijingl954

21.pGeoDatasetSchemaEdit.AlterSpatialReference(pNewGeoSys);

22.}

23.)

24.catch(ExceptionErr)

25.{

26.MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,

MessageBoxIcon.Information);

27.}

28.}

2.6開發(fā)野外測量點構建一個Polygon幾何要素程序

2.6.1功能情景描述

現(xiàn)有一存儲為*.txt格式文本文件存儲野外測量幾個建筑物的坐標信息,如圖所示,我們需

要通過開發(fā)一個功能能夠讀取這些這些坐標信息并根據(jù)坐標點建筑物屬性來構建建筑物,并

創(chuàng)建成?個ShapeFile加載到MapControl±o

建筑物測量.txt-記事本

文件(F)編錯(E)格式(0)查看(V)幫助(H)

K坐標,Y坐標,建筑物

100,100,建筑物1

200,100,建筑物1

200,200,建筑物1

100,200,建筑物1

500,400,建筑物2

600,300,建筑物2

700,如0,建筑物2

700,600,建筑物2

600,800,建筑物2

-100,100,建筑物3

-100,500,建筑物3

-200,500,建筑物3

-200,200,建筑物3

步驟一:添加一個Form,并添

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論