viernes, 20 de enero de 2012

Automatizacion en ArcGis I - Trabajando con columnas:

En este mes vamos a ver como trabajar con columnas en ArcGis. Como ejemplo, haremos una rutina para agregar y borrar columnas de varias capas.

En nuestro ejemplo usamos 4 layers o shapes como se muestra en la imagen siguiente:

La rutina para insertar 3 columnas (una de Texto, otra de Numero y una ultima de Fecha) en los shapes en el ArcMap es la siguiente:

Sub ProcLayers()
Dim pApp As IApplication
Dim pMxDoc As IMxDocument
Dim pMap As IMap

Dim LayerProc As ILayer ' en la variable LayerProc guardo el shape o layer a trabajar
Dim pFeatureClass As IFeatureClass
Dim pFeatureLayer As IFeatureLayer
Dim ColumnaNueva As IFieldEdit ' variable donde esta guardado la columna nueva

Set pApp = Application
Set pMxDoc = pApp.Document
Set pMap = pMxDoc.FocusMap

For i = 0 To pMap.LayerCount - 1 ' con este FOR leo uno por una los shapes o layers en la vista

Set LayerProc = pMap.Layer(i) 'guardo en LayerProc el layer o shape en la posicion i
Set pFeatureLayer = LayerProc '
Set pFeatureClass = pFeatureLayer.FeatureClass
Set ColumnaNueva = New Field

'creamos una columna de tipo STRING / TEXTO
ColumnaNueva.Type = esriFieldTypeString 'definiendo el tipo de la nueva columna
ColumnaNueva.Length = 20 'Longitud de la nueva columna
ColumnaNueva.Name = "C_TEXTO" 'Nombre de la nueva columna
pFeatureClass.AddField ColumnaNueva 'añadiendo la nueva columna al shape

'creamos una columna de tipo DATE / FECHA
ColumnaNueva.Type = esriFieldTypeDate
ColumnaNueva.Name = "C_DATE"
pFeatureClass.AddField ColumnaNueva

'creamos una columna de tipo NUMERICO / LONG
With ColumnaNueva
.Type = esriFieldTypeLong
.Precision = 18 'Longitud de la nueva columna, aca no tiene Scale por ser entero
.Name = "C_LONG"
End With
pFeatureClass.AddField ColumnaNueva

'en el caso que si deseamos crear una columna de tipo DOUBLE
'With ColumnaNueva
' .Type = esriFieldTypeDouble
' .Precision = 18 'Longitud de la nueva columna
' .Scale = 5' de las 18 cifras, 5 seran decimales
' .Name = "C_DOUBLE"
'End With
'pFeatureClass.AddField ColumnaNueva
Next
End Sub

La tabla de los 4 shapes procesados sera como se muestra en la figura:

Vemos que ahora existe 4 columnas, de los cuales, eliminaremos la columna “Id” que esta en los shapes mostrados en el ArcMap es la siguiente rutina:


Sub ProcLayers_BORRAR()
Dim pApp As IApplication
Dim pMxDoc As IMxDocument
Dim pMap As IMap

Dim LayerProc As ILayer
Dim pFeatureClass As IFeatureClass
Dim pFeatureLayer As IFeatureLayer
Dim ColumnaBorrar As IFieldEdit


Set pApp = Application
Set pMxDoc = pApp.Document
Set pMap = pMxDoc.FocusMap

For i = 0 To pMap.LayerCount - 1
Set LayerProc = pMap.Layer(i)
Set pFeatureLayer = LayerProc
Set pFeatureClass = pFeatureLayer.FeatureClass

Set ColumnaBorrar = New Field

If pFeatureClass.FindField("Id") >= 0 Then 'buscamos la columna a borrar "Id"
MsgBox "Columna encontrada"
ColumnaBorrar.Name = "Id"
pFeatureClass.DeleteField ColumnaBorrar 'si existe esta columna, es eliminada
Else
MsgBox "Columna no encontrada"
End If

Next
End Sub

Ahora vemos que fue eliminado.

Esperando que sea de utilidad este post, me despido hasta febrero, nos vemos.

ª