ArcEngine-空間分析解析課件_第1頁
ArcEngine-空間分析解析課件_第2頁
ArcEngine-空間分析解析課件_第3頁
ArcEngine-空間分析解析課件_第4頁
ArcEngine-空間分析解析課件_第5頁
已閱讀5頁,還剩143頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第11講空間分析1第11講空間分析1復習一下專題地圖的幾種樣式重點掌握幾個對象復習一下專題地圖的幾種樣式11空間分析空間分析是在對地理空間中的目標進行形態(tài)結(jié)構(gòu)定義與分類的基礎上,對目標的空間關(guān)系和空間行為進行捆,為目標的空間查詢和空間相關(guān)分析提供參考,進一步為時間性服務的功能體系通過空間分析不僅可以知道數(shù)據(jù)庫的數(shù)據(jù),而且可以通過這些數(shù)據(jù)云提示更深刻、更內(nèi)在的規(guī)律和特征。衡量一個GIS系統(tǒng)的好壞,關(guān)鍵要看其空間分析功能是否強大,實用與靈活性形態(tài)分析、空間查詢、空間關(guān)系描述,空間相關(guān)分析和空間決策11空間分析空間分析是在對地理空間中的目標進行形態(tài)結(jié)構(gòu)定義11.1空間查詢與分析的基礎

11.1.1基礎概念空間查詢與分析的基礎的基礎是對空間圖形的運算操作如:交、并、差、異或、緩沖,裁減,誰計算凸殼、切分,簡化,移動,縮放,長度和面積11.1空間查詢與分析的基礎

11.1.1基礎概念11.1.2使用ITopologicalOperator接口來操作圖形ITopologicalOperator接口是AE當中非常重要的接口,實現(xiàn)它的對象包括:GeometryBag,Multipoint,Point,polyline,polygon.只要把運算的圖形轉(zhuǎn)換為五個當中的一個,就可以用它來運算11.1.2使用ITopologicalOperator接口組件對象模型圖組件對象模型圖Boundary:只讀,獲得圖形的邊框。面的國邊框為polyline,線的邊框為Multipoint,點或Multipoint的邊框為空或者MultipointBuffer:緩沖區(qū)操作Clip:裁剪操作ConstructUnion:兩個以上多邊形的合并Difference:差運算Intersect:交運算Boundary:只讀,獲得圖形的邊框。面的國邊框為polIsKnownSimple:Boolean,指示圖形是否為簡化的,拓樸是否正確IsSimple:Boolean,指示是否使用了Simplify方法對圖形進行了簡化操作Simplify:簡化對象SymmetricDifference:Xor,異或操作Union:并操作IsKnownSimple:Boolean,指示圖形是否為簡Simplify方法Simplify方法simplifysimplifyUnionUnionUnion代碼(參看VB與VB2005的代碼)'并操作PublicFunctionUnion(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox"圖形不能是裁切矩形"Union=g1ExitFunctionEndIfpTopo=g1'使用ITopologicalOperator接口pTopo.Simplify'簡化圖形pTopo2=g2pTopo2.SimplifyUnion=pTopo.Union(g2)'合并pTopo=NothingpTopo2=NothingEndFunctionUnion代碼(參看VB與VB2005的代碼)'并操作InterSect(交)操作InterSect(交)操作InterSect(參看VB與VB2005的代碼)DimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimiDimensionAsesriGeometryDimensionIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox("圖形不能是裁切矩形")InterSect=g1ExitFunctionEndIfpTopo=g1pTopo.Simplify()pTopo2=g2pTopo2.Simplify()iDimension=IIf(g1.Dimension<g2.Dimension,g1.Dimension,g2.Dimension)InterSect=pTopo.InterSect(g2,iDimension)pTopo=NothingpTopo2=NothingInterSect(參看VB與VB2005的代碼)DimpDifference(差)操作Difference(差)操作Difference(參看VB與VB2005的代碼)DimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatoIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox("圖形不能是裁切矩形")Difference=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox("兩個圖形的維數(shù)(Dimension)必需相同")ExitFunctionEndIfpTopo=g1pTopo.Simplify()

pTopo2=g2

pTopo2.Simplify()Difference=pTopo.Difference(g2)pTopo=NothingDifference(參看VB與VB2005的代碼)DimSymmetricDifference(異或)操作SymmetricDifference(異SymmetricDifference(參看VB與VB2005的代碼)DimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox("圖形不能是裁切矩形")SymmetricDifference=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox("兩個圖形的維數(shù)(Dimension)必需相同")ExitFunctionEndIfpTopo=g1pTopo.Simplify()pTopo2=g2pTopo2.Simplify()SymmetricDifference=pTopo.SymmetricDifference(g2)pTopo=NothingpTopo2=NothingSymmetricDifference(參看VB與VB200Clip(剪切)操作Clip(剪切)操作'裁剪(參看VB與VB2005的代碼)

PublicFunctionClip(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"SetClip=g1ExitFunctionEndIfIfNotTypeOfg2IsIEnvelopeThenMsgBox"繪制的第二個圖形必需是裁剪矩形,請刷屏然后重新繪制!"SetClip=g1ExitFunctionEndIfSetpTopo=g1pTopo.SimplifypTopo.Clipg2Clip=pTopopTopo=NothingEndFunction'裁剪(參看VB與VB2005的代碼)

PublicFuCut(切分)操作Cut(切分)操作Cut(切分)操作代碼PublicFunctionCut(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimpLAsIGeometryDimpRAsIGeometryIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"Cut=g1ExitFunctionEndIfIfNotTypeOfg2IsIPolylineThenMsgBox"繪制的第二個圖形必需是Polyline,請刷屏然后重新繪制!"Cut=g1ExitFunctionEndIfMsgBox"屏幕上顯示的是切分出來的左多邊形!"pTopo=g1pTopo.SimplifypTopo2=g2pTopo2.SimplifyOnErrorGoToErrpTopo.Cutg2,pL,pRCut=pLpTopo=NothingpTopo2=NothingExitFunctionErr:MsgBox"切分線可能無法完整的切分圖形!"EndFunctionCut(切分)操作代碼PublicFunBuffer(緩沖區(qū))操作Buffer(緩沖區(qū))操作Buffer(緩沖區(qū))操作代碼PublicFunctionBuffer(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimpG1AsIGeometryDimpG2AsIGeometryIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"Buffer=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox"本示例代碼要求圖形1和圖形2的維數(shù)相同,以便合并操作!"Buffer=g1ExitFunctionEndIfpTopo=g1pTopo.SimplifypG1=pTopo.Buffer(50)pTopo2=g2pTopo2.SimplifypG2=pTopo2.Buffer(50)Buffer=Union(pG1,pG2)pTopo=NothingpTopo2=NothingEndFunctionBuffer(緩沖區(qū))操作代碼Boundary(提取邊界)操作Boundary(提取邊界)操作Boundary(提取邊界)操作代碼PublicFunctionBoundary(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimpG1AsIGeometryDimpG2AsIGeometryIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"Boundary=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox"本示例代碼要求圖形1和圖形2的維數(shù)相同,以便合并操作!"Boundary=g1ExitFunctionEndIfpTopo=g1pTopo.SimplifypG1=pTopo.BoundarypTopo2=g2pTopo2.SimplifypG2=pTopo2.BoundaryBoundary=Union(pG1,pG2)pTopo=NothingpTopo2=NothingEndFunctionBoundary(提取邊界)操作代碼PublicFuncITopologicalOperator注意事項1)兩個Geometry不僅要有坐標系統(tǒng),而且必須是相同的坐標系統(tǒng)。如果不是,把一個Geometry投影到另一個的坐標系統(tǒng)中去。先設置IGeometry::SpatialReference,然后調(diào)用IGeometry::Project并把坐標系統(tǒng)作為參數(shù)。有時沒有必要設置坐標系統(tǒng),只要調(diào)用Project就行了ITopologicalOperator注意事項1)兩個G2)Snapbothgeometriestothespatialreference.ThiscanbedonebycallingIGeometry::SnapToSpatialReference.

捕捉Geometry到坐標系統(tǒng)??梢酝ㄟ^調(diào)用IGeometry::SnapToSpatialReference來實現(xiàn)。

2)Snapbothgeometriestothe3)Simplifybothgeometries.ThiscanbedonebyaQItoITopologicalOperator2andsettingIsKnownSimpletoFalseandthencallingSimplify.

保證兩個Geometry都是拓撲簡單的。先通過QI查詢ITopologicalOperator2接口并設置IsKnownSimple為False,然后調(diào)用Simplify。

3)Simplifybothgeometries.Th11.2空間查詢空間查詢是使用一定的條件在空間數(shù)據(jù)中搜索相應的結(jié)果集,和一般的查詢不同的是,這種查詢是對空間對象的搜索,而不是對文字信息的搜索?;诳臻g屬性的查詢基本空間位置的查詢11.2空間查詢空間查詢是使用一定的條件在空間數(shù)據(jù)中搜索相11.2.1QuerFilter對象的重要屬性方法(參看程序)Addfield:向QuerFilter中添加一個字段到Subfields用來查詢Outputspatialreference:以字段設置或者讀取空間參考Whereclause:SQL語句(不含select*from查詢)FeatureCursor是一個可以包含多個Feature對象,他實現(xiàn)了IFeature接口與ICursor接口,通過:IFeatureCursornextfeature方法可以遍歷所有Feature對象,通過ICursor:nextRow,可以所有屬性記錄11.2.1QuerFilter對象的重要屬性方法(參看程序Geodatabase類庫當中Geodatabase類庫當中11.2.2基于空間位置的查詢IspationFiter11.2.2基于空間位置的查詢IspationFiterGeometryfield:圖形字段的字段名稱,即shape字段Spatialrel:查詢的空間關(guān)系。相交,相接,穿越,包含等Spataildescription:自定義的查詢的空間關(guān)系Geometry:用來查詢的圖形,比如拉框查詢的“框”Geometryfield:圖形字段的字段名稱,即shapeSpatilRel屬性的類型esrispatiolrelenum,定義如下SpatilRel屬性的類型esrispatiolrelenISpatialFilter.SpatialRelDescriptionISpatialFilter.SpatialRelDescr點查詢DimpPtAsesriGeometry.PointDimpGeoAsIGeometryDimpSpatialFilterAsISpatialFilterDimpFeaturelayerAsIFeatureLayerDimpTopoAsITopologicalOperator'創(chuàng)建點查詢的“點”,注意在點查詢中,真正的點對于點、線對象的相交是很難的'因此我們設置一個容差,用一個很小的面來代替點是很好的做法SetpPt=MapControl.ToMapPoint(x,y)SetpTopo=pPtSetpGeo=pTopo.Buffer(0.01)'創(chuàng)建SpatialFilterSetpSpatialFilter=NewSpatialFilterWithpSpatialFilterSet.Geometry=pGeo.SpatialRel=esriSpatialRelIntersectsEndWith點查詢DimpPtAsesriGeometry.Po執(zhí)行查詢pSpatialFilter.GeometryField=pFeaturelayer.FeatureClass.ShapeFieldNameSetpFeatureCursor=pFeaturelayer.Search(pSpatialFilter,False)SetpFeature=pFeatureCursor.NextFeature執(zhí)行查詢pSpatialFilter.GeometryFi多邊形查詢SetpPolygon=MapControl.TrackPolygon'創(chuàng)建SpatialFilterSetpSpatialFilter=NewSpatialFilterWithpSpatialFilterSet.Geometry=pPolygon.SpatialRel=esriSpatialRelIntersectsEndWith多邊形查詢SetpPolygon=MapContro線查詢'創(chuàng)建點查詢的“線”SetpPolyline=MapControl.TrackLine'創(chuàng)建SpatialFilterSetpSpatialFilter=NewSpatialFilterWithpSpatialFilterSet.Geometry=pPolyline.SpatialRel=esriSpatialRelIntersectsEndWith線查詢'創(chuàng)建點查詢的“線”11.3聯(lián)合查詢SetpPolygon=MapControl.TrackPolygon'創(chuàng)建SpatialFilterSetpSpatialFilter=NewSpatialFilterWithpSpatialFilterSet.Geometry=pPolygon.SpatialRel=esriSpatialRelIntersects

.WhereClause=pLabel.CaptionEndWith11.3聯(lián)合查詢SetpPolygon=MapContIRubberBand經(jīng)常需要在項目中畫地理要素(Feature)時或者畫元素(Element),其實IRUbberBand接口就實現(xiàn)了繪制幾何形體(Geometry)的方法TrackNew,以及移動一個一個幾何形體的方法TrackExisting。IRUbberBand接口有兩個方法:1,TrackExisting方法;2,TrackNew方法;

IRubberBand經(jīng)常需要在項目中畫地理要素(Featu11.4地圖代數(shù)功能1:求面積DimpActViewAsIActiveView=AxMapControl1.MapDimpScreenAsIScreenDisplay=pActView.ScreenDisplayDimpRubberAsIRubberBand=NewRubberPolygonClass()DimpPolygonAsIPolygon=TryCast(pRubber.TrackNew(pScreen,Nothing),IPolygon)DimpAreaAsIArea=TryCast(pPolygon,IArea)DimdAreaAsDouble=pArea.AreaMessageBox.Show("面積為:"&dArea)11.4地圖代數(shù)功能1:求面積DimpActViewAs地圖代數(shù)功能2:求多邊形線的長度DimpActViewAsIActiveView=AxMapControl1.MapDimpScreenAsIScreenDisplay=pActView.ScreenDisplayDimpRubberAsIRubberBand=NewRubberLineDimpPolAsIPolyline=TryCast(pRubber.TrackNew(pScreen,Nothing),IPolyline))DimdlenAsDouble=pPol.LengthMessageBox.Show("長度為:"&dlen)地圖代數(shù)功能2:求多邊形線的長度DimpActViewA以下是VBA的一些功能代碼使用方法

1打開屬性表,選擇計算的字段,右點選擇CalculateValues;

2.選擇“是”,進入FieldCalculator;

2選擇Advance選項;

3在Pre-LogicVBAScriptCode編輯框中輸入VBA代碼;

4在下面編輯框中輸入賦值部分.

以下是VBA的一些功能代碼使用方法

1打開屬性表,選擇計算的1多邊形面積

VBA部分:

DimpGeoAsIGeometry

SetpGeo=[Shape]

DimpPolygonAsIPolygon

SetpPolygon=pGeo

DimpAreaAsIArea

SetpArea=pPolygon

賦值部分:

pArea.Area

1多邊形面積

VBA部分:

DimpGeoAsIGe2-多邊形周長

VBA部分:

DimpGeoAsIGeometry

SetpGeo=[Shape]

DimpPolygonAsIPolygon

SetpPolygon=pGeo

賦值部分:

pPolygon.Length

2-多邊形周長

VBA部分:

DimpGeoAsIGe3--多邊形重心X

VBA部分:

DimpGeoAsIGeometry

SetpGeo=[Shape]

DimpPolygonAsIPolygon

SetpPolygon=pGeo

DimpAreaAsIArea

SetpArea=pPolygon

DimpPointAsIPoint

SetpPoint=pArea.Centroid

賦值部分:

pPoint.X

3--多邊形重心X

VBA部分:

DimpGeoAsI5-多邊形重心Y

VBA部分:

同上

賦值部分:

pPoint.Y

5-多邊形重心Y

VBA部分:

同上

賦值部分:

pPoin6-Polyline長度

VBA部分:

DimpGeoAsIGeometry

SetpGeo=[Shape]

DimpPolylineAsIPolyline

SetpPolyline=pGeo

DimpCurveAsIPolycurve

SetpCurve=pPolyline

賦值部分:

pCurve.Length

6-Polyline長度

VBA部分:

DimpGeo7--點坐標X

VBA部分:

DimpGeoAsIGeometry

SetpGeo=[Shape]

DimpPointAsIPoint

SetpPoint=pGeo

賦值部分:

pPoint.X

7--點坐標X

VBA部分:

DimpGeoAsIGe8--點坐標Y

VBA部分:

同上

賦值部分:

pPoint.Y

8--點坐標Y

VBA部分:

同上

賦值部分:

pPoint9--表示點坐標X

VBA部分:

DimpDocAsIMxDocument

SetpDoc=ThisDocument

DimpSpRefAsISpatialReference

SetpSpRef=pDoc.FocusMap.SpatialReference

DimpCloneAsIClone

SetpClone=[Shape]

DimpGeoAsIGeometry

SetpGeo=pClone.Clone

DimpPointasIPoint

SetpPoint=pGeo

pGeo.ProjectpSpRef

賦值部分:

pPoint.X

9--表示點坐標X

VBA部分:

DimpDocAsI10--表示點坐標Y

VBA部分:

同上

賦值部分:

pPoint.Y

坐標值為OntheFly顯示的坐標,不是文件存儲的固有坐標

10--表示點坐標Y

VBA部分:

同上

賦值部分:

pPo11--連續(xù)編號

VBA部分:

StaticlCountaslong

lCount=lCount+1

賦值部分:

lCount(從1開始)

lCount-1(從0開始)11--連續(xù)編號

VBA部分:

StaticlCount11.5緩沖區(qū)分析地理目標的延展或擴展,在實際問題中可以理解為地理目標的影響范圍,如污染源的影響范圍。分析步驟:獲得要被進行緩沖運算的圖形(Igeometry);第二步對獲得的圖形進行緩沖運算生成一個新的圖形(Igeometry);第三步:再利用這個新的圖形進行復雜的空間查詢等操作。11.5緩沖區(qū)分析地理目標的延展或擴展,在實際問題中可以理解DimpPtAsIPointDimpGeoAsIGeometryDimpMapCtrlAsMapControlDimpFeatLyrAsIFeatureLayerDimpFSelectionAsIFeatureSelectionDimpFilterAsISpatialFilterDimpTopoAsITopologicalOperatorDimiAsInteger,CountAsIntegerSetpMapCtrl=m_pHook.hook

SetpPt=pMapCtrl.ToMapPoint(x,y)SetpTopo=pPtCount=pMapCtrl.LayerCount

DimpPtAsIPointSetpFilter=NewSpatialFilter

WithpFilterSet.Geometry=pTopo.Buffer(0.05).SpatialRel=esriSpatialRelIntersectsEndWithFori=0ToCount-1SetpFSelection=pMapCtrl.Layer(i)

pFSelection.SelectFeaturespFilter,esriSelectionResultNew,FalseNextpMapCtrl.RefreshesriViewGeoSelectionSetpFilter=NewSpatialFilte11.6疊加分析疊置分析(overlayanalysis)是地理信息系統(tǒng)提取空間隱含信息的手段之一。它是將一個區(qū)域兩組或兩組以上的地物要素進行疊加,從而產(chǎn)生新特征的分析方法。矢量疊置分析與疊置柵格分析11.6疊加分析疊置分析(overlayanalysis)11.6.1基于矢量的疊置分析點與多邊形的疊置分析:比如分析城市中每個學校的數(shù)量線與多邊形的疊置分析:如:科用一個河流要素層,可以找出哪條河流在哪個宗地內(nèi)以及這條河流有多長一段落在這塊宗地內(nèi)等多邊形與多邊形的疊置分析:如將宗地地塊要素層與污染區(qū)域要素層進行疊置分析(如把宗地要素層和水系要素層進行疊置,來獲得河流在宗地上的邊界信息,擦除疊置)11.6.1基于矢量的疊置分析點與多邊形的疊置分析:比如分析AE開發(fā)中,矢量圖層疊加分析需要用到的主要類為BasicGeoprocessor,其主要接口為IBasicGeoprocessor。IBasicGeoprocessor接口提供了基本的空間數(shù)據(jù)處理的方法和屬性,其中包括疊加求交(Interset)和疊加求和(Union)。

AE開發(fā)中,矢量圖層疊加分析需要用到的主要類為BasicIBasicGeoprocessorInterface

MembersDescription

CancelTracker Thecanceltracker.Clip Clipsfeatures.

Dissolve Dissolvesfeatures.Intersect Intersectsfeatures.

Merge Mergesfeatures.SpatialReference Theoutputspatialreference.Union Createsaunionoffeatures.BasicGeoprocessor:CoClassesthatimplementIBasicGeoprocessorIBasicGeoprocessorInterface

M下面提供一個疊加求交的開發(fā)實例:Private

SubM_OverLayer_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)

Try

'分析層

DimpLayerAsILayer=Me.axMapControl1.get_Layer(0)

DimpInputFeatLayerAsIFeatureLayer=TryCast(pLayer,IFeatureLayer)

DimpInputTableAsITable=TryCast(pLayer,ITable)

DimpInputFeatClassAsIFeatureClass=pInputFeatLayer.FeatureClass

'疊加表

pLayer=Me.axMapControl1.get_Layer(1)

DimpOverlayTableAsITable=TryCast(pLayer,ITable)

下面提供一個疊加求交的開發(fā)實例:PrivateSubM_

'疊加分析表

DimpFeatClassNameAsIFeatureClassName=NewFeatureClassNameClass()

pFeatClassName.FeatureType=esriFeatureType.esriFTSimple

pFeatClassName.ShapeFieldName="shape"

pFeatClassName.ShapeType=pInputFeatClass.ShapeType

'工作空間名稱

DimpNewWSNameAsIWorkspaceName=NewWorkspaceNameClass()

pNewWSName.WorkspaceFactoryProgID="esriDataSourcesFile.ShapefileWorkspaceFactory"

pNewWSName.PathName="C:\temp"

'疊加分析表

'數(shù)據(jù)集名稱

DimpDatasetNameAsIDatasetName=TryCast(pFeatClassName,IDatasetName)

pDatasetName.Name="ss"

pDatasetName.WorkspaceName=pNewWSName

'幾何處理

DimpBGPAsIBasicGeoprocessor=NewBasicGeoprocessorClass()

DimpOutputFeatClassAsIFeatureClass=pBGP.Intersect(pInputTable,False,pOverlayTable,False,0.01,pFeatClassName)

'數(shù)據(jù)集名稱'輸出要素層設置

DimpOutputFeatLayerAsIFeatureLayer=NewFeatureLayerClass()

pOutputFeatLayer.FeatureClass=pOutputFeatClass

pOutputFeatLayer.Name=pOutputFeatClass.AliasName

Me.axMapControl1.AddLayer(DirectCast(pOutputFeatClass,ILayer),0)

axMapControl1.Update()

CatchexAsException

MessageBox.Show(ex.Message)

End

Try

End

Sub

'輸出要素層設置11.6.2基于柵格的數(shù)據(jù)分析柵格數(shù)據(jù)具有空間信息隱含但屬性信息明顯的特點,利用多層柵格數(shù)據(jù)進行各種各樣的疊加,可以發(fā)現(xiàn)大量的空間現(xiàn)或空間過程,比如將同一地區(qū)不同時期的影像疊加,可以獲得城市擴張,森林砍伐,洪水淹沒,山體滑坡等信息。11.6.2基于柵格的數(shù)據(jù)分析柵格數(shù)據(jù)具有空間信息隱含但屬性RasterMathOps組件TheRasterMathOps

methodsprovideaccesstoafullsuiteofmathematicaloperatorsandfunctions.Theseoperatorsandfunctionsenablethevaluesinmultiplerasterstobecombinedarithmetically—addition,subtraction,multiplication,anddivision,forexample.Inaddition,themathematicalmanipulationofthevaluesinasingleinputraster(sine,exponent,power,andsoon),theevaluationofmultipleinputrasters(BooleanAnd,GreaterThan,combinations,andsoforth),andtheevaluationandmanipulationofthevaluesinthebinaryformat(BitwiseAndandBitwiseLeftShift,forexample)arealsosupportedbythesemethods.RasterMathOps組件TheRasterMathOesriSpatialAnalyst.rastermathops參看SpatialAnalyst模型圖1)基于柵格的代數(shù)運算2)基于數(shù)學變換的數(shù)學變換(指數(shù),對數(shù),三角變換)等3)基于多上柵格要素層的運算,包括代數(shù)運算(+-/*)和邏輯運算等esriSpatialAnalyst.rastermathoImathopAbs:用于計算柵格像無的絕對值并寫入新數(shù)據(jù)集。Divide:用于把兩輸入柵格像元值并寫入新數(shù)據(jù)集Exp:用于柵格像元以e為底的次方并寫入新數(shù)據(jù)集Exp10Exp2FloatIntImathopAbs:用于計算柵格像無的絕對值并寫入新數(shù)據(jù)集Log10Log2Minus:兩像元相減ModNegatgePlusPowerSquareTimesLog10ILogialOp接口:邏輯運算方法ITrigOP接口:提供了柵格三角運算方法。ILogialOp接口:邏輯運算方法DimpRas01AsIRaster

SetpRas01=OpenDefaultIRaster("C:\Data","InRas01")

DimpRas02AsIRaster

SetpRas02=OpenDefaultIRaster("C:\Data","InRas02")

DimpEnvAsIRasterAnalysisEnvironment

SetpEnv=pMapAlgebraOp

SetpEnv.OutWorkspace=OpenIRasterWorkspace("C:\Workspace")

DimpRasOutAsIRaster

DimpRas01AsIRaster

SetpR

SetpMapAlgebraOp=NewRasterMapAlgebraOp

pMapAlgebraOp.BindRasterpRas01,"Ras01"

pMapAlgebraOp.BindRasterpRas02,"Ras02"

SetpRasOut=pMapAlgebraOp.Execute("[Ras01]+[Ras02]")

'SaveOutputRaster

DimsRasNmOutAsString

sRasNmOut="outRas01"

RasterSaveOnDisk(pRasOut,"C:\Workspace",sRasNmOut,"GRID")

在幫助中找到了以上的代碼,能不能SetpRasOut=pMapAlgebraOp.Execute("[Ras01]+[Ras02]")這個代碼多加幾個數(shù)據(jù)集就可以了

SetpMapAlgebraOp=NewRast第11講空間分析75第11講空間分析1復習一下專題地圖的幾種樣式重點掌握幾個對象復習一下專題地圖的幾種樣式11空間分析空間分析是在對地理空間中的目標進行形態(tài)結(jié)構(gòu)定義與分類的基礎上,對目標的空間關(guān)系和空間行為進行捆,為目標的空間查詢和空間相關(guān)分析提供參考,進一步為時間性服務的功能體系通過空間分析不僅可以知道數(shù)據(jù)庫的數(shù)據(jù),而且可以通過這些數(shù)據(jù)云提示更深刻、更內(nèi)在的規(guī)律和特征。衡量一個GIS系統(tǒng)的好壞,關(guān)鍵要看其空間分析功能是否強大,實用與靈活性形態(tài)分析、空間查詢、空間關(guān)系描述,空間相關(guān)分析和空間決策11空間分析空間分析是在對地理空間中的目標進行形態(tài)結(jié)構(gòu)定義11.1空間查詢與分析的基礎

11.1.1基礎概念空間查詢與分析的基礎的基礎是對空間圖形的運算操作如:交、并、差、異或、緩沖,裁減,誰計算凸殼、切分,簡化,移動,縮放,長度和面積11.1空間查詢與分析的基礎

11.1.1基礎概念11.1.2使用ITopologicalOperator接口來操作圖形ITopologicalOperator接口是AE當中非常重要的接口,實現(xiàn)它的對象包括:GeometryBag,Multipoint,Point,polyline,polygon.只要把運算的圖形轉(zhuǎn)換為五個當中的一個,就可以用它來運算11.1.2使用ITopologicalOperator接口組件對象模型圖組件對象模型圖Boundary:只讀,獲得圖形的邊框。面的國邊框為polyline,線的邊框為Multipoint,點或Multipoint的邊框為空或者MultipointBuffer:緩沖區(qū)操作Clip:裁剪操作ConstructUnion:兩個以上多邊形的合并Difference:差運算Intersect:交運算Boundary:只讀,獲得圖形的邊框。面的國邊框為polIsKnownSimple:Boolean,指示圖形是否為簡化的,拓樸是否正確IsSimple:Boolean,指示是否使用了Simplify方法對圖形進行了簡化操作Simplify:簡化對象SymmetricDifference:Xor,異或操作Union:并操作IsKnownSimple:Boolean,指示圖形是否為簡Simplify方法Simplify方法simplifysimplifyUnionUnionUnion代碼(參看VB與VB2005的代碼)'并操作PublicFunctionUnion(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox"圖形不能是裁切矩形"Union=g1ExitFunctionEndIfpTopo=g1'使用ITopologicalOperator接口pTopo.Simplify'簡化圖形pTopo2=g2pTopo2.SimplifyUnion=pTopo.Union(g2)'合并pTopo=NothingpTopo2=NothingEndFunctionUnion代碼(參看VB與VB2005的代碼)'并操作InterSect(交)操作InterSect(交)操作InterSect(參看VB與VB2005的代碼)DimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimiDimensionAsesriGeometryDimensionIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox("圖形不能是裁切矩形")InterSect=g1ExitFunctionEndIfpTopo=g1pTopo.Simplify()pTopo2=g2pTopo2.Simplify()iDimension=IIf(g1.Dimension<g2.Dimension,g1.Dimension,g2.Dimension)InterSect=pTopo.InterSect(g2,iDimension)pTopo=NothingpTopo2=NothingInterSect(參看VB與VB2005的代碼)DimpDifference(差)操作Difference(差)操作Difference(參看VB與VB2005的代碼)DimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatoIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox("圖形不能是裁切矩形")Difference=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox("兩個圖形的維數(shù)(Dimension)必需相同")ExitFunctionEndIfpTopo=g1pTopo.Simplify()

pTopo2=g2

pTopo2.Simplify()Difference=pTopo.Difference(g2)pTopo=NothingDifference(參看VB與VB2005的代碼)DimSymmetricDifference(異或)操作SymmetricDifference(異SymmetricDifference(參看VB與VB2005的代碼)DimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorIfNotTypeOfg1IsITopologicalOperatorOrNotTypeOfg2IsITopologicalOperatorThenMsgBox("圖形不能是裁切矩形")SymmetricDifference=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox("兩個圖形的維數(shù)(Dimension)必需相同")ExitFunctionEndIfpTopo=g1pTopo.Simplify()pTopo2=g2pTopo2.Simplify()SymmetricDifference=pTopo.SymmetricDifference(g2)pTopo=NothingpTopo2=NothingSymmetricDifference(參看VB與VB200Clip(剪切)操作Clip(剪切)操作'裁剪(參看VB與VB2005的代碼)

PublicFunctionClip(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"SetClip=g1ExitFunctionEndIfIfNotTypeOfg2IsIEnvelopeThenMsgBox"繪制的第二個圖形必需是裁剪矩形,請刷屏然后重新繪制!"SetClip=g1ExitFunctionEndIfSetpTopo=g1pTopo.SimplifypTopo.Clipg2Clip=pTopopTopo=NothingEndFunction'裁剪(參看VB與VB2005的代碼)

PublicFuCut(切分)操作Cut(切分)操作Cut(切分)操作代碼PublicFunctionCut(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimpLAsIGeometryDimpRAsIGeometryIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"Cut=g1ExitFunctionEndIfIfNotTypeOfg2IsIPolylineThenMsgBox"繪制的第二個圖形必需是Polyline,請刷屏然后重新繪制!"Cut=g1ExitFunctionEndIfMsgBox"屏幕上顯示的是切分出來的左多邊形!"pTopo=g1pTopo.SimplifypTopo2=g2pTopo2.SimplifyOnErrorGoToErrpTopo.Cutg2,pL,pRCut=pLpTopo=NothingpTopo2=NothingExitFunctionErr:MsgBox"切分線可能無法完整的切分圖形!"EndFunctionCut(切分)操作代碼PublicFunBuffer(緩沖區(qū))操作Buffer(緩沖區(qū))操作Buffer(緩沖區(qū))操作代碼PublicFunctionBuffer(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimpG1AsIGeometryDimpG2AsIGeometryIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"Buffer=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox"本示例代碼要求圖形1和圖形2的維數(shù)相同,以便合并操作!"Buffer=g1ExitFunctionEndIfpTopo=g1pTopo.SimplifypG1=pTopo.Buffer(50)pTopo2=g2pTopo2.SimplifypG2=pTopo2.Buffer(50)Buffer=Union(pG1,pG2)pTopo=NothingpTopo2=NothingEndFunctionBuffer(緩沖區(qū))操作代碼Boundary(提取邊界)操作Boundary(提取邊界)操作Boundary(提取邊界)操作代碼PublicFunctionBoundary(g1AsIGeometry,g2AsIGeometry)AsIGeometryDimpTopoAsITopologicalOperatorDimpTopo2AsITopologicalOperatorDimpG1AsIGeometryDimpG2AsIGeometryIfNotTypeOfg1IsITopologicalOperatorThenMsgBox"圖形1不能是裁切矩形"Boundary=g1ExitFunctionEndIfIfg1.Dimension<>g2.DimensionThenMsgBox"本示例代碼要求圖形1和圖形2的維數(shù)相同,以便合并操作!"Boundary=g1ExitFunctionEndIfpTopo=g1pTopo.SimplifypG1=pTopo.BoundarypTopo2=g2pTopo2.SimplifypG2=pTopo2.BoundaryBoundary=Union(pG1,pG2)pTopo=NothingpTopo2=NothingEndFunctionBoundary(提取邊界)操作代碼PublicFuncITopologicalOperator注意事項1)兩個Geometry不僅要有坐標系統(tǒng),而且必須是相同的坐標系統(tǒng)。如果不是,把一個Geometry投影到另一個的坐標系統(tǒng)中去。先設置IGeometry::SpatialReference,然后調(diào)用IGeometry::Project并把坐標系統(tǒng)作為參數(shù)。有時沒有必要設置坐標系統(tǒng),只要調(diào)用Project就行了ITopologicalOperator注意事項1)兩個G2)Snapbothgeometriestothespatialreference.ThiscanbedonebycallingIGeometry::SnapToSpatialReference.

捕捉Geometry到坐標系統(tǒng)??梢酝ㄟ^調(diào)用IGeometry::SnapToSpatialReference來實現(xiàn)。

2)Snapbothgeometriestothe3)Simplifybothgeometries.ThiscanbedonebyaQItoITopologicalOperator2andsettingIsKnownSimpletoFalseandthencallingSimplify.

保證兩個Geometry都是拓撲簡單的。先通過QI查詢ITopologicalOperator2接口并設置IsKnownSimple為False,然后調(diào)用Simplify。

3)Simplifybothgeometries.Th11.2空間查詢空間查詢是使用一定的條件在空間數(shù)據(jù)中搜索相應的結(jié)果集,和一般的查詢不同的是,這種查詢是對空間對象的搜索,而不是對文字信息的搜索?;诳臻g屬性的查詢基本空間位置的查詢11.2空間查詢空間查詢是使用一定的條件在空間數(shù)據(jù)中搜索相11.2.1QuerFilter對象的重要屬性方法(參看程序)Addfield:向QuerFilter中添加一個字段到Subfields用來查詢Outputspatialreference:以字段設置或者讀取空間參考Whereclause:SQL語句(不含select*from查詢)FeatureCursor是一個可以包含多個Feature對象,他實現(xiàn)了IFeature接口與ICursor接口,通過:IFeatureCursornextfeature方法可以遍歷所有Feature對象,通過ICursor:nextRow,可以所有屬性記錄11.2.1QuerFilter對象的重要屬性方法(參看程序Geodatabase類庫當中Geodatabase類庫當中11.2.2基于空間位置的查詢IspationFiter11.2.2基于空間位置的查詢IspationFiterGeometryfield:圖形字段的字段名稱,即shape字段Spatialrel:查詢的空間關(guān)系。相交,相接,穿越,包含等Spataildescription:自定義的查詢的空間關(guān)系Geometry:用來查詢的圖形,比如拉框查詢的“框”Geometryfield:圖形字段的字段名稱,即shapeSpatilRel屬性的類型esrispatiolrelenum,定義如下SpatilRel屬性的類型esrispatiolrelenISpatialFilter.SpatialRelDescriptionISpatialFilter.SpatialRelDescr點查詢DimpPtAsesriGeometry.PointDimpGeoAsIGeometryDimpSpatialFilterAsISpatialFilterDimpFeaturelayerAsIFeatureLayerDimpTopoAsITopologicalOperator'創(chuàng)建點查詢的“點”,注意在點查詢中,真正的點對于點、線對象的相交是很難的'因此我們設置一個容差,用一個很小的面來代替點是很好的做法SetpPt=MapControl.ToMapPoint(x,y)SetpTopo=pPtSetpGeo=pTopo.Buffer(0.01)'創(chuàng)建SpatialFilterSetpSpatialFilter=NewSpatialFilterWithpSpatialFilterSet.Geometry=pGeo.SpatialRel=esriSpatialRelIntersectsEndWith點查詢DimpPtAsesriGeometry.Po執(zhí)行查詢pSpatialFilter.GeometryField=pFeaturelayer.FeatureClass.ShapeFieldNameSetpFeatureCursor=pFeaturelayer.Search(pSpatialFilter,False)SetpFeature=pFeatureCursor.NextFeature執(zhí)行查詢pSpatialFilter.GeometryFi多邊形查詢SetpPolygon=MapControl.TrackPolygon'創(chuàng)建SpatialFilterSetpSpatialFilter=NewSpatialFilterWithpSpatialFilterSet.Geometry=pPolygon.SpatialRel=esriSpatialRelIntersectsEndWith多邊形查詢SetpPolygon=MapContro線查詢'創(chuàng)建點查詢的“線”SetpPolyline=MapControl.TrackLine'創(chuàng)建SpatialFilterSetpSpatialFilter=NewSpatialFilterWithpSpatialFilterSet.Geometry=pPolyline.SpatialR

溫馨提示

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

評論

0/150

提交評論