5 votos

Obtención de WMS LegendGraphic mediante GeoServer y GeoWebCache?

Estoy usando GeoServer junto con el predeterminado, construir en GeoWebCache. También estoy utilizando Extjs y GeoExt. Todo está funcionando bien, a excepción de la solicitud de gráficos de la leyenda. Mi código para las capas es el siguiente:

var MyLayer = new OpenLayers.Layer.WMS( "MyLayer",
        "http://my-ip-address/geoserver/gwc/service/wms",
        {layers: 'MyLayer',transparent: "true",format: "image/png",
        tileSize: new OpenLayers.Size(256,256),
                tilesOrigin : map.maxExtent.left + ',' + map.maxExtent.bottom },
                { isBaseLayer: false, visibility:false} );

Y para el panel de la leyenda:

var legend = new GeoExt.LegendPanel({
    title: "Map Legend",
    iconCls: 'legend',
                autoScroll: true,
                defaults: {
                    cls: 'legend-item',
        baseParams: {FORMAT: 'image/png'}
                },
                items: []
            });

Cada vez que intento abrir este mapa, me aparece el nombre de la capa en mi panel de leyenda, pero no hay ninguna imagen para la leyenda de la capa y firebug da este error:

"NetworkError: 400 Bad Request - http://my-ip-address/geoserver/gwc/service/wms?TRANSPARENT=true&TILESIZE=256,256&TILESORIGIN=72.45,24.45&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&EXCEPTIONS=application.ogc.se_xml&LAYER=MyLayer&FORMAT=image/gif&SCALE=2500000.0000000005&FORMAT=image/png "

Entiendo que tendré que sustituir parte de la petición de la URL para GetLegendGraphic. Pero no soy capaz de hacer lo mismo. ¿Podría alguien decirme cómo lograr esto?

  • Estoy utilizando GeoServer 2.1.1; GeoWebCache 1.2.6, OpenLayers 2.11, Ext 3.2.1 y GeoExt 1.1.

4voto

Celso Puntos 66

La url correcta del gráfico de la leyenda para cada capa y estilo está incrustada en el GetCapabilities respuesta como la LeyendaURL elemento. Para conseguirlo:

  1. obtener el documento xml de capacidades
  2. parsearlo (OpenLayers tiene una clase parser)
  3. recuperar el LegendURL de cada capa que le interese

También puede crear una solicitud GetLegendGraphic siguiendo la documentación aquí .

0 votos

Necesito un poco más de explicación. ¿Puede proporcionarme un ejemplo?

0 votos

Ejemplo de leyendaURL: tu-dominio.com/geoserver/

4voto

heidi123p Puntos 121

Finalmente soy capaz de obtener LegendGraphic. de este Correo electrónico: .

Todo lo que tuve que hacer es un bucle a través de todas mis capas, y luego establecer el legendURL.

 var layers; 
 for(var i = 1; i < map.layers.length; i++) 
 { 
    layers = mapPanel.layers.getAt(i);
    layers.set("legendURL","http://my-ip-address/geoserver/wms?TRANSPARENT=true&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&EXCEPTIONS=application%2Fvnd.ogc.se_xml&FORMAT=image%2Fpng&LAYER=" + map.layers[i].params["LAYERS"]); 
  } 

Tal vez esto ayude a alguien más.

1voto

Kristina Puntos 1

A mí me ha funcionado simplemente utilizar el gx_urllegend en lugar del gx_wmslegend:

items: [{
    xtype: 'gx_legendpanel',
            defaults: {
                labelCls: 'mylabel',
                style: 'padding:5px'
            },
            dynamic: true,
            layerStore: Ext.getStore('Layers'),
            preferredTypes: ['gx_urllegend'],
        }

1voto

Ian Puntos 111

Una forma más fácil de resolver esto es reescribir la URL de GetLegendGraphics utilizando un proxy inverso como Barniz y deshacerse de "/gwc/service". El servidor WMS estándar responderá en lugar de GWC.

La regla del barniz puede ser:

if (req.url ~ "/gwc/service/" && req.url ~ "REQUEST=GetLegendGraphic") {
     set req.url = regsub(req.url, "/gwc/service/", "/");
}

1voto

Joshua McKinnon Puntos 458

Como solución, puede activar la "integración directa de WMS" y utilizar el mismo punto final de WMS para las solicitudes con y sin mosaico, lo que significa que la solicitud GetLegendGraphic será manejada directamente por GeoServer.

Por ejemplo, en el siguiente caso:

layBase = new OpenLayers.Layer.WMS("BASE", "http://:/geoserver/ gwc/servicio/wms /icom-icom-base/wms?", { capas : "icom-base:BASE", formato : "image/png }

La integración directa del SGA sería:

layBase = new OpenLayers.Layer.WMS("BASE", "http://:/geoserver/icom-base/wms?", { capas : "icom-base:BASE", formato : "image/png", mosaico : true }

Consulte el siguiente enlace para ver los requisitos detallados: http://docs.geoserver.org/latest/en/user/geowebcache/using.html

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