6 votos

Automatizar un Proyecto de ArcGIS que es una visualización de mapa

Soy relativamente nuevo en GIS y estoy buscando automatizar un proyecto. Tengo mi 'mapa base' creado en ArcGIS, pero ahora necesito crear varios cientos más, por lo que estoy buscando un método automatizado para lograrlo. Tengo una versión de escritorio de ArcGIS 9.3. Actualmente estoy usando VB, Python no está instalado y requerirá la aprobación de IT y un caso de negocio...

Las cosas que necesito averiguar: 1. Seleccionar el Área de Interés (Polígono) 2. Hacer zoom en el área seleccionada 3. Cambiar título 4. Cambiar la leyenda para agregar algunos detalles (puede ser el nombre de la capa o la descripción de la capa). 5. Exportar a PDF.

He resuelto el #1, pero estoy atascado en el #2, porque aunque hace zoom en el polígono de interés no está eligiendo el mismo zoom que obtendría si manualmente hiciera clic en "Hacer zoom a las entidades seleccionadas".

¿Alguna sugerencia sobre cosas en las que debería buscar o recursos?

Gracias, Reese

12voto

Hameno Puntos 129

Si estás utilizando el enfoque ArcObjects/VBA macro en ArcMap, puedes hacer lo siguiente (lo siento, algunos de los ejemplos de código están en .NET, pero la idea es la misma):

para el número 2 usa ArcMap Command Zoom to Selected Features:

 Dim pUID As New UID
 Dim pCmdItem As ICommandItem
 Dim pApp As IApplication
 ' Usa el GUID del comando Save
 pUID.Value = "esriArcMapUI.ZoomToSelectedCommand"
 pUID.SubType = 3
 pCmdItem = pApp.Document.CommandBars.Find(pUID)
 pCmdItem.Execute()

para el número 3:

            Dim pLayoutS As IPageLayout2
            Dim pGCS As IGraphicsContainer
            Dim pTS As ITextElement
            Dim pAvS As IActiveView
            Dim pElPropS As IElementProperties
            Dim pElementS As IElement

            pLayoutS = CType(m_pMxDoc2.PageLayout, IPageLayout2)
            pGCS = CType(pLayoutS, IGraphicsContainer)
            pAvS = CType(pLayoutS, IActiveView)

            pGCS.Reset()
            pElementS = pGCS.Next

            'Obtener gráfico de fecha existente y actualizar hora y fecha.
            Do Until pElementS Is Nothing
                pElPropS = CType(pElementS, IElementProperties)
                If pElPropS.Name = "Current Text" Then
                    pTS = CType(pElementS, ITextElement)
                    pTS.Text = "Nuevo Texto"
                    pAvS.PartialRefresh(esriViewDrawPhase.esriViewGraphics, pElementS, Nothing)
                End If
                pElementS = pGCS.Next
            Loop

para el número 4, ¿puedes apagar las capas que no deseas mostrar en la leyenda:

            Dim pMap As IMap = Nothing
            Dim pLayer As ILayer
            Dim pGroupLayer As IGroupLayer = Nothing
            Dim i As Integer

            Dim pGrphcon As IGraphicsContainer = Nothing
            Dim pElem As IElement = Nothing
            Dim pTxtElem As ITextElement = Nothing
            'Dim pElPropS As IElementProperties
            Dim pAvS As IActiveView = Nothing
            Dim pPageLayout As IPageLayout

            pPageLayout = m_pMxDoc2.PageLayout
            m_pMxDoc2.ActiveView = pPageLayout

            pMap = m_pMxDoc2.FocusMap

            Dim pContentsView As IContentsView
            pContentsView = m_pMxDoc2.CurrentContentsView

            For i = 0 To pMap.LayerCount - 1
                If pMap.Layer(i).Name = "Mi Capa para apagar" Then
                    pLayer = pMap.Layer(i)
                    If TypeOf pLayer Is IGroupLayer Then
                        pGroupLayer = pLayer
                        pContentsView.SelectedItem = pLayer
                        'Apagar la capa aquí en el TOC
                        pGroupLayer.Visible = False

                        strLayerName = pLayer.Name

                        m_pMxDoc2.UpdateContents()
                        m_pMxDoc2.ActiveView.Refresh()

                    End If
                End If
            Next i

para el número 5:

Ver este ejemplo - Exportar Active View a JPEG

4voto

Niall C. Puntos 1234

Utilizo DDP Luego configuro varios campos en mis datos.

nombre de la página, número de página, rotación, ref_escala, escala, página_activa.

Utilizo estos campos para gestionar la escala de zoom y la escala de referencia en cada página. La mayoría de ellos van en el cuadro de diálogo de páginas impulsadas por datos. Página_activa la utilizo para limitar los objetos (mediante consulta) que generarán páginas.
Por cierto: Puede utilizar entidades lineales como la capa de índice.
Luego utilice la escala en la pestaña de extensión para obtener el zoom del que está hablando.
Luego, un diseño de plantilla con casi cualquier cosa que pueda imaginar como marginales se puede utilizar configurando texto dinámico, habilitando coincidencia/no coincidencia en la definición de página, leyenda dinámica y más.

páginas impulsadas por datos

Luego, al imprimir, utiliza la opción de todas las páginas para exportar a pdf o imprimir.

Exportar páginas

-2voto

Paul Lalonde Puntos 3940

Debes usar Arcobject y programar utilizando C#, VB.net y otros lenguajes de programación que soporten Arcobject.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X