6 votos

MapScale no se conserven adecuadamente en mxd cuando cambiar mediante programación fuera del entorno de ArcMap

Estoy tratando de cambiar la escala de un mapa, en una mxd FUERA de ArcMap en una aplicación independiente de Windows. El problema es la escala que nunca persiste - el mejor código que he llegado es la siguiente:

private void UpdateMapScaleInMxd(double scale, string mxdFullPath)
        {
            IMapDocument mapDocument = new MapDocumentClass();
            mapDocument.Open(mxdFullPath, "");
            IPageLayout pageLayout = (IPageLayout)mapDocument.ActiveView;

            IGraphicsContainer graphicsContainer = (IGraphicsContainer)pageLayout;
            graphicsContainer.Reset();
            IMapFrame mapFrame;

            IActiveView tmpActiveView = null;

            IElement element = graphicsContainer.Next();
            while (element != null)
            {
                if (element is IMapFrame)
                {
                    mapFrame = (IMapFrame)element;
                    tmpActiveView = (IActiveView)mapFrame.Map;

                    mapFrame.ExtentType = esriExtentTypeEnum.esriExtentScale;
                    mapFrame.MapScale = scale;
                    tmpActiveView.Refresh();
                }

                element = graphicsContainer.Next();
            }

            mapDocument.Save(false, false);
            mapDocument.Close();
        }

Puedo comprobar el mxd con la apertura en ArcMap y, a la escala del mapa ha cambiado yo.e el marco de datos que ahora tiene una escala fija y la escala combobox es de color gris.

Así que ahora trato de exportar el mapa como un archivo PDF en el código - y lo más frustrante es - exporta el mapa en la escala anterior que se puso en la escala acabo de cambiar a! Tan exasperante - si alguien me puede ayudar a entender dónde estoy yendo mal que sería genial.

ACTUALIZACIÓN:

En el código de arriba, yo estoy usando el IMapDocument - y creo que hay limitaciones (de acuerdo a la ayuda):

La interfaz proporciona IMapDocument propiedades y métodos para la lectura de mapa los archivos de documento (*.mxd, *mxt, .pmf) y escribir y guardar los cambios en el mapa los archivos de documento (.mxd). Sin embargo, ya que no está ligada a la de ArcMap aplicaciones específicas de la aplicación funcionalidad en el MapDocument se no se conservan. Ejemplos de específica de la aplicación con la funcionalidad la configuración de la barra, las personalizaciones de la interfaz de usuario, Los proyectos de VBA, y ArcMap gráficos. Para escritorio desarrolladores que necesitan utilizar esta funcionalidad, el MxDocument interfaz, ubicada en la ArcMapUI la biblioteca es una mejor opción.

Ahora estoy pensando que el cambio de la escala del mapa puede no ser persistentes utilizando correctamente el IMapDocument de la interfaz.

16voto

saint_groceon Puntos 2696

Si establece manualmente la mapframe fijos de la escala y ejecute el código que exporta a pdf, hacer de obtener los resultados correctos?

Si no, tal vez el problema es con el código que realiza la exportación. Puedes publicar ese código?

8voto

Kalid Puntos 6290

Resuelto - y tomó Redlands para volver con un poco inusual revisión, se utiliza el InteropServices biblioteca - es de esperar que se fija correctamente en una futura versión o parche de ESRI.

[DllImport("User32.dll")]
public static extern int GetDesktopWindow(); 

private IMapDocument mapDocument = null;

private void ChangeMapScale()
{
    mapDocument.Open(@"C:\Temp\foo.mxd", null);

    IPageLayout pageLayout = mapDocument.PageLayout;
    IActiveView activeView = (IActiveView)pageLayout;
    IMap map = activeView.FocusMap;

    activeView = (IActiveView)mapDocument.PageLayout;
    activeView.Activate(GetDesktopWindow());

    map.MapScale = value;
    activeView.Refresh();

    mapDocument.Save(true, true);
}

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