Aunque en una entrada posterior hablaré sobre las proyecciones, ahora me sirve como introducción, indicar que uno de los problemas que nos podemos encontrar es trabajar con datos que son de diferente tipo de proyección.
Para estas latitudes, es muy común trabajar con el sistema de referencia Datum ED 50/UTM 30N o si estamos más situados al oeste, como puede ser Huelva o Galicia, podríamos estar hablando de Datum ED 50/UTM 29N.
Estas proyecciones son válidas para un rango geográfico. Fuera de este rango geográfico, simplemente no son válidas para georeferenciar.
Es por esto que google utiliza otros sistemas de referencia, normalmente WGS 84 que además se corresponde con el sistema de referencia de la mayoría de los GPS por omisión.
Aquí hay un concepto que no tengo del todo claro, pero si sé que tiene que ver con el modelo matemático de la esfera terrestre utilizado.
Para que nos entendamos. Si queremos solapar nuestros datos sobre cualquier mapa de google, deberíamos de utilizar el sistema de referencias Spherical Mercator de google.
Vale, a modo de resumen, el problema es, que tengo sistemas de referencias diferentes y que tengo que "transformar" a uno en concreto para trabajar siempre sobre el mismo sistema de referencias. Si has llegado a la misma conclusión, es que estamos en la misma onda.
Bien, estamos de acuerdo en el problema, pero todavía nos queda establecer una estrategia para resolverlo.
La estrategia que yo he adoptado (que seguro que no es la única y quizás tampoco la mejor) es crear una vista de mis datos geográficos, pero transformados a este nuevo sistema de referencia (Spherical Mercator de google).
Bueno, en este caso podemos estar de acuerdo o no con la solución, pero nos ponemos manos a la obra para implementarla.
Antes de nada (tarde o temprano, nos daríamos cuenta de ello), os informo de que en nuestra base de datos que hemos creado y poblado con tanto esmero, no existe el sistema de referencia Spherical Mercator de google. Bueno, no pasa nada. Lo metemos.
Para meterlo, lanzamos la siguiente query.
INSERT into spatial_ref_sys (
srid, auth_name, auth_srid, srtext, proj4text
) values (
900913 ,'EPSG',900913,
'GEOGCS["WGS 84",
DATUM["World Geodetic System 1984",
SPHEROID["WGS 84", 6378137.0, 298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich", 0.0,
AUTHORITY["EPSG","8901"]],
NIT["degree",0.017453292519943295],
AXIS["Longitude", EAST],
AXIS["Latitude", NORTH],
AUTHORITY["EPSG","4326"]],
PROJECTION["Mercator_1SP"],
PARAMETER["semi_minor", 6378137.0],
PARAMETER["latitude_of_origin",0.0],
PARAMETER["central_meridian", 0.0],
PARAMETER["scale_factor",1.0],
PARAMETER["false_easting", 0.0],
PARAMETER["false_northing", 0.0],
UNIT["m", 1.0],
AXIS["x", EAST],
AXIS["y", NORTH],
AUTHORITY["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'
);
CUIDADO aqui se ha puesto la sentencia con
retorno de carros en las cadenas de texto, es posible
que copiar y pegar no funcione directamente.
Vale, ya tenemos el sistema de referencia con el que vamos a trabajar. Ahora necesitamos hacer una vista, que contenga toda la información de mis elementos espaciales (features) en dicho sistema de referencia.
CREATE OR REPLACE VIEW [view_table_name] AS
SELECT [table_name].[table_field1],
[table_name].[table_field2],
st_transform(st_setsrid(
[table_name].[geom_field],
23030
), 900913
)
AS the_geom
FROM [table_name];
Hay que tener en cuenta que podemos poner tantos campos como necesitemos o tenga la tabla en cuestión.
Por otra parte, se asigna el alias the_geom al campo que contendrá los datos de georeferencia, que es el nombre que asigna por omisión el loader de postGis (shp2pgsql)
Con esto ya tenemos una vista con los datos en la proyección correcta para solaparla con los mapas de Google Maps.
Fuentes:
- http://trac.openlayers.org/wiki/SphericalMercator