收藏 分销(赏)

AOSample.doc

上传人:pc****0 文档编号:7780649 上传时间:2025-01-16 格式:DOC 页数:18 大小:125.50KB 下载积分:10 金币
下载 相关 举报
AOSample.doc_第1页
第1页 / 共18页
AOSample.doc_第2页
第2页 / 共18页


点击查看更多>>
资源描述
在ArcMap中,进行属性查询的时候,Arcmap中提供了选中字段的属性的Unique Value。这样就可以从列表中选择了。以前也遇到类似问题,一直不知道怎么做,好在当时使用的ArcSDE Oracle数据,使用了一个SQL语句解决了。不过要是Coverage就没有办法了。其实AO中提供了这样的功能了,可通过IDataStatistics来实现,做了一个函数,参数为图层和字段,返回该图层该字段的所有Unique Value 1.'下面程序段是用来列出ArcMap中,指定图层和字段中,所有Unique Value Public Function listUniqueValue(pLayer As IFeatureLayer, pFieldName As String) As String()  Dim pCursor As ICursor  Set pCursor = pLayer.Search(Nothing, False)  Dim pDataStat As IDataStatistics  Dim pValue As Variant  Set pDataStat = New DataStatistics  pDataStat.Field = pFieldName  Set pDataStat.Cursor = pCursor  Dim pEnumVar As IEnumVariantSimple  Set pEnumVar = pDataStat.UniqueValues  pValue = pEnumVar.Next  Dim i As Long  'Dim count As Long  'count = pDataStat.UniqueValueCount  i = 0  Dim value(200) As String '数组的长度按说应该使用pDataStat.UniqueValueCount来控制,但是编译只能使用               '常数,不能使用变量  Do Until IsEmpty(pValue)   value(i) = pValue   i = i + 1   pValue = pEnumVar.Next  Loop  listUniqueValue = value() End Function 2.打开图层属性表 (ArcMap VBA) '下面程序段是用来列出ArcMap中,指定图层和字段中,所有Unique Value Public Sub OpenFeatureLayerTable() Dim pMxDoc As IMxDocument Dim pMap As IMap Dim pLayer As IFeatureLayer Dim pTable As ITableWindow Set pMxDoc = ThisDocument Set pMap = pMxDoc.FocusMap Set pLayer = pMap.Layer(0) 'Instantiate the Table window Set pTable = New TableWindow 'Associate the table and a feature layer Set pTable.FeatureLayer = pLayer Set pTable.Application = Application 'Open the table pTable.Show True End Sub 3.AO中加载SDE中的Raster数据 (ArcMap VBA/VB AO) Public Function GetRasterFromSDE(sServer As String, sInstance As String, _ sUser As String, sPassword As String, sSDERaster As String, Optional version As String = "SDE.DEFAULT") As IRasterDataset   '加载栅格函数 ' sServer,sInstance,sDB,sUser,sPasswd: ArcSDE connection info ' sSDERaster: the ArcSDE raster dataset name Dim pSDEWs As IWorkspaceName Dim pSDEPropertySet As IPropertySet Dim pSDERasterDataset As IRasterDataset Dim pDsName As IDatasetName Dim pName As IName ' Dim sQualifiedName As String ' Get connection propertyset Set pSDEPropertySet = New PropertySet With pSDEPropertySet  .SetProperty "Server", sServer  .SetProperty "Instance", sInstance  ' .SetProperty "Database", sDB  .SetProperty "User", sUser  .SetProperty "Password", sPassword  .SetProperty "Version", version End With ' Get workspacename Set pSDEWs = New WorkspaceName pSDEWs.ConnectionProperties = pSDEPropertySet pSDEWs.WorkspaceFactoryProgID = "esricore.sdeworkspacefactory" ' Get raster dataset name Set pDsName = New RasterDatasetName pDsName.Name = sSDERaster Set pDsName.WorkspaceName = pSDEWs Set pName = pDsName ' Open ArcSDE raster dataset Set pSDERasterDataset = pName.Open ' Cleanup Set GetRasterFromSDE = pSDERasterDataset Set pSDEWs = Nothing Set pSDERasterDataset = Nothing Set pSDEPropertySet = Nothing Set pName = Nothing Set pDsName = Nothing End Function 4.AO中直接加载ArcSDE矢量数据 Public Function addSDEData(Server As String, Instance As String, User As String, _  Password As String, featureClass As String, Optional version As String = "SDE.DEFAULT")  On Error GoTo EH  Dim pWorkspaceFactory As IWorkspaceFactory  Dim pWorkspace As IFeatureWorkspace  Dim pPropSet As IPropertySet  Dim pClass As IFeatureClass  Dim pLayer As IFeatureLayer  Dim pMxDoc As IMxDocument  Set pWorkspaceFactory = New SdeWorkspaceFactory  Set pPropSet = New PropertySet  With pPropSet '设置ArcSDE连接属性   .SetProperty "SERVER", Server   .SetProperty "INSTANCE", Instance   .SetProperty "USER", User   .SetProperty "PASSWORD", Password   .SetProperty "VERSION", version '可选,缺省为SDE.DEFAULT版本  End With  Set pWorkspace = pWorkspaceFactory.Open(pPropSet, 0)  Set pClass = pWorkspace.OpenFeatureClass(featureClass)  Set pLayer = New FeatureLayer  Set pLayer.featureClass = pClass  pLayer.Name = pClass.AliasName    Set pMxDoc = ThisDocument  pMxDoc.AddLayer pLayer  pMxDoc.ActiveView.PartialRefresh esriViewGeography, pLayer, Noting  Exit Function EH:  MsgBox Err.Description, vbInformation, "加载数据错误" End Function 5.对选中要素进行属性统计 Public Sub SumSelectedFeatures() Dim pMxDoc As IMxDocument Dim pmap As IMap Dim player As IFeatureLayer Dim pFcc As IFeatureClass Dim pFields As IFields Dim pNumFields As IFields Dim numAreaField As Double Dim pField As IField Set pMxDoc = ThisDocument Set pmap = pMxDoc.FocusMap Set player = pmap.Layer(0) Set pFcc = player.FeatureClass Set pFields = pFcc.Fields 'Get a field to Sum Set pNumFields = pFields numAreaField = pFields.FindField("pop1997") ' <--Enter a field here 'Check for a valid field index number If numAreaField < 0 Then MsgBox "Please enter a Valid field name", vbCritical, "Field Doesn't Exist" Exit Sub End If Set pField = pFields.Field(numAreaField) '***Other useful field stuff*** '.FindField("AREA") 'MsgBox numAreaField 'MsgBox pField.Name 'MsgBox pFields.FieldCount 'MsgBox player.Name 'Get the selected records Dim pFeatureSelection As IFeatureSelection Set pFeatureSelection = player Dim pSelected As ISelectionSet Set pSelected = pFeatureSelection.SelectionSet Dim pCursor As ICursor pSelected.Search Nothing, False, pCursor Dim pfeature As IFeature Dim counter As Integer counter = 0 Dim sumAREA As Double sumAREA = 0 Set pfeature = pCursor.NextRow Do Until pfeature Is Nothing counter = counter + 1 sumAREA = sumAREA + pfeature.Value(numAreaField) Set pfeature = pCursor.NextRow Loop MsgBox "Total " & pField.Name & " is: " & sumAREA 'MsgBox counter & " Selected records" End Sub 6.在ArcMap LayOut中增加文字 Private pMxApp As IMxApplication Private pMxDoc As IMxDocument Private pDisp As IScreenDisplay Private pEnv As IEnvelope Private pPoint As IPoint Private pColor As IRgbColor Private pLayout As IPageLayout Private pMapSurround As IMapSurround Private pNSurround As INorthArrow Private pGContainer As IGraphicsContainer Private pEnumLayer As IEnumLayer Private pFLayer As ILayer Private pBLayer As ILayer Public Sub AddTextToLayout() 'Button to place text on the layout ' 'Reference App, Doc, Disp, Layout, and GraphicContainer Set pMxApp = Application Set pMxDoc = Document Set pDisp = pMxApp.Display Set pLayout = pMxDoc.ActiveView Set pGContainer = pLayout 'Create a TextElement Dim pTxtElement As ITextElement Set pTxtElement = New TextElement 'Create a TextSymbol and a font Dim pTxtSym As ITextSymbol Set pTxtSym = New TextSymbol Dim pFont As IFontDisp Set pFont = New StdType.StdFont 'Set some properties of the font pFont.Name = "Courier" pFont.Bold = True pFont.Italic = True pFont.Size = 30 'Set the TextSymbol's FONT property with the font pTxtSym.Font = pFont 'Set the TextElement's SYMBOL property with the TextSymbol 'Set the TextElement's TEXT property with the desired text pTxtElement.Symbol = pTxtSym pTxtElement.Text = "This is a test" 'Create an Envelope to define the TextElement's GEOMETRY 'Create a Point to define the Envelope's LL and UR (extent) Set pEnv = New Envelope Set pPoint = New Point pPoint.x = 2 'first define LL coords pPoint.y = 8 '<--these are page units pEnv.LowerLeft = pPoint pPoint.x = 7 'now define UR coords pPoint.y = 10 pEnv.UpperRight = pPoint 'Create a pointer to the IElement interface, QI Dim pElement As IElement Set pElement = pTxtElement 'Set the Element's GEOMETRY property with the Envelope pElement.Geometry = pEnv 'Prepare display for drawing (Activate), AddElement to the 'GraphicsContainer, then Draw pElement.Activate pDisp '<-without this, BAD things happen! pGContainer.AddElement pElement, 1 pMxDoc.ActiveView.Refresh End Sub 7.VB+AO增加shapefile数据 Private Sub Form_Load() Dim pWorkspaceFactory As IWorkspaceFactory Dim pWorkspace As IFeatureWorkspace Dim pFClass As IFeatureClass Dim pLayer As IFeatureLayer Set pWorkspaceFactory = New ShapefileWorkspaceFactory '获取目录 Set pWorkspace = pWorkspaceFactory.OpenFromFile("D:\data\", 0) '获取shapefile名 Set pFClass = pWorkspace.OpenFeatureClass("result") Set pLayer = New FeatureLayer Set pLayer.FeatureClass = pFClass MapControl1.AddLayer pLayer MapControl1.Refresh End Sub 8.VBA增加Raster数据 Public Sub AddRasterLayer() Dim pMxDocument As IMxDocument Dim pMap As IMap Dim pLayer As IRasterLayer Dim pWF As IWorkspaceFactory Dim pW As IWorkspace Dim pFW As IRasterWorkspace Dim pDataset As IDataset Dim pRDataset As IRasterDataset Set pWF = New RasterWorkspaceFactory 'Enter path to workspace that contains your grid Set pW = pWF.OpenFromFile("C:\data") 'QI Set pFW = pW 'Enter Name of Grid folder Set pRDataset = pFW.OpenRasterDataset("LakeDepth") 'Use the grid to create a raster layer Dim pRLayer As IRasterLayer Set pRLayer = New RasterLayer pRLayer.CreateFromDataset pRDataset 'Add the raster layer to a map Set pMxDocument = ThisDocument Set pMap = pMxDocument.FocusMap pMxDocument.AddLayer pRLayer 'Set the layer name 'Set the display extent End Sub 9.Merge Layer (VB+AO) '兔八哥以前写的,现在也放这吧 Public Function Merge(pathLayer1 As String, pathLayer2 As String, pathMergeResult As String, _ nameLayer1 As String, nameLayer2 As String, nameMergeResult As String) ' 分别读取图层一,图层二到FeatureClass和Table中 Dim pWorkspaceFactory As IWorkspaceFactory Dim pWorkspace1 As IFeatureWorkspace Dim pWorkspace2 As IFeatureWorkspace Dim pFirstFeatClass As IFeatureClass Dim pSecondFeatClass As IFeatureClass Dim pFirstTable As ITable Dim pSecondTable As ITable Dim pFeatLayer1 As IFeatureLayer Set pFeatLayer1 = New FeatureLayer Dim pFeatLayer2 As IFeatureLayer Set pFeatLayer2 = New FeatureLayer Set pWorkspaceFactory = New ShapefileWorkspaceFactory Set pWorkspace1 = pWorkspaceFactory.OpenFromFile(pathLayer1, 0) Set pWorkspace2 = pWorkspaceFactory.OpenFromFile(pathLayer2, 0) Set pFirstFeatClass = pWorkspace1.OpenFeatureClass(nameLayer1) Set pSecondFeatClass = pWorkspace2.OpenFeatureClass(nameLayer2) Set pFeatLayer1.FeatureClass = pFirstFeatClass Set pFirstTable = pFeatLayer1 Set pFeatLayer2.FeatureClass = pSecondFeatClass Set pSecondTable = pFeatLayer2 ' 检查错误 If pFirstTable Is Nothing Then  MsgBox "Table QI failed"  Exit Function End If If pSecondTable Is Nothing Then  MsgBox "Table QI failed"  Exit Function End If ' 定义输出要素类名称和shape类型 Dim pFeatClassName As IFeatureClassName Set pFeatClassName = New FeatureClassName With pFeatClassName .FeatureType = esriFTSimple .ShapeFieldName = "Shape" .ShapeType = pFirstFeatClass.ShapeType End With ' 定义输出shapefile位置与名称 Dim pNewWSName As IWorkspaceName Set pNewWSName = New WorkspaceName With pNewWSName .WorkspaceFactoryProgID = "esriCore.ShapefileWorkspaceFactory" .PathName = pathMergeResult End With Dim pDatasetName As IDatasetName Set pDatasetName = pFeatClassName pDatasetName.Name = nameMergeResult Set pDatasetName.WorkspaceName = pNewWSName ' 定义Merge参数 Dim inputArray As IArray Set inputArray = New esriCore.Array inputArray.Add pFirstTable inputArray.Add pSecondTable ' 进行Merge操作 Dim pBGP As IBasicGeoprocessor Set pBGP = New BasicGeoprocessor Dim pOutputFeatClass As IFeatureClass Set pOutputFeatClass = pBGP.Merge(inputArray, pFirstTable, pFeatClassName) End Function 10.GraphicsLayer中增加一个点 Public Sub AddPointToGraphicsLayer() Dim pMxDoc As IMxDocument Set pMxDoc = ThisDocument Dim pMxApp As IMxApplication Set pMxApp = Application Dim pMap As IMap Set pMap = pMxDoc.FocusMap 'Instantiate the composite graphics layer Dim pCGLayer As ICompositeGraphicsLayer Set pCGLayer = New CompositeGraphicsLayer 'QI for ILayer to set the layer's name Dim pLayer As ILayer Set pLayer = pCGLayer pLayer.Name = "TestPoint" 'Add the layer to the map pMap.AddLayer pCGLayer 'Set some x and y values or read them from somewhere Dim x As Double Dim y As Double x = 200 y = 200 'Make a point Dim pPnt As IPoint Set pPnt = New Point pPnt.x = x pPnt.y = y 'Set color and symbol for the point, Blue Dim pColor As IRgbColor Set pColor = New RgbColor pColor.Blue = 255 pColor.Green = 0 pColor.Red = 0 Dim pSimpleMarkerSymbol As ISimpleMarkerSymbol Set pSimpleMarkerSymbol = New SimpleMarkerSymbol With pSimpleMarkerSymbol .Style = esriSMSCircle .Size = 4 .Color = pColor End With 'Create a marker element Dim pMarkerElement As IMarkerElement Set pMarkerElement = New MarkerElement pMarkerElement.Symbol = pSimpleMarkerSymbol Dim pElement As IElement Set pElement = pMarkerElement pElement.Geometry = pPnt 'Get the graphics layer and screen display Dim pGrLayer As IGraphicsLayer Set pGrLayer = pCGLayer Dim pScreenDisplay As IScreenDisplay Set pScreenDisplay = pMxApp.Display 'Add the marker element ot the layer graphics container Dim pGraphicCont As IGraphicsContainer Set pGraphicCont = pGrLayer pGraphicCont.AddElement pMarkerElement, 0 With pScreenDisplay .ActiveCache = 0 .StartDrawing pScreenDisplay.hDC, 0 .SetSymbol pSimpleMarkerSymbol pElement.Draw pScreenDisplay, Nothing .FinishDrawing End With 'Refresh/redraw the display with the new point pMxDoc.ActiveView.Refresh End Sub 11. 对ArcMap显示区域大小进行缩放 '本例用来对ArcMap显示区域进行放达2倍,修改2为你需要的放大比例 Private Sub UIButtonControl1_Click()   Dim pMxApp As IMxApplication   Dim pMxDoc As IMxDocument   Dim pDisp As IScreenDisplay   Dim pPoint As IPoint   Dim pCenterPoint As IPoint   '获得当前Display   Set pMxApp = Application   Set pDisp = pMxApp.Display   Set pMxDoc = Document   '获取当前显示区域   Dim pCurrentEnv As IEnvelope   Dim pEnv As IEnvelope   Set pCurrentEnv = pMxDoc.ActiveView.Extent.Envelope   Set pEnv = pMxDoc.ActiveView.Extent.Envelope   '设置显示范围为当前的1/2   pEnv.Height = pCurrentEnv.Height / 2   pEnv.Width = pCurrentEnv.Width / 2   '设置新的显示区域的中心为原来显示区域中心   Set pPoint = New Point   Set pCenterPoint = New Point   pCenterPoint.X = pCurrentEnv.LowerLeft.X + pCurrentEnv.Width / 2   pCenterPoint.Y = pCurrentEnv.LowerLeft.Y + pCurrentEnv.Height / 2   pEnv.CenterAt pCenterPoint   '设置视图显示区域   pMxDoc.ActiveView.Extent = pEnv   pMxDoc.ActiveView.Refresh End Sub 12. 复制一个FeatureClass '复制一个FeatureClass Public Function hCopyFC(ByVal myinstr As String, ByVal myoutstr As String) As Boolean  Dim hOUTshwsname As IWorkspaceName  Dim hOutshDSName As IDatasetName  Dim hInWorkspaceName As IWorkspaceName  Dim hDatasetName As IDatasetName  Dim htoshape As IFeatureDataConverter  Dim htname As IFeatureClassName  Dim houttname As IFeatureClassName  Set hInWorkspaceName = New WorkspaceName  hInWorkspaceName.PathName = strdir + "\template\template.mdb" '数据模板  hInWorkspaceName.WorkspaceFactoryProgID = "esriCore.AccessWorkspaceFactory.1"  Set htname = New FeatureClassName  Set hDatasetName = htname  Set hDatasetName.WorkspaceName = hInWorkspaceName  hDatasetName.Name = myinstr  Set hOUTshwsname = New WorkspaceName  hOUTshwsname.PathName = strpathname '当前数据路径  hOUTshwsname.WorkspaceFactoryProgID = "esriCore.AccessWorkspaceFactory.1"  Set houttname = New FeatureClassName  Set hOutshDSName = h
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服