4 votos

¿Se pueden renderizar correctamente teselas de mapa personalizadas a través de ArcObjects dentro de un complemento de ArcMap?

En ArcObjects para ArcGIS 10.1, estamos intentando renderizar tiles de mapa pre-generados como una capa de mapa base (grupo). Los propios tiles siguen el esquema de teselación auxiliar esférico típico de Web Mercator.

Bajo ArcMap 10.1, los tiles no se renderizan adecuadamente:

resultado de renderizado incorrecto

y la interfaz de usuario de ArcMap 10.1 muestra el siguiente error de dibujo: "Propiedades de longitud de onda de banda de ráster faltantes"

[Resultado esperado] en ArcMap 10.0:

introducir descripción de la imagen aquí

Aunque esto está relacionado con ¿Se pueden consumir tiles de mapas personalizados a través de ArcObjects dentro de mi complemento de escritorio de ArcGIS 10?, que era una pregunta de enfoque holístico. Aquí estoy preguntando específicamente cómo renderizar correctamente los tiles en ArcMap 10.1.

Logramos agregar/renderizar la capa dentro de 10.0 mediante el siguiente código:

_tileLayer = new MyCustomTileLayer();    // implementa ILayer entre otros..
_coverageBasemapLayer = new BasemapLayerClass();
_coverageGroupLayer = _coverageBasemapLayer as IGroupLayer;

// agregar la capa al mapa
IMap map = ArcMap.Document.FocusMap;
map.AddLayer((ILayer)_coverageBasemapLayer);

...

// conectar el evento AfterDraw
IActiveViewEvents_Event avEvent = ArcMap.Document.FocusMap as IActiveViewEvents_Event;
avEvent.AfterDraw += new IActiveViewEvents_AfterDrawEventHandler(avEvent_AfterDraw);

private void avEvent_AfterDraw(IDisplay Display, esriViewDrawPhase phase) {
    // forzar el re-dibujo
    _tileLayer.Draw(esriDrawPhase.esriDPGeography, Display, null);
}

...

// efectivamente, dentro de _tileLayer.Draw() aquí...
IRasterLayer rl = new RasterLayerClass();
// 'file' es la ruta completa al PNG del tile de mapa en el sistema de archivos local, descargado
// y/o en caché
rl.CreateFromFilePath(file);

_coverageGroupLayer.Add(rl);

Presumiblemente muchas cosas han cambiado dentro del motor de renderizado para 10.1.

¿Podría alguien proporcionar información sobre los cambios en ArcObjects requeridos?

Específicamente, ¿cómo podemos lograr esto [correctamente] dentro de ArcObjects bajo 10.1?

2voto

Ed Spencer Puntos 196

En 10.1, el StretchType para rasters parece haber cambiado de esriRasterStretch_NONE a "Recorte porcentual", lo que está causando problemas de color con mosaicos de 24 y 32 bits.

Lo he resuelto con el siguiente código:

var image = new Bitmap(file, true);
var format = image.PixelFormat;
if (format == PixelFormat.Format24bppRgb || format == PixelFormat.Format32bppArgb || format == PixelFormat.Format32bppRgb)
{
    var rasterRGBRenderer = new RasterRGBRendererClass();
    ((IRasterStretch2rasterRGBRenderer).StretchType =
               esriRasterStretchTypesEnum.esriRasterStretch_NONE;
    rl.Renderer = rasterRGBRenderer;
}

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