一、IRelationalOperator接口
IRelationalOperator接口用來確定兩個圖形之間存在的空間關系,空間關系類型包括包含、相交、相等、相接、不相交、重疊、內部等。
IRelationalOperator接口主要方法有以下8個:
private bool CheckGeometryContain(IGeometry pGeometryA, IGeometry pGeometryB) { IRelationalOperator pRelOperator = pGeometryA as IRelationalOperator; if (pRelOperator.Contains(pGeometryB)) return true; }
1.Contains包含關系
包含關系只存在於以下6種情況:點包含點、線包含點、線包含線、面包含點、面包含線、面包含面情況。
2.Cross相交關系
相交關系只能用於線與線、面與線、線與面這三種情況。
3.Disjoint不相交關系
不相交關系使用范圍最廣,涵蓋點、線、面所有的相互關系,判斷點、線、面圖形是否存在不相交關系,不存在,返回true,相交,返回false。
4.Equal相等關系
相等關系只存在三種比較:點與點、線與線、面與面。
5.Overlap重疊關系
重疊關系也只存在三種比較:多點與多點、線與線、面與面。
如果其中一個圖形為空,則不存在重疊關系。
6.Touch相接關系
相接關系除了不能用與點與點,其他圖形都可以進行判斷。
7.Within內部關系
內部關系用於點被點、點被線、點被面、線被線、線被面和面被面包含與關系,他與contains正好相反,是一種被內部的關系。
8.Relation關系
用於檢測是否存在定義relationship,一般不使用。
二、ITopologicalOperator接口
作為空間分析重要部分的拓撲關系運算,ArcGISEngine類庫中將拓撲關系運算功能函數方法封裝在ITopologicalOperator接口。
屬性:Boundary邊界
幾何圖形的邊界屬性。面的邊界是多條折線;線的邊界是與起始終止點相一致的多點;多點邊界是空對象。
屬性:IsKnownSimple是否簡單對象
如當前幾何圖形是簡單對象返回true,否則返回false;它反映了圖形是否進行了拓撲糾正。
返回False:新創建的非空對象;圖形經過投影、一般化處理;
返回True:空幾何對象;直接從要素類中獲得的;執行過ITopologicalOperator接口方法后得到的幾何圖形;
屬性:IsSimple是否已拓撲糾正
當圖形還沒被認定為簡單對象,返回是否已經進行拓撲糾正。可調用Simply方法強制修正。
方法:Buffer緩沖區
根據指定的幾何圖形生成緩沖區,返回Polygon對象。緩沖區的距離Distance可以為“正”,也可以為“負”;為負數時,只適用於Polygon對象生成緩沖區。緩沖區的距離單位與生成緩沖區源幾何圖形坐標單位一致。
ITopologicalOperator pTopologBoundary = pGeo as ITopologicalOperator;
IGeometry pGeometry = pTopologBoundary.Buffer(2);
方法:Clip裁剪
裁剪指定區域內的圖形。
方法:ClipDense裁剪
裁剪指定區域內的圖形,並致密化輸出線。(densifies lines in output contributed by the clipping envelope)
方法:ConstructUnion合並
合並一組幾何圖形同時創建一個新的對象
方法:ConvexHull包絡多邊形
創建一個能夠包含一組圖形的最小邊界多邊形
方法:Cut分割
分割一個幾何圖形(線、面)為左右兩部分(相對於分割線來說)。
ITopologicalOperator.Cut(splitLine, sleftGeom,srightGeom);
分割線繪制的方向決定了被分割后的對象屬於左邊還是右邊。如下圖所示,分割線至上而下將圖形分割為左、右兩部分,所以原圖形的左半部分是作為結果的右邊對象返回的。
當幾何圖形與分割線沒有相交時,幾何圖形將作為右邊部分返回,左邊部分為空。
方法:Difference去除相交部分
獲得原始圖形除去相交部分之外的圖形部分。
方法:Intersect相交
獲得源圖形與另外圖形相交部分
方法:QueryClipped裁剪
與Clip相似,其中第二個參數為剪切后返回輸出,被剪切對象本身不會改變
方法:QueryClippedDense裁剪
與ClipDense相似,其中第三個參數為剪切后返回輸出,被剪切對象本身不會改變。
方法:Simplify拓撲糾正
改變原有幾何圖形,對幾何圖形進行拓撲糾正
點集合:不做任何處理。多點:經過Simplify后會移除相同的點。
多線:有平面和非平面之分。
當有M值時:重疊部分被舍去變成單一的;每個部分在相交位置被打斷。對於最后輸出的對象來說,相連續的部分合並生成個新對象;原來的線段可能會保留,其內部的結構會有所調整。
當沒有M值時:重疊、自相交的部分被保留,長度為0的部分被舍去;線段的走向會被調整;線段不相連時將創建新的部分;兩個線段在終端相連時被融合。
多面:監測內部、外部結構,然后更改整個多邊形結構。一般過程:移除所有懸掛的系列片段;找出最大的環,並添加到要輸出的多邊形中,同時在當前的多邊形中刪除這個環;重復這個步驟(如果這個過程在移除較多的片段時結束,則應該考慮使用IPolygon接口的方法來實現Simplify相似的操縱);將異或邏輯運算參數設置為true。Simplify結束后,除了必須的情況外,不會存在重疊、自相交的情況;並且任何點不是在外部邊界上就是在多邊形內。
方法:SymmetricDifference合並且去除相交部分
兩個幾何圖形合並后再減去相交的部分,是對兩個圖形的異或邏輯操作。
方法:Union合並
圖形合並。
三、esriSpatialRelEnum枚舉類型
在使用ISpatialFilter接口進行空間關系查詢時,使用esriSpatialRelEnum枚舉類型來判斷空間關系。
ISpatialFilter ipSpatialFilter = new SpatialFilterClass() { GeometryField = ipFeatureClass.ShapeFieldName, Geometry = ipGeometry, SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = sWhere }; IFeatureCursor ipCursor = ipFeatureClass.Search(ipSpatialFilter, false); System.Runtime.InteropServices.Marshal.ReleaseComObject(ipSpatialFilter); //ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(ipSpatialFilter);
esriSpatialRelContains包含
esriSpatialRelWithin包含於
應范圍:所有要素類之間均具有該關系
描述:可細分為一個要素完全包含另一個要素和一個要素被另一個要素完全包含。它們是相對的關系,若果說要素A完全位於要素B內,則要素B完全包含要素A。當兩個圖形完全相等時,即相互包含。
esriSpatialRelTouches邊界相接
應用范圍:除點與點之間的關系外,其它的要素之間都可以具有該關系。
描述:兩個幾何圖形只在它們的交界處相交,而兩個幾何圖形內部的交集為空。如點和線的相接,那么點必須在線的端點處才會發生相接關系。
esriSpatialRelCrosses穿越
應用范圍:線與面,線與線。
描述:如果二個要素的相交部分不為空,並且相交部分形狀的維數比兩個要素中最高維數低1(即線面交叉是線,線線交叉是點)則稱這二個要素具有交叉關系。
esriSpatialRelOverlaps空間覆蓋
應用范圍:線與線,面與面,多點與多點。
描述:兩個幾何圖形的交集與這兩個幾何圖形的維數相同,但其交集結果與這兩個幾何圖形不同。
esriSpatialRelIntersects廣義相交
應用范圍:所有要素類之間均具有該關系。
描述:相交關系是一個廣義的關系,包括上述4種關系(包含、包含於、邊界相接、穿越、空間覆蓋)。
esriSpatialRelEnvelopeIntersects包絡線相交
應用范圍:所有要素類之間均具有該關系。
描述:查詢幾何和目標幾何的Envelope(包絡線--最小外接矩形)相交(本身不一定相交)
esriSpatialRelIndexIntersects索引相交
描述:查詢幾何圖形的空間范圍和目標幾何圖形的索引范圍相交。
API解釋:Returns a feature if the envelope of the query geometry intersects the index entry for the target geometry. Because it uses the underlying index grid, rather than the evelope of the feature, it is faster and is commonly used for return features for display purposes.
esriSpatialRelUndefined未定義
描述:相當於不考慮空間關系。
esriSpatialRelRelation空間關聯
描述:Query geometry IBE(Interior-Boundary-Exterior) relationship with target geometry。通過SpatialRelDescription屬性設置自定義空間關系。俗稱九關系查詢。
ISpatialFilter.SpatialRel設置為esriSpatialRelRelation,並且設置SpatialRelDescription為某個字符串。字符串中有9個字符,每個字符可以是F,T,或者*,T表示True,F表示False,*表示無關。這九個關系取交集,最終的結果為滿足條件的結果集。例如:TT*FFT***表達了包含。
這9個關系是分別從幾何體的內部,邊界,外部來區分的,所有的幾何體之間的拓撲關系不外乎這9個關系的組合。
ISpatialFilter spatialFilter = new SpatialFilterClass() { Geometry = geometry, GeometryField = originFClass.ShapeFieldName, SpatialRel = esriSpatialRelEnum.esriSpatialRelRelation, SpatialRelDescription = "FF*FF****"; };
| Query Geometry |
Target Geometry |
|
| 1 |
interior |
interior |
| 2 |
interior |
boundary |
| 3 |
interior |
exterior |
| 4 |
boundary |
interior |
| 5 |
boundary |
boundary |
| 6 |
boundary |
exterior |
| 7 |
exterior |
interior |
| 8 |
exterior |
boundary |
| 9 |
exterior |
exterior |

![wps28_thumb[4] wps28_thumb[4]](/image/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjAxNzg2Ny8yMDIxMDIvMjAxNzg2Ny0yMDIxMDIyMjE0NTUzNzg3NS0xNzYyNDkwMTIxLnBuZw==.png)
![wps29_thumb[1] wps29_thumb[1]](/image/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjAxNzg2Ny8yMDIxMDIvMjAxNzg2Ny0yMDIxMDIyMjE0NTUzODYxMS0xNTU1Mzg4MjE5LnBuZw==.png)

![wps31_thumb[1] wps31_thumb[1]](/image/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjAxNzg2Ny8yMDIxMDIvMjAxNzg2Ny0yMDIxMDIyMjE0NTUzOTQ5OS0xMzkyNDc1OTc0LnBuZw==.png)

![wps33_thumb[1] wps33_thumb[1]](/image/aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMjAxNzg2Ny8yMDIxMDIvMjAxNzg2Ny0yMDIxMDIyMjE0NTU0MDQ3Ni01MDc4MTAyODgucG5n.png)




















