
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);
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