7 votos

desalineación de gdal2tiles

Tengo una imagen de mapa que he reproyectado de OSGB36 a la proyección de googleMaps (EPSG:900913). Cuando ejecuto gdal2tiles en el mapa reproyectado, los resultados no están alineados con las imágenes de google maps (no sólo por un poco, sino por decenas de kilómetros).

Si lo paso por MapTiler (de maptiler.org) se alinea bien. MapTiler pide un SRS que no especifico cuando uso gdal2tiles. Así que creo que me he equivocado de escenario.

Además, cuando ejecuto gdalinfo en el archivo deformado, las coordenadas de las esquinas parecen erróneas. Por ejemplo, para la esquina inferior izquierda la latitud es 51.143906, pero debería ser 50.955887 para google maps.

Estoy usando gdal16 instalado por OSGeo4W en Windows7 64-bit.

Archivo deformado aquí.. https://docs.google.com/leaf?id=0B93lksnTC7_cNzIzZWQ0MDYtMTY5Yy00NjY0LThiMjktZjc2YzA3MmU5NjI4

gdalinfo en el archivo warped...

C:\OSGeo4W\apps\gdal-16\bin>gdalinfo e:buckland_WARPED.tiff
Driver: GTiff/GeoTIFF
Files: e:buckland_WARPED.tiff
Size is 611, 419
Coordinate System is:
PROJCS["Google Maps Global Mercator",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.2572235630016,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Mercator_1SP"],
    PARAMETER["central_meridian",0],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]]]
Origin = (-474051.292871501410000,6617009.987366309400000)
Pixel Size = (8.392224865731517,-8.392224865731517)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( -474051.293, 6617009.987) (  4d15'30.51"W, 51d 9'49.57"N)
Lower Left  ( -474051.293, 6613493.645) (  4d15'30.51"W, 51d 8'38.06"N)
Upper Right ( -468923.643, 6617009.987) (  4d12'44.69"W, 51d 9'49.57"N)
Lower Right ( -468923.643, 6613493.645) (  4d12'44.69"W, 51d 8'38.06"N)
Center      ( -471487.468, 6615251.816) (  4d14'7.60"W, 51d 9'13.82"N)
Band 1 Block=611x3 Type=Byte, ColorInterp=Red
  Mask Flags: PER_DATASET ALPHA
Band 2 Block=611x3 Type=Byte, ColorInterp=Green
  Mask Flags: PER_DATASET ALPHA
Band 3 Block=611x3 Type=Byte, ColorInterp=Blue
  Mask Flags: PER_DATASET ALPHA
Band 4 Block=611x3 Type=Byte, ColorInterp=Alpha

La secuencia de comandos que ejecuto son...

Georreferenciar las imágenes PNG OSGB...

gdal_translate -a_srs EPSG:27700 
-gcp 0 400 241538.5 119812 
-gcp 600 0 244713.5 121928.66666667 
-gcp 0 0 241538.5 121928.66666667 
-gcp 600 400 244713.5 11981
bucklands1.png bucklands1.tiff

Transformación en proyección de googleMaps (EPSG:900913) ...

gdalwarp -s_srs EPSG:27700 -t_srs EPSG:900913 -of GTiff
bucklands1.tiff bucklands1_warped.tiff

Mosaico (hacer en googleMap 256x256 azulejos) ...

gdal2tiles bucklands1_warped.tiff gmTiles

Funciona si paso por alto la etapa de gdalwarp y hago los azulejos de google directamente a partir de las imágenes OSGB36. Pero la calidad de la imagen es pobre ya que la interpolación no es muy buena.

3voto

Kris Puntos 5515

Resulta que si se sustituye EPSG:900913 por EPSG:3857 o EPSG:3785 en el warping de gdal se consiguen alinear correctamente las baldosas de google-map. Aparentemente estos códigos son alternativas para el EPSG:900913 no oficial de googleMaps. Aunque parece que hay mucha confusión sobre cuál es el código correcto - por ejemplo, MapTiler no reconoce EPSG:3857.

De todos modos esto funciona...

gdalwarp -s_srs EPSG:27700 -t_srs EPSG:3857 -of GTiff
bucklands1.tiff bucklands1_warped.tiff

2voto

Adam Ernst Puntos 6939

GDAL no está de acuerdo contigo en que el mapa está en OSGB (EPSG:27700), sino que cree que está en EPSG:900913, así que no sé qué hará una reproyección y mosaico al mismo proyecto.

En caso de duda, utilice -a_srs para especificar la proyección correcta a gdal.

0 votos

He añadido la secuencia de comandos que ejecuto a la pregunta por si eso ayuda a detectar lo que estoy haciendo mal.

0 votos

El mapa no es OSGB sino EPSG:900913. El mapa original era OSGB36, luego lo convertí en EPSG:900913 de googlemaps. El enlace del mapa y el volcado gdalinfo son para el mapa deformado en EPSG:900913.

0 votos

No creo que el sistema de coordenadas de salida, "Google Maps Global Mercator" sea correcto. Tal y como está, yo asumiría que la matemática elipsoidal se utilizó al convertir a Mercator. Google Maps utiliza la matemática esférica, por lo que, o bien se necesita utilizar una implementación de Mercator que soporte sólo las ecuaciones basadas en la esfera (o que tenga un parámetro de proyección que active las ecuaciones correctas), o bien el sistema de coordenadas geográficas debe estar basado en una esfera de R = 6378137,0 m. Las diferentes ecuaciones causarán un desplazamiento norte-sur.

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