9. 關於IArea接口(esriGeometry) |
IArea接口的第一個屬性Area(只讀,返回一個double類型的數值,爲此Area的面積)
IArea接口的第二個屬性Centroid(只讀,返回一個IPoint類型的變量,爲此Area的重心)
IArea接口的第三個屬性LablePoint(只讀,返回一個IPoint類型的變量,爲此Area的標籤的位置,一般都在此Area的內部)
IArea接口的第四個方法QueryCentroid (Center ) (方法,Center參數爲一個IPoint類型的變量,通過調用此方法將重心點賦值給參數Center)
IArea接口的第五個方法QueryLablePoint (LablePoint ) (方法,LablePoint參數爲設置IPoint類型的變量,通過調用此方法將標籤點賦值給參數LablePoint)
10. 關於IEnvelope接口(esriGeometry)
應用:(中心放大)
IEnvelope接口的第一個方法CenterAt(pPoint) (方法,將這個矩形的邊框移動到參數pPoint的位置,但是其他屬性不變,如它的Width和Height)
IEnvelope接口的長寬屬性Height和Width屬性(讀寫,可以通過該屬性獲取或設置該邊框的長和寬)
IEnvelope接口的4個頂點屬性UpperLeft、UpperRight、LowerLeft和LowerRight(讀寫,返回IPoint類型的四個頂點,比直接獲得最值座標更加方便嚴謹)
IEnvelope接口的最值座標屬性XMax、XMin、YMax和YMin(讀寫,可以通過該屬性獲取或設置該邊框的四個頂點的座標)
IEnvelope接口的第五個方法Union (inEnvelope ) (方法,將參數輸入的幾何邊框和調用該方法的幾何邊框求並集,並將結果賦值給第一個邊框,即調用此方法的object)
IEnvelope接口的第六個方法intersect (inEnvelope ) (方法,返回與輸入參數相交的區域的幾何邊框,並將結果賦值給第一個邊框,即調用此方法的object)
IEnvelope接口的第七個方法PutCoords (XMin, YMin,XMax,YMax) (方法,將新建的一個邊框的4個極座標設置爲輸入的參數)
IEnvelope接口的第八個方法QueryCoords (XMin, YMin,XMax,YMax)(方法,將已有的一個邊框的4個極座標輸出到參數當中以備後用)
IEnvelope接口的第九個方法Expand (dx, dy, asRatio) (方法,按照輸入的dx與dy參數來放大或者縮小當前的邊框,用與對ArcMap窗體的中心放大或縮小,或者點擊屏幕獲得點擊點的座標,並將中心點設置成點擊點,並進行一定比例的放大或者縮小)
IEnvelope接口的第十個方法Offset (X, Y) (方法,將已有的一個邊框的按照輸入參數的大小來進行水平豎直的移動)
11. 關於IFeature接口(esriGeoDatabase)
IFeature接口的第一個屬性Class(只讀)
IFeature接口的第二個方法Delete(方法,刪除該行。因爲一個Feature在表格中對應的就是一行數據,刪除該行就能相應的刪除這個Feature)
IFeature接口的第三個屬性Extent(只讀,獲取該Feature要素在地圖上的一個矩形範圍,返回值爲IEnvelope類型)
IFeature接口的第四個屬性FeatureType(只讀,獲取該Feature要素的要素類型,返回值爲枚舉類型的esriFeatureType)
IFeature接口的第五個屬性Fields(只讀,獲取該Feature要素的字段集合,返回值爲IFields類型)
IFeature接口的第六個屬性Shape(讀寫,獲取該Feature要素的圖形,返回值爲IGeometry類型,或者各種實體化的類型,如IPolyline)
IFeature接口的第七個屬性ShapeCopy(只讀,克隆該Feature要素的幾何圖形,返回值爲IGeometry類型)
IFeature 接口的第八個方法Store(方法,保存該行。)
此屬性可用於對Feature要素的幾何圖形進行操作,步驟如下:
用IFeature.ShapeCopy方法獲取一個已經存在的Geometry,或者新建一個Geometry
對Geometry進行操作
通過IFeature.Shape屬性將Geometry寫入
通過IFeature.Store方法保存該Feature要素
IFeature接口的第九個屬性Value(讀寫,利用字段的索引進行對該要素該字段的值的讀寫)
注意,索引Index是從0開始的。
object.Value(Index ) = [ value ]
IFeature 接口的第十個屬性Table(只讀,將該行要素轉換成ITable格式的數據,即可對一張表進行數據操作,具體方法查看ITable接口)
12. 關於IRow接口(esriGeoDatabase)
IRow接口的第一個方法Delete(方法,刪除該行)
IRow接口的第二個屬性Fields(只讀,獲取該Feature要素的字段集合,返回值爲IFields類型)此方法類似於IFeature接口的Fields屬性
IRow 接口的第三個方法Store(方法,保存該行。)此方法類似於IFeature接口的Store方法
IRow接口的第四個屬性Table(只讀,獲取該行所在的表格,返回值爲ITable類型)
IRow接口的第五個屬性Value(Index) (讀寫,獲取該行在參數索引的字段的值,注意,索引Index是從0開始的。)
object.Value(Index ) = [ value ]
IRow接口的第六個屬性HasOID(只讀,判斷指出該行是否有OID)
IRow接口的第七個屬性OID(只讀,獲取該行的OID值)
13. 關於IFeatureClass接口(esriGeoDatabase)
IFeatureClass接口的第一個方法AddField(Field) (方法,增加一個屬性字段到這個要素類,其中傳入的參數爲一個IField接口的變量,此變量可以由其他要素類獲得並賦值給要操作的要素類,可用IFeilds接口的Field屬性來獲得)
IFeatureClass接口的第二個方法DeleteField(Field) (方法,刪除一個屬性字段,其中傳入的參數爲一個IField接口的變量)
IFeatureClass接口的第三個屬性Fields(只讀,獲取該要素類的全部屬性字段,返回一個IFields類型的變量)
IFeatureClass接口的第四個方法FindField(Name) (方法,去查找在該要素類裏面是否含有參數名字的屬性字段,如果有,則返回索引,沒有,則返回-1)
IFeatureClass接口的第五個屬性AreaField(只讀,獲取屬性字段爲geometry的那一個Field)
IFeatureClass接口的第六個方法Search (filter, Recycling) (方法,去得到一個IFeatureCursor類型的遊標,該遊標由filter來控制賽選,如果filter等於null,則返回整個featureclass的遊標,再用IfeatureCursor的NextFeature的方法依次得到每一個Feature)
IFeatureClass接口的第七個方法Insert(useBuffering) (方法,去得到一個IFeatureCursor類型的遊標,來用作插入新的Features,useBuffering是一個布爾型參數,當爲True時即可以插入新的Feature,再用IFeatureCursor的InsertFeature (buffer )的方法去插入一個新的Feature)
IFeatureClass接口的第八個方法CreateFeatureBuffer(方法,新建一個緩衝,返回一個IFeatureBuffer類型的變量,然後再對這個變量進行操作)
14. 關於ITable接口(esriGeoDatabase)
ITable是把要素類當成一個表格來看,每一列對應一個字段(Field),每一行對應一個要素(Feature),所以對要素類(Ifeatureclass)接口的操作均可以類似的在Itable接口中找到。
ITable接口的第一個方法AddField(Field) (方法,增加一個屬性字段到這個表,其中傳入的參數爲一個IField接口的變量,此變量可以由其他表獲得並賦值給要操作的表,可用IFeilds接口的Field屬性來獲得)
ITable接口的第二個方法GetRow(OID) (方法,通過OID來從表格數據庫中獲取一行,返回一個IRow接口的變量)此方法類似於IFeatureClass接口的GetFeature方法
ITable接口的第三個方法GetRows(oids, Recycling) (方法,得到一個遊標ICursor,通過一個oids的OID數組參數和一個Recycling的布爾類型的參數,一般爲True)此方法類似於IFeatureClass接口的GetFeatures方法
ITable接口的第四個方法RowCount(QueryFilter) (方法,得到滿足查詢過濾器條件的行數。此方法IFeatureClass接口沒有,所以是一個很好的有條件查詢要素數量的一個方法)
15. 關於IFeatureCursor接口(esriGeoDatabase)
IFeatureCursor接口的第一個方法NextFeature(方法,將遊標向前跳到下一個位置,並且返回該位置的Feature)
IFeatureCursor接口的第二個方法UpdateFeature(Feature) (方法,對當前遊標位置的Feature進行更新)
IFeatureCursor接口的第三個方法InsertFeature(buffer) (方法,用參數傳進來的屬性值插入一個新的要素到數據庫中,返回該插入新的Feature的ID值,其中參數類型爲IFeatureBuffer)
16. 關於IQueryFilter接口(esriGeoDatabase)
IQueryFilter接口的第一個屬性WhereClause(讀寫,爲過濾器設置條件語句)
注意!各種不同的數據,設置條件查詢語句的語法是不相同的,如一個shp文件在設置字段的時候要加“””雙引號,而在SDE數據連接中,則什麼都不加;在gdb文件的語句中,符號是“*”,而在SDE或者shp文件查詢中則是“%”
IQueryFilter接口的第二個屬性SubFields(讀寫,爲過濾器設置提供賽選的字段,用逗號來分隔每一個逗號,如果不設置該屬性,則當做所有字段均爲查找字段)
17. 關於IFeatureLayer接口(esriCarto)
IFeatureLayer接口的第一個屬性FeatureClass(讀寫,設置或者讀取此layer的要素類)
IFeatureLayer接口的第二個屬性MaximumScale(讀寫,設置或者讀取此layer顯示的最大比例尺)
IFeatureLayer接口的第三個屬性MinimumScale(讀寫,設置或者讀取此layer顯示的最小比例尺)
IFeatureLayer接口的第四個方法Search (queryFilter, recycling )
(方法,創建一個遊標去查詢相應設置的過濾器的查詢)
IFeatureLayer接口的第五個屬性Visible(讀寫,設置或者讀取此layer的可見性)
IFeatureLayer接口的第六個屬性AreaOfInterest(只讀,讀取此layer的最大範圍,回返一個IEnvelope接口的變量)
18. 關於IFeatureSelection接口(esriCarto)
IFeatureSelection接口的第一個方法SelectFeatures (Filter, Method, justOne ) (方法,根據指定的標準過濾器filter和方法,選擇要素,第一個參數爲QueryFilter類型的變量,第二個參數爲esriSelectionResultEnum類型的變量,第三個參數爲布爾型變量,通常爲false)
19. 關於IMap接口(esriCarto)
IMap接口的第一個屬性Layers (uid, recursive ) (只讀,第二個參數爲True的時候,該屬性獲取第一個參數uid指定的Layers,賦值給一個IEnumLayer的變量)
其中比較常用的UID參數值如下:
{6CA416B1-E160-11D2-9F4E-00C04F6BC78E} IDataLayer
{40A9E885-5533-11d0-98BE-00805F7CED21} IFeatureLayer
{E156D7E5-22AF-11D3-9F99-00C04F6BC78E} IGeoFeatureLayer
{34B2EF81-F4AC-11D1-A245-080009B6F22B} IGraphicsLayer
{5CEAE408-4C0A-437F-9DB3-054D83919850} IFDOGraphicsLayer
{0C22A4C7-DAFD-11D2-9F46-00C04F6BC78E} ICoverageAnnotationLayer
{EDAD6644-1810-11D1-86AE-0000F8751720} IGroupLayer
IMap接口的第二個屬性LayerCount(只讀,返回該map裏面Layer的個數)
IMap接口的第三個屬性Layer(Index) (只讀,返回指定索引index位置的Layer)
IMap接口的第四個方法AddLayer(Layer) (方法,向該map添加一個Layer)
IMap接口的第五個方法AddLayers(Layers, autoArrange) (方法,添加一個EnumLayer變量的layers到該map,第一個參數爲IEnumLayer類型,第二個參數爲bool型變量)
IMap接口的第六個方法ClearLayers(方法,將所有的layer從map中移除)
IMap接口的第七個方法ClearSelection(方法,將該map中選擇的要素清空)
IMap接口的第八個屬性SelectionCount(只讀,返回該map被選中要素的個數)
IMap接口的第九個方法SelectFeature(Layer, Feature) (方法,從一個Layer中選擇一個Feature)
IMap接口的第十個屬性MapScale(讀寫,獲取或者設置當前map的地圖比例尺,double類型)
IMap接口的第十一個方法MoveLayer(Layer, toIndex) (方法,把一個Layer從當前的位置移動到指定的索引位置)
IMap接口的第十二個方法SelectByShape(Shape, env, justOne) (方法,從Layer中依靠一個圖形的範圍shape和一個選擇的環境env來選擇要素,而在所有圖層中只從IFeatureLayer的圖層中進行選擇)
20. 關於IPropertySet接口(esriSystem) IPropertySet接口的第一個方法SetProperties (names, values ) (方法,設置屬性) IPropertySet接口的第二個方法SetProperty (name, value ) (方法,設置屬性) 21. 關於IFeatureWorkspace接口(esriGeoDatabase)IFeatureWorkspace接口的第一個方法OpenFeatureClass (Name) (方法,從一個要素工作空間打開一個要素,返回一個IFeatureClass類型的變量) 22. 關於IWorkspaceEdit接口(esriGeoDatabase) |
在實際問題中,如果有多次操作需要更改Feature的時候,切記要將操作對象重新賦值,不然在pWorkspaceEdit.StopEditing(true)的時候會出現錯誤,報錯代碼爲-2147467259。
(詳細代碼可見WindowsApplication6的代碼,其中詳細操作了對字段的編輯過程,其中涉及到很多對字段Field的方法Add(Field),Delete(Field),get_value(object value),set_value(int index, object value)等等操作,其中還涉及到Feature經過ICursor類選取與經過FeatureClass類的方法GetFeature選取的區別)
23. 關於IWorkspaceFactory接口(esriGeoDatabase)
IWorkspaceFactory接口的第一個方法Open (ConnectionProperties, hWnd ) (方法,從一個工作工廠打開一個工作空間,並返回IWorkspace類型的變量,方法中的第一個參數ConnectionProperties是IPropertySet接口的變量)
IWorkspaceFactory接口的第二個方法OpenFromFile (fileName, hWnd ) (方法,從一個路徑打開一個工作空間,並返回IWorkspace類型的變量)
24. 關於ITopologicalOperator接口(esriGeometry)
ITopologicalOperator接口的第一個方法ConstructUnion(geometries ) (方法,合併圖形的工具,輸入的參數是一個IEnumGeometry類型的參數,此方法效率甚高)
ITopologicalOperator接口的第二個方法Cut(cutter, leftGeom, rightGeom) (方法,剪切圖形,第一個參數爲剪切的線要素,爲IPloyline類型,第二個第三個參數均爲剪切後的圖形,爲輸出參數)
ITopologicalOperator接口的第三個方法Boundary(方法,獲取一個圖形的邊框,一個Polygon的boundary是一個Polyline類型的要素,一個Polyline的boundary是一個nultipoint類型的要素,一個Point的boundary是爲空的)
ITopologicalOperator接口的第四個方法Buffer(distance) (方法,創造一個Polygon的要素來顯示緩衝區域,參數爲緩衝距離)
ITopologicalOperator接口的第五個方法Clip (clipperEnvelope ) (方法,輸入一個IEnvelope類型的變量,來獲取被這個邊框剪切的要素,並將切割後的變量返回給調用方法的變量)
ITopologicalOperator接口的第六個方法QueryClipped (clipperEnvelope, clippedGeometry ) (方法,與Clip類似,但是第二個參數爲剪切後返回輸出的參數,本身不會改變)
ITopologicalOperator接口的第七個方法ConvexHull(方法,構造一個Geometry,大部分爲Polygon類型的幾何要素,該要素爲調用此方法的ITopologicalOperator類型的變量最小的外邊框)
ITopologicalOperator接口的第八個方法SymmetricDifference (other ) (方法,並集減去交集的部分,調用次方法的變量爲第一個參數,other爲第二個參數,最後返回變量到一個Geometry類型的變量,該變量的範圍均在兩個參數範圍內,但不在兩個參數相交的部分)
25. 創建Buffer並選擇裏面的要素
========================================================
怎樣創建buffer:(來源於管網線處理刪除冗餘節點)
========================================================
- Dim pTopOper As ITopologicalOperator
- Set pTopOper = pfeature.Shape
- Dim pGeometry As IGeometry
- Set pGeometry = pTopOper.Buffer(1)
(注意,這個pfeature是在前面定義的pfeature=pFeatureCursor.NextFeature,不用重新定義一個)
========================================================
怎樣在buffer裏面選擇要素:
========================================================
- Dim pSpFilter As ISpatialFilter
- Set pSpFilter = New SpatialFilter
- Dim pTopOper As ITopologicalOperator
- Set pTopOper = pfeature.Shape
- Dim pGeometry As IGeometry
- Set pGeometry = pTopOper.Buffer(1)
- Set pSpFilter.Geometry = pGeometry
- pSpFilter.SpatialRel = esriSpatialRelContains
- '(esriSpatialRelContains是ISpatialFilter裏面SpatialRel的一種參數esriSpatialRelEnum,值爲8,代表在這個區域內包含的要素)
- Set m_pSelGW_D = pLyr_D
- m_pSelGW_D.SelectFeatures pSpFilter, esriSelectionResultNew, False
- '(m_pSelGW_D是IfeatureSelection類型的變量)
- pSpFilter.SpatialRel = esriSpatialRelIntersects
- Set m_pSelGW_X = pLyr
- m_pSelGW_X.SelectFeatures pSpFilter, esriSelectionResultNew, False
26. Merge要素Union要素
- Private Sub UnionSelected()
- Dim pMxDoc As IMxDocument
- Dim pFtrLyr As IFeatureLayer
- Dim pFtrCls As IFeatureClass
- Dim pFtrSel As IFeatureSelection
- Dim pFtr As IFeature
- Dim pEnumGeom As IEnumGeometry
- Dim pEnumGeomBind As IEnumGeometryBind
- Dim pTopOp As ITopologicalOperator
- Dim pUnionedPolylines As IPolyline
- ' Get a ref to the selected polylines in the 1st layer
- Set pMxDoc = ThisDocument
- Set pFtrLyr = pMxDoc.FocusMap.Layer(0)
- Set pFtrSel = pFtrLyr
- Set pFtrCls = pFtrLyr.FeatureClass
- ' Create an enumeration of the selected polyines
- Set pEnumGeom = New EnumFeatureGeometry
- Set pEnumGeomBind = pEnumGeom
- pEnumGeomBind.BindGeometrySource Nothing, pFtrSel.SelectionSet
- pEnumGeom.Reset
- ' Union the polylines
- Set pUnionedPolylines = New Polyline
- Set pTopOp = pUnionedPolylines
- pTopOp.ConstructUnion pEnumGeom
- ' Add this new unioned polyline to the featureclass
- Set pFtr = pFtrCls.CreateFeature
- Set pFtr.Shape = pUnionedPolylines
- pFtr.Store
- End Sub