2 votos

Problema extraño de OpenLayers con la capa base de GoogleMaps y la superposición de WMS

Estoy intentando superponer una capa WMS sobre la base de GoogleMaps. La capa WMS está definida así:

 var catastro_layer = new OpenLayers.Layer.WMS(
           "WMS Catastro",
           http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?SERVICE=WMS&VERSION=1.1.1,
           {
                   layers: "catastro",
                   format:"image/png",
                   srs: "EPSG:3785",
                   transparent: false
           }
   );

Las capas de GoogleMaps se definen como aquí http://openlayers.org/blog/2010/07/10/google-maps-v3-for-openlayers/ .

Como resultado, mi capa WMS aparece como una capa base más. Así, puedo seleccionarla en lugar de las otras capas de base, no en de ellos. Este capturas de pantalla muestran lo que quiero decir: http://dl.dropbox.com/u/6599273/capa_wms1.png

Las solicitudes del SGA están bien:

http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?SERVICE=WMS&VERSION=1.1.1&LAYERS=catastro&FORMAT=image%2Fpng&SRS=EPSG%3A3785&TRANSPARENT=false&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&BBOX=-1721973.3737,3228700.0733875,-1702405.4944625,3248267.952625&WIDTH=256&HEIGHT=256

Pero esto no es lo que necesito. Quiero una capa base de GoogleMaps y una capa transparente de WMS.

Ahora, si cambio la definición de la capa WMS sustituyendo transparent: false por transparent: true:

 var catastro_layer = new OpenLayers.Layer.WMS(
           "WMS Catastro",
           http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?SERVICE=WMS&VERSION=1.1.1,
           {
                   layers: "catastro",
                   format:"image/png",
                   srs: "EPSG:3785",
                   transparent: true
           }
   );

Mi capa WMS aparece como una superposición: http://dl.dropbox.com/u/6599273/capa_wms2.png justo lo que quiero.

Pero ahora, las solicitudes son incorrectas:

http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?SERVICE=WMS&VERSION=1.1.1&LAYERS=catastro&FORMAT=image%2Fpng&SRS=EPSG%3A900913&TRANSPARENT=true&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&BBOX=-1721973.3737,3228700.0733875,-1702405.4944625,3248267.952625&WIDTH=256&HEIGHT=256

Como puede ver, el epsg:3785 ha sido sustituido por el epsg:900913. Pero el único cambio que he hecho es "transparent: false" por "transparent: true". ¿Por qué ocurre esto?

Muchas gracias de antemano, y un saludo

4voto

FlySwat Puntos 61945

En OpenLayers, la capa base dicta cuál va a ser la "referencia espacial base". Por lo tanto, cualquier superposición se proyectará a la capa base. Dado que cualquier capa base que provenga de los proveedores basados en el consumidor (google, bing, yahoo, etc) sólo soporta 900913, entonces OpenLayers está haciendo lo correcto para su.

Si haces un Llamada a GetCapabilities en su servidor se dará cuenta de la siguiente sección:

<Layer queryable="1" opaque="0" noSubsets="0">
<Name>Catastro</Name>
<Title>Catastro</Title>
<Style>
<Name>Default</Name>
<Title>Default</Title>
<LegendURL width="160" height="500">
<Format>image/png</Format>
<OnlineResource xlink:type="simple" xlink:href="http://ovc.catastro.meh.es/Cartografia/WMS/simbolos.png"/>
</LegendURL>
</Style>
<BoundingBox SRS="EPSG:4230" minx="-18.409876" miny="26.275447" maxx="5.22598" maxy="44.85536"/>
<BoundingBox SRS="EPSG:4326" minx="-18.409876" miny="26.275447" maxx="5.22598" maxy="44.85536"/>
<BoundingBox SRS="EPSG:4258" minx="-18.409876" miny="26.275447" maxx="5.22598" maxy="44.85536"/>
<BoundingBox SRS="EPSG:32627" minx="770000" miny="3000000" maxx="2700000" maxy="5000000"/>
<BoundingBox SRS="EPSG:32628" minx="180000" miny="3000000" maxx="2170000" maxy="5000000"/>
<BoundingBox SRS="EPSG:23029" minx="-410000" miny="3000000" maxx="1650000" maxy="5000000"/>
<BoundingBox SRS="EPSG:23030" minx="-1050000" miny="3000000" maxx="1150000" maxy="5000000"/>
<BoundingBox SRS="EPSG:23031" minx="-1615000" miny="3000000" maxx="620000" maxy="5000000"/>
<BoundingBox SRS="EPSG:32629" minx="-410000" miny="3000000" maxx="1650000" maxy="5000000"/>
<BoundingBox SRS="EPSG:32630" minx="-1050000" miny="3000000" maxx="1150000" maxy="5000000"/>
<BoundingBox SRS="EPSG:32631" minx="-1615000" miny="3000000" maxx="620000" maxy="5000000"/>
<BoundingBox SRS="EPSG:25829" minx="-410000" miny="3000000" maxx="1650000" maxy="5000000"/>
<BoundingBox SRS="EPSG:25830" minx="-1050000" miny="3000000" maxx="1150000" maxy="5000000"/>
<BoundingBox SRS="EPSG:25831" minx="-1615000" miny="3000000" maxx="620000" maxy="5000000"/>
<BoundingBox SRS="EPSG:3785" minx="-2100000" miny="3000000" maxx="500000" maxy="5600000"/>
</Layer>

Y he aquí que el 900913 no es una opción. Es posible que tenga que hacerlo:

  • modificar la definición del servidor WMS para asegurarse de que 900913 está permitido como una reproyección válida
  • añadir una definición para ese nuevo srid (depende del servidor web que esté utilizando)
  • una combinación de estos

Mirando la URL, parece que estás usando un servidor ASP .NET WMS, ya que Geoserver es java y Mapserver si cgi, y ArcGIS Server es .NET, voy a suponer que este es un servidor de ESRI, por lo que las instrucciones en cómo modificar esto está aquí .

Actualización : Como señala mkennedy, el código oficial de la EPSG para SphericalMercator (también conocida como proyección de Google) es el 3857 y el número asignado anteriormente era el 3785. Si te preguntas por qué hay tantos números que se refieren a la misma referencia espacial, La entrada del blog de crschmidt le dará una pista ...

Ian señaló la sección de documentación pertinente de OpenLayer para forzar a OpenLayers a utilizar ese código EPSG en su lugar .

Como su sección GetCapabilities muestra 3785, el código de la documentación de OL no funcionará tal cual, tendrá que reemplazar todos los 3857 por 3785.

3voto

Adam Ernst Puntos 6939

Esa solicitud es correcta - Google utiliza una proyección mercator esférica (epsg:900913) por lo que si solicita su capa WMS en 3785 no se alineará con su mapa base de Google. Si su servidor no puede reproyectar los datos (como parece ser el caso) puede configurar un WMS en cascada (tanto GeoServer como MapServer pueden hacerlo) para obtener la capa WMS en 3785 y reproyectarla a 900913 por usted.

1voto

nd. Puntos 231

Si una capa no es una capa base, hay que añadir

isBaseLayer": false

en su definición

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