📄 buffer.txt
字号:
AE缓冲区代码 + ArcEngine连接表join (免费的)
AE缓冲区代码
Dim pPoint1 As IPoint
Dim pPoint2 As IPoint
Dim pEnv As IEnvelope
pPoint1 = New Point
pPoint2 = New Point
pMap = AxMapControl1.Map
pActiveView = pMap
pEnv = New Envelope
pEnv = pActiveView.Extent.Envelope
pPoint1.PutCoords(635359.486, 3089969.118) '第一幅图的右上角点
pPoint2.PutCoords(635359.486, 3089599.435) '第一幅图的右下角点
'用第一幅图的右上角与右下角点生成一条直线,然后生成缓冲区
Dim pPolyline As IGeometryCollection
pPolyline = New Polyline
Dim pPath As ISegmentCollection
pPath = New ESRI.ArcGIS.Geometry.Path
Dim pLine As ILine
pLine = New Line
pLine.PutCoords(pPoint1, pPoint2)
pPath.AddSegment(pLine)
pPolyline.AddGeometry(pPath)
'以下代码是将缓冲区用颜色填充
Dim pFillSym As ISimpleFillSymbol
pFillSym = New SimpleFillSymbol
Dim pColor As IRgbColor
pColor = New RgbColor
pColor.Red = 0
pColor.Green = 255
pColor.Blue = 0
pFillSym.Color = pColor
'pFillSym.Outline = 2
pFillSym.Style = esriSimpleFillStyle.esriSFSSolid
pScrD = pActiveView.ScreenDisplay
'对线作缓冲区
Dim pGeometry As IGeometry
pGeometry = pPolyline
Dim length As Double
Dim pTopo As ITopologicalOperator
pTopo = pGeometry
Dim pBuffer As IGeometry
length = ConvertPixelsTomapUnits(pMap, 4)
pBuffer = pTopo.Buffer(length)
pGeometry = pBuffer.Envelope
'将缓冲区显示出来
With pScrD
.StartDrawing(pScrD.hDC, 1)
.SetSymbol(pFillSym)
.DrawPolygon(pBuffer)
.FinishDrawing()
End With
'第一幅图与该缓冲区作查询,找出与该缓冲区相交的等高线
Dim pSFilter As ISpatialFilter
Dim pQFilter As IQueryFilter
pSFilter = New SpatialFilter
pQFilter = New QueryFilter
pSFilter.Geometry = pGeometry
pFeatureLyr1 = pMap.Layer(0) '第一幅等高线图
pFeatureCls = pFeatureLyr1.FeatureClass
Select Case pFeatureCls.ShapeType
Case esriGeometryType.esriGeometryPolyline
pSFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses
Case esriGeometryType.esriGeometryPolygon
pSFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects
End Select
pSFilter.GeometryField = pFeatureCls.ShapeFieldName
pQFilter = pSFilter
Dim pACursor As IFeatureCursor
Dim pBCursor As IFeatureCursor
pACursor = pFeatureLyr1.Search(pQFilter, False)
Dim pFeature As IFeature
'pFeatureCls = Nothing
'pFeatureCursor = Nothing
'pFeature = Nothing
pFeatureLyr2 = pMap.Layer(1) '第二幅等高线图,在第一幅图的右边
pFeatureCls = pFeatureLyr2.FeatureClass
Select Case pFeatureCls.ShapeType
Case esriGeometryType.esriGeometryPolyline
pSFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses
Case esriGeometryType.esriGeometryPolygon
pSFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects
End Select
pSFilter.GeometryField = pFeatureCls.ShapeFieldName
pQFilter = pSFilter
pBCursor = pFeatureLyr2.Search(pQFilter, False)
pMap.ClearSelection()
pFeature = pBCursor.NextFeature
While Not pFeature Is Nothing
pMap.SelectFeature(pFeatureLyr2, pFeature)
pFeature = pBCursor.NextFeature
End While
ArcEngine连接表join
本例实现的是如何将地图中的一个FeatureLayer的属性表与另一个数据文件建立连接。
l 要点
首先需要定义两个ITable接口对象,分别用来获得地图中的属性表和需要连接的数据文件,再通过IMemoryRelationshipClassFactory.Open方法将两个ITable接口对象根据某个关键字段建立连接,
最后使用IDisplayRelationshipClass.DisplayRelationshipClass方法将显示该连接
主要用到IMemoryRelationshipClassFactory接口,IRelationshipClass接口和IDisplayRelationshipClass接口。
l 程序说明
函数Join是将当前激活的地图中名称为sLayerName的图层和路径为sFilePath、文件名为sFileName的文件按字段名为sFieldName的字段进行连接。
l 代码
Private Function Join(ByVal sLayerName As String, ByVal sFilePath As String, _ByVal sFileName As String, ByVal sFieldName As String) As Boolean
Dim pMxDocument As IMxDocument
Dim pMap As IMap
Dim pWorkspaceFactory As IWorkspaceFactory
Dim pWorkspace As IWorkspace
Dim pFeatureWorkspace As IFeatureWorkspace
Dim pFeatureLayer As IFeatureLayer
Dim pFeatureClass As IFeatureClass
Dim pPrimaryTable As ITable
Dim pForeignTable As ITable
Dim pDisplayTable As IDisplayTable
Dim pMemoryRelationshipCF As IMemoryRelationshipClassFactory
Dim pRelationshipClass As IRelationshipClass
Dim pDisplayRelationshipC As IDisplayRelationshipClass
Dim nNumber As Integer
Dim sForeignFile As String
On Error GoTo ErrorHandler:
Join = False
sForeignFile = Dir(sFilePath & "\" & sFileName)
If (sForeignFile = "") Then
MsgBox "The ForeignFile is not exist."
Exit Function
End If
Set pWorkspaceFactory = New ShapefileWorkspaceFactory
Set pWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)
Set pFeatureWorkspace = pWorkspace
Set pForeignTable = pFeatureWorkspace.OpenTable(sFileName)
Set pMxDocument = ThisDocument
Set pMap = pMxDocument.FocusMap
For nNumber = 0 To pMap.LayerCount - 1
If pMap.Layer(nNumber).Name = sLayerName Then
Set pFeatureLayer = pMap.Layer(nNumber)
Exit For
End If
Next
If pFeatureLayer Is Nothing Then
MsgBox "No Layer's Name is " & sLayerName
Exit Function
End If
Set pDisplayTable = pFeatureLayer
Set pFeatureClass = pDisplayTable.DisplayTable
Set pPrimaryTable = pFeatureClass
Set pMemoryRelationshipCF = New MemoryRelationshipClassFactory
Set pRelationshipClass = pMemoryRelationshipCF.Open("TabletoLayer", pPrimaryTable, sFieldName, _
pForeignTable, sFieldName, "forward", "backward", esriRelCardinalityOneToOne)
Set pDisplayRelationshipC = pFeatureLayer
pDisplayRelationshipC.DisplayRelationshipClass pRelationshipClass, esriLeftOuterJoin
Join = True
Exit Function
ErrorHandler:
MsgBox Err.Description
End Function
Private Sub UIButtonControl1_Click()
Dim pVBProject As VBProject
On Error GoTo ErrorHandler:
Set pVBProject = ThisDocument.VBProject
Join "WorldCountries", pVBProject.FileName & "\..\..\..\.." & "\data", "Continents.dbf", "FID"
Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub
arcengine开发Statistics代码
基础统计(BaseStatistics)组件用来生成和报告统计结果。IFrequencyStatistics接口提供对用来报告频率统计的成员的访问。IGenerateStatistics接口提供对用来生成统计结果的成员的访问。IStatisticsResults提供对用来报告统计结果的成员的访问。可访问的属性有Count,Sum,Maximum,Minimum,Meanm,StandardDeviation(标准差)
DataStatistics组件允许返回统计结果及单个字段的唯一值。组件创建后,用来分析的数据通过IDataStatistics::Cursor属性,以光标形式的传入。注意ICursor的对象只能使用一次,如果要获取多个结果,应当再次创建光标。
IDataStatistics是数据统计组件中唯一的接口,下面是例子:
Dim pFeatLyr As IFeatureLayer
pFeatLyr = New FeatureLayer
Dim pMap As IMap
pMap = AxMapControl1.Map
Dim i As Integer
For i = 0 To pMap.LayerCount - 1
If pMap.Layer(i).Name = "STATES" Then
pFeatLyr = pMap.Layer(i)
Exit For
End If
Next
Dim pFeatClass As IFeatureClass
pFeatClass = pFeatLyr.FeatureClass
Dim pDataStatistics As IDataStatistics
pDataStatistics = New DataStatistics
Dim pFeatCursor As IFeatureCursor
pFeatCursor = pFeatClass.Search(Nothing, False)
Dim pCursor As ICursor
pCursor = pFeatCursor
pDataStatistics.Cursor = pCursor
pDataStatistics.Field = "AREA_1"
Dim pStaResult As IStatisticsResults
pStaResult = pDataStatistics.Statistics
Dim num As Long
Dim dMax As Double
Dim dMin As Double
Dim dMean As Double
num = pStaResult.Count
dMax = pStaResult.Maximum
dMin = pStaResult.Minimum
dMean = pStaResult.Mean
MessageBox.Show("共有" + num.ToString + "个州,其中最大面积是:" + dMax.ToString + ",最小面积是:" + dMin.ToString + ",平均面积是:" + dMean.ToString)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -