Suite

Comment utiliser un tableau pour le tampon


Je souhaite utiliser un tableau pour créer 3 fichiers tampon avec différentes distances de tampon. Le code doit produire 3 fichiers tampons en une seule étape. De plus, le code ci-dessous s'exécute déjà après l'utilisation d'un complément ArcGIS, mais je n'ai aucune idée de la manière de créer le tableau et d'enregistrer ces 3 fichiers tampons différents.

Quelqu'un peut-il m'indiquer la bonne direction, car je ne sais pas par où commencer? Mon système est ArcGIS10.2, VB.net, Visual Studio2012

Voici le code sans tableau :

Importe ESRI.ArcGIS.Geoprocessor Importe ESRI.ArcGIS.Framework Importe ESRI.ArcGIS.Carto Importe ESRI.ArcGIS.ArcMapUI Importe ESRI.ArcGIS.AnalysisTools Public Class BufferButton1 hérite d'ESRI.ArcGIS.Desktop.AddIns.Button Public Sub New() End Sub Protected Overrides Sub OnClick() Dim m_application = My.ArcMap.Application Dim mxDocument As IMxDocument = m_application.Document Dim map As IMap = mxDocument.FocusMap Dim strInputFC As String Dim strOutputFC As String Dim intOutputeoprocessSize As InteRI Dim gp AsG ES .Geoprocessor = New ESRI.ArcGIS.Geoprocessor.Geoprocessor() gp.OverwriteOutput = 1 strInputFC = map.Layer(0).Name strOutputFC = "E:" ' dans ce chemin, je voudrais enregistrer les 3 fichiers tampons intOutputBufferSize = 1000 ' ici, je voudrais gérer trois tailles de tampon, par exemple 1000, 2000 et 3000 Dim bufferTool As ESRI.ArcGIS.AnalysisTools.Buffer = New ESRI.ArcGIS.AnalysisTools.Buffer() bufferTool.in_features = strInputFC bufferTool.out_feature_class = strOutputFC buffe rTool.buffer_distance_or_field = intOutputBufferSize gp.Execute(bufferTool, Nothing) My.ArcMap.Application.CurrentTool = Nothing End Sub Protected Overrides Sub OnUpdate() Enabled = My.ArcMap.Application IsNot Nothing End Sub End Class

Ajustement avec ce que @Vince disait… Buffer n'accepte pas un tableau dans sonout_feature_classbiens. Cependant, vous êtes en quelque sorte sur la bonne voie avec unpour chaqueboucle. Prenant une partie de votre code, voici une façon de le faire. j'utilise unListerau lieu d'unDéployerparce que je ne me soucie pas de l'utilisation de la mémoire et de l'initialisation de monDéployercorrectement. Il existe de nombreuses façons d'accomplir cette tâche, même en l'exécutant en parallèle (threading, etc.).

Dim gp As ESRI.ArcGIS.Geoprocessor.Geoprocessor = New ESRI.ArcGIS.Geoprocessor.Geoprocessor() gp.OverwriteOutput = 1 strInputFC = map.Layer(0).Name strOutputFC = "E:" ' dans ce chemin je voudrais pour enregistrer les 3 fichiers tampon 'intOutputBufferSize = 1000' ici, je voudrais gérer trois tailles de tampon, par exemple 1000, 2000 et 3000 tampons Dim As New List (Of Integer) buffers.Add(1000) buffers.Add(2000) buffers.Add (3000) Pour chaque buff As Integer In buffers 'chaque itération crée un nouvel outil Dim bufferTool As ESRI.ArcGIS.AnalysisTools.Buffer = New ESRI.ArcGIS.AnalysisTools.Buffer() 'utilise la même entrée bufferTool.in_features = strInputFC 'crée un nom unique afin qu'il ne soit pas écrasé (au moins lors de l'exécution initiale) bufferTool.out_feature_class = strOutputFC & "_buffer_" & buff.ToString() 'utilise l'entier de la liste comme distance bufferTool.buffer_distance_or_field = buff 'exécute l'outil gp .Execute(bufferTool, Nothing) Next My.ArcMap.Application.CurrentTool = Nothing

En remarque vous devriez revoir un peu plus la programmation dans VB.Net. Une fois que vous êtes à l'aise avec la syntaxe et le flux logique, passez à la programmation dans ArcObjects. Assurez-vous également de consulter la documentation de l'API sur le site Web d'ESRI pour comprendre quels paramètres chaque objet prend et comment transmettre correctement les paramètres. Tableaux, listes, collections, etc. sont toutes des structures de données de base VB.Net/C#, et vous devez les maîtriser avant d'essayer de les implémenter. Les flux logiques, les boucles, etc. font également partie intégrante du développement .Net. Une dernière chose à considérer avec ArcObjects est la libération des ressources COM. Sans le faire correctement, vous finirez par avoir des fuites de mémoire, des verrous, des comportements indésirables. Je n'ai pas ajusté votre code pour cela, mais c'est certainement quelque chose que vous devriez également revoir.