2 votos

¿Solución al problema de pintura de AxMapControl (sólo problemático en ciertas resoluciones de pantalla)?

Tengo una aplicación .NET dependiente de ArcGIS 9.3.1 que estoy actualizando a ArcGIS 10.

Tengo un AxMapControl sentado en un panel en un contenedor dividido en una pestaña. El Dockstyle se ajusta a Fill .

Desde la actualización a ArcGIS 10 desde la versión 9.3.1, el pintado del mapa dentro del control del mapa se ha vuelto inconsistente.

El tamaño inicial del mapa, tal y como está pintado, es "erróneo" y el mapa acaba llenando sólo, digamos, la mitad del panel, y aparece una segunda barra de desplazamiento vertical al lado del mapa. Esta segunda barra de desplazamiento es un glitch no se puede utilizar, y al final se pinta encima. El problema con el mapa parece ser sólo de pintura: el resto de la información presentada (por ejemplo, en la leyenda) es como si el mapa estuviera pintado correctamente en todo el panel.

Después de unas cuantas operaciones (como acercarse o alejarse, etc.) el pintado del mapa parece "ponerse al día" y el mapa se pinta correctamente, llenando todo el panel. Esta "puesta al día" parece ser más rápida cada vez que ejecuto la aplicación, lo que me hace sospechar de algún tipo de problema de sincronización o de caché.

No hay consistencia sobre cuándo se manifiesta el problema. A veces el ajuste de la resolución de la pantalla lo afecta, otras veces no.

Esto parece ser un problema interno al control. ¿Alguien tiene una solución (que no sea volver a la 9.3.1 DLLS)?

ACTUALIZACIÓN: He probado lo siguiente sin éxito:

  • Establecer la propiedad dock del mapcontrol como relleno ( http://forums.esri.com/Thread.asp?c=159&f=1707&t=209034#631591 )
  • Redimensionamiento manual en el evento de redimensionamiento del mapcontrol
  • Desactivar y reactivar el ActiveView
  • Cambiando las capas del mapa
  • Forzar muchos refrescos completos
  • Invalidar el mapa

1voto

Gene Puntos 1222

Intente aislar el problema. Si crea un nuevo formulario, añade un control dividido, coloca un control de mapa en uno de sus lados, luego hace referencia a un mxd en el control de mapa y ejecuta el formulario, ¿el MapControl se actualiza correctamente?

He probado esto mismo al leer tu pregunta, y me funciona bien de entrada. Si te funciona, podrías empezar a añadir trozos de tu código a tu aplicación de prueba hasta que puedas reproducir el error en la aplicación de ejemplo.

1voto

Farid Cher Puntos 5306

Cuando el formulario se redimensiona en tiempo de ejecución, el PageLayoutControl y MapControl no cambian de tamaño automáticamente. Para cambiar el tamaño de los controles de manera que siempre ocupen la extensión del formulario, ancle los controles al formulario. Si el PageLayoutControl o MapControl contiene muchos datos, redibujar estos datos mientras se redimensiona el formulario puede ser costoso. Para aumentar el rendimiento, suprima el redibujado de los datos hasta que se haya completado el redimensionamiento. Durante el redimensionamiento, se dibuja un mapa de bits estirado en su lugar.

  1. Anclar el MapControl en la parte superior, izquierda e inferior de su contenedor

  2. Añadir ResizeBegin al controlador de eventos MapControl :

    private void MapViewer_ResizeBegin(object sender, EventArgs e) { //Suppress data redraw and draw bitmap instead. axMapControl1.SuppressResizeDrawing(true, 0); }

  3. Añadir Form_ResizeEnd también el manejador de eventos:

    private void MapViewer_ResizeEnd(object sender, EventArgs e) { //Stop bitmap draw and draw data. axMapControl1.SuppressResizeDrawing(false, 0); }

1voto

jackysee Puntos 817

Siguiendo las indicaciones de M.D. para aislar el problema, he eliminado todos los manejadores de eventos de mi control de mapa, reduciéndolo a la funcionalidad básica de ArcGIS. El problema de la pintura del mapa desapareció. A continuación, añadí los controladores de eventos uno por uno para aislar el problema.

El problema parece ser un error en el control de ArcGIS donde si se inserta una capa de mapa en el código del OnExtentUpdated esto parece interrumpir el pintado del mapa y la apariencia del mapa pintado puede no reflejar la extensión actualizada.

void mapAxMapControl_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e) { ... // Need to check if grid size needs to change if (e.sizeChanged) { ... IMapLayers mapLayers = (IMapLayers)mapControl.Map; mapLayers.InsertLayer(gridLayerHander.Layer, false, 1): ... } ... }

He movido el código de inserción de la capa del mapa a la menos apropiada OnViewRefreshed manejador de eventos, para lo cual puede haber una penalización de rendimiento ya que el código se ejecuta más a menudo - especialmente porque no hay sizeChanged propiedad para comprobar.

0voto

jackysee Puntos 817

Resumen

El IScreenDisplay tiene una interfaz ScaleContents y que se establece en el valor de true

Antecedentes

Como esta pregunta revela, ESRI cambió el comportamiento por defecto del control del mapa en ArcGIS 10.

Menos redistribución en la vista de datos

En versiones anteriores de ArcMap, si se cambiaba el tamaño de la pantalla de ArcMap mientras trabajaba en la vista de datos, ya sea cambiando el tamaño de la ventana de ArcMap o acoplando/desacoplando/redimensionando una ventana acoplable, por defecto su mapa se ha redibujado completamente para que encaje en el área de visualización disponible disponible . Así que la escala cambió y la extensión se mantuvo igual (aunque Aunque es posible que se vea una cobertura geográfica adicional en función de lo bien que encaje la extensión dentro de la nueva forma del área de visualización). En la versión 10 se ha cambiado el comportamiento de dibujo por defecto en la vista de datos para que cuando se cambie el tamaño de la pantalla, el mapa ya no se redibujará para encajar en la pantalla. En su lugar, la escala se mantiene igual y la extensión cambiará. Si hace la pantalla más grande, verá una mayor extensión geográfica, y viceversa.

Esto tiene la ventaja de que la parte de la pantalla que no se ve afectada por el cambio de tamaño no necesita ser redibujada. Por ejemplo, si cierra una ventana acoplada, sólo la parte de la pantalla que estaba que estaba oscurecida por la ventana necesita ser redibujada. También es más fácil trabajar con la pantalla porque las características geográficas de su mapa no se mueven de su mapa no se mueven al acoplar y desacoplar las ventanas. Las características de su mapa permanecen en en la pantalla hasta que se desplaza o amplía el mapa manualmente. mapa.

(src: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/What_s_new_for_map_display_and_navigation/00qp0000001w000000/ )

Resolución

Puede revertir este cambio utilizando el botón IScreenDisplay para establecer el ScaleContents propiedad a true . Esto se puede establecer una vez que el mapa está cargado en el control.

Para mí, la línea de código sería la siguiente:

mapControl.ActiveView.ScreenDisplay.ScaleContents = True;

Esto restablece el antiguo comportamiento de redibujado del mapa y, como efecto secundario, soluciona el problema de redibujado explicado aquí.

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