Camino de migas Camino de migas
Blogs Blogs
OpenLayers: Reproyeción de capas WMS (EPSG:4326) sobre proyección de GoogleMaps (EPSG:900913).

 

 

Uno de los principales problemas a los que nos enfrentamos a la hora de mostrar datos cartográficos es la multi-proyección de las diferentes capas que queremos integrar. El problema se acentúa cuando utilizamos proyecciones tan específicas como la EPSG:900913 de GoogleMaps. A continuación os comento cómo resolvimos ciertos problemas que nos fueron surgiendo con la utilización de capas servidas vía WMS con proyección EPSG:4326. Entre los problemas que encontrábamos era que la mayoría de los servidores OGC, de cartografía de España, ofrecían datos en unas proyecciones que no terminaban de encajar con las de GoogleMaps, como el IDEE, Catastro, Cartociudad, etc... ni con los datos propios almacenados en proyecciones diferentes. Esto hacía que los mapas y puntos editados con OpenLayers apareciesen desplazados en oblicuo, con lo que no podíamos solapar las capas.

 

El problema lo resolvimos configurando OpenLayers para que permita GoogleMaps como capa principal base, y peticiones

a mapserver para proyecciones sobre EPSG:4326, siendo mapserver el encargado de realizar las peticiones al resto de servidores

OGC vía WMS sobre la proyección correcta. Por cierto, el OpenLayers Spherical Mercator no nos valió, o no supimos configurarlo bien.

 

Las configuraciones que hemos realizado en cada uno de los archivos del sistema son:

 

CONFIGURACIÓN OPENLAYERS 

  • En el api de definición de capas de Openlayers, hemos definido como capa principal la de GoogleMaps y una nueva con proyección EPSG:4326. 

var options = {

projection: new OpenLayers.Projection("EPSG:900913"),

displayProjection: new OpenLayers.Projection("EPSG:4326"),

units: "m",

numZoomLevels: 18,

maxResolution: 156543.0339,

maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)

};

map = new OpenLayers.Map('map', options); 

  • Hemos definido una nueva capa WMS sobre nuestro cgi "mapserv" que realiza las llamadas al CGI de mapserver. 

var wms = new OpenLayers.Layer.WMS( "Pruebas","http://localhost:8180/pruebas/cgi-bin/mapserv?",

{ map: /opt/configuracion.map,

transparent: 'true', layers:"Puntos Interés" ,

format: 'image/png',

units: "m"

},{singleTile: 'false'});

 


CONFIGURACIÓN MAPSERVER 

  • Para que mapserver entienda la proyección de Google se ha incluido esta linea en el archivo /usr/share/proj/epsg: 

<900913 +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs

 

http://trac.osgeo.org/mapserver/wiki/RenderingOsmData

 

  • En el archivo de configuración del mapserver "configuracion.map" se han definido las proyecciones a utilizar, aunque creo que no son todas necesarias: 

"wms_srs" "epsg:4326 EPSG:23030 EPSG:900913"

PROJECTION

"init=epsg:900913"

END 

  • En el archivo de configuración de mapserver hemos incluido la definición de una nueva capa con los datos da acceso WMS de Catastro.

LAYER

NAME CATASTRO

SIZEUNITS PIXELS

TYPE RASTER

UNITS METERS

STATUS off

TRANSPARENCY 40

CONNECTIONTYPE WMS

CONNECTION "http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx?"

METADATA

"wms_srs" "EPSG:4326"

"wms_name" "Catastro"

"wms_formatlist"

"image/png,image/jpeg,image/gif,image/bmp,image/tif,image/wmf"

"wms_format" "image/png"

"selected" "0"

"wms_server_version" "1.1.0"

"wms_title" "Catastro"EPSG:4326

"wms_transparent" "false"

"wms_connectiontimeout" "40"

END

END # Layer

 

Espero que a alguien le ayude los pasos que hemos seguido, y sobre todo si sabéis una forma más sencilla de utilización en openLayers con la cartografía de GoogleMaps como base, capas de mapserver, capas WMS en proyección EPSG:4326 y funcionalidades de edición, que nos lo comente.

 

Un saludo

 

 

 

Mostrando 1 resultado.