⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer.txt

📁 本例实现的是如何将地图中的一个FeatureLayer的属性表与另一个数据文件建立连接
💻 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 + -