Programación SIG

domingo, junio 25, 2006

Cómo programar con ArcObjects y no morir en el intento - 2ª Parte

Algunos compañeros me preguntaban si escribiendo este tutorial de ArcObjects había muerto en el intento como sugiere el título. Ja, ja, ja, no, en realidad es por otros motivos por los que he estado alejado del blog, pero ahora tengo intención de retomarlo.

Así que continúo la entrega, en esta ocasión hablando de la opción más sencilla y que utilizan casi todos los que empiezan a trabajar con ArcObjects. Me refiero a las macros VBA en ArcGIS.

La primera pregunta es ¿por dónde empezar?. Un buen punto de partida puede ser la ayuda, los foros de internet (en http://edn.esri.com), ArcScripts (http://arcscripts.esri.com), etc. El siguiente ejemplo está extraído directamente de la ayuda de ArcGIS.

Para hacer funcionar una macro, simplemente abrimos el editor de Macros de Visual Basic para Aplicaciones (atajo de teclado: Alt+F11) y pegamos el código. Para escoger la macro que queremos ejecutar, podemos acceder al diálogo de macros con el atajo de teclado Alt+F8.

Este ejemplo añade, en una vista layout, elementos auxiliares de mapa como la leyenda o el simbolo de norte. Mas detalles en los comentarios del código.

Public Sub AddMapSurrounds()

Dim pMxDoc As IMxDocument
Dim pActiveView As IActiveView
Dim pEnv As IEnvelope
Dim pID As New UID
Dim pMapSurround As IMapSurround
Dim pMarkerNorthArrow As IMarkerNorthArrow
Dim pCharacterMarkerSymbol As ICharacterMarkerSymbol

Set pMxDoc = Application.Document
Set pActiveView = pMxDoc.PageLayout
Set pEnv = New Envelope

'Añade símbolo de norte
pEnv.PutCoords 0.2, 0.2, 1, 1
pID.Value = "esriCore.MarkerNorthArrow"
Set pMapSurround = CreateSurround(pID, pEnv, "North Arrow", pMxDoc.FocusMap, pMxDoc.PageLayout)

'Cambia el símbolo de norte por defecto
Set pMarkerNorthArrow = pMapSurround 'QI
Set pCharacterMarkerSymbol = pMarkerNorthArrow.MarkerSymbol 'clona el símbolo
pCharacterMarkerSymbol.CharacterIndex = 200 'cambia el símbolo
pMarkerNorthArrow.MarkerSymbol = pCharacterMarkerSymbol

'Añade una leyenda
pEnv.PutCoords 7.5, 0.2, 8.5, 4
pID.Value = "esriCore.Legend"
Set pMapSurround = CreateSurround(pID, pEnv, "Legend", pMxDoc.FocusMap, pMxDoc.PageLayout)

'Refresca el display gráfico
pActiveView.PartialRefresh esriViewGraphics, Nothing, Nothing
End Sub


Private Function CreateSurround(pID As UID, pEnv As IEnvelope, strName As String, _
pMap As IMap, pPageLayout As IPageLayout) As IMapSurround

Dim pGraphicsContainer As IGraphicsContainer
Dim pActiveView As IActiveView
Dim pMapSurroundFrame As IMapSurroundFrame
Dim pMapSurround As IMapSurround
Dim pMapFrame As IMapFrame
Dim pElement As IElement

Set pGraphicsContainer = pPageLayout
Set pMapFrame = pGraphicsContainer.FindFrame(pMap)
Set pMapSurroundFrame = pMapFrame.CreateSurroundFrame(pID, Nothing)
pMapSurroundFrame.MapSurround.Name = strName

'Asignar la geometría a un MapSurroundFrame
'para darle una localización,
'activarlo y añadirlo al PageLayout

Set pElement = pMapSurroundFrame
Set pActiveView = pPageLayout
pElement.Geometry = pEnv
pElement.Activate pActiveView.ScreenDisplay
pGraphicsContainer.AddElement pElement, 0

Set CreateSurround = pMapSurroundFrame.MapSurround
End Function


En general, podemos extraer muchos ejemplos ya hechos y adaptarlos a nuestras necesidades. La principal ventaja es que esta forma de programar con ArcObjects es relativamente sencilla. También es su principal inconveniente, pues se puede acabar haciendo programación "copy&paste" sin saber muy bien qué estamos haciendo. Una recomendación que se suele dar es no olvidar lo que está pasando por debajo, documentarse bien y echarle un vistazo al "Exploring ArcObjects", libro muy útil si se va a programar en serio con esta tecnología.

El ámbito de aplicación de este tipo de macros está restringido al uso de aplicaciones cliente de ArcGIS Desktop (ArcMap, ArcCatalog, etc.). En la siguiente entrega daremos un paso más para ver cómo se pueden hacer macros para tareas repetitivas que no dependan necesariamente de estas aplicaciones de usuario final.

1 Comments:

  • Gracias por la entrada tenia un par de preguntas y espero que puedas aclarar mid dudas..... estoy realizando un proyecto de grado, estoy en una insitutcion donde ya tienen un arcgis server montado con aplicaciones y mapas funcionando y ahora quieren acoplar un sistema hecho en C# .net .... como es posible realizar esto?¿? si tienes algunos manuales o paginas donde pueda encontrar informacion te lo agradeceria mucho.. gracias de antemano.
    Sergio Herrera

    By Blogger Cabra, at 3:27 p. m.  

Publicar un comentario

<< Home