1 votos

ayuda con TMS (gdal2tiles) Openlayers 3 y proyección personalizada

Trabajo con una proyección local italiana (EPSG:3003 Monte Mario Italia zona 1) y había cargado esta proyección en mi proyecto para que evitate reproyectara todos mis datos.

Había creado la pirámide de azulejos con la última versión de gdal2tiles (la versión enviada con la última versión de maptiler open source [ver [http://trac.osgeo.org/gdal/ticket/2052\]](http://trac.osgeo.org/gdal/ticket/2052]) para poder generar fichas jpeg en lugar de fichas png)

mi problema es que no consigo asignar la extensión correcta a mi página. Si asigno a la montemarioProjection la extensión para Italia, también esta extensión se aplica a mi mapa, pero mi mapa contiene sólo el municipio de módena. Mi extensión de tms de modena, calculada por gdal2tiles, parece ser ignorada.

cuando intento hacer un paneo a un determinado punto de coordenadas en el sistema de coordenadas de monte mario, el mapa va en un lugar equivocado, porque no está bien posicionado.

algunos ejemplos: (AQUÍ HABÍA ASIGNADO A MONTE MARIO SÓLO LA EXTENSIÓN DE MÓDENA COMO EXTENSIÓN, NO ITALIA)

EJEMPLO 1 http://mappe-t.comune.modena.it/ortofoto/2014/ol3_ortofoto.html

(AQUÍ LE HABÍA ASIGNADO A MONTE MARIO SU EXTENSIÓN REAL Y TRATABA DE FORZAR EL ORIGEN DEL MAPA, PERO FUE IGNORADO. TENGO QUE QUITAR el parámetro extent de ol.layer.tile y ol.view)

EJEMPLO 2 http://mappe-t.comune.modena.it/ortofoto/2014/ol3_ortofoto2.html

ver líneas 111-115

origin:  tileGrid: new ol.tilegrid.TileGrid({
                //tileGrid: new ol.tilegrid.XYZ({
                    origin: tms_origin,
                    resolutions: tms_resolutions
                }),

SI SE MIRA EL CONTROL DE LA POSICIÓN DEL RATÓN, LAS COORDENADAS ESTÁN MAL EN EL EJEMPLO 1 Y 2

AQUÍ ESTÁ TODO MI CÓDIGO DEL EJEMPLO 2 (SIN PARTES COMENTADAS)

    var tms_extent = [ 1640349.34499999997206, 4935769.97499999962747, 1659997.04499999992549, 4956992.87500000000000 ];
    var tms_origin = [1640349.34499999997206, 4935769.97499999962747];

    var tms_resolutions = [ 
                        12.79999999999997, 6.39999999999999, 3.19999999999999, 1.60000000000000,
                        0.80000000000000, 0.40000000000000, 0.20000000000000, 0.10000000000000
            ];

    var city_center = [ 1652769.73, 4945475.55 ];

    var monteMarioSystemCode = 'EPSG:3003';
    var projectionMonteMario = ol.proj.get(monteMarioSystemCode);
    var extent_italia_monte_mario = [1290679.24, 4194066.17, 2226886.34, 5259894.49];
    projectionMonteMario.setExtent(extent_italia_monte_mario);

    var map = new ol.Map({

        controls: ol.control.defaults({ attribution: false }).extend(
                [ new ol.control.ZoomSlider(), 
                  new ol.control.ScaleLine(),
                  new ol.control.MousePosition({
                      coordinateFormat: ol.coordinate.createStringXY(4),
                      projection: monteMarioSystemCode,
                      undefinedHTML: ' '
                    })
                 ]),

        layers : [ new ol.layer.Tile({

            source : new ol.source.XYZ({
                crossOrigin     : null,

                //experimental parameter
                projection      : monteMarioSystemCode,

                //experimental parameter (necessary because gdal2tiles generate tiles in TMS mode not in XYZ mode)
                tileUrlFunction : function(coordinate) {
                    if (coordinate == null) {
                        return "";
                    }
                    // type of ol.TileCoord is recently changed to an array of three numbers: [z, x, y]
                    var z = coordinate[0];
                    var x = coordinate[1];
                    var y = (1 << z) - coordinate[2] - 1;
                    return 'http://mappe-t.comune.modena.it/ortofoto/2014/tms2014/' + z + '/' + x + '/' + y + '.jpg';
                },
                //this works only for tiles generated in XYZ format, es maptiler pro
                //url       : 'http://mappe-t.comune.modena.it/ortofoto/2014/tms2014/{z}/{x}/{y}.jpg'

                //experimental parameter (inherited from ol.source.TileImage)

                tileGrid: new ol.tilegrid.TileGrid({
                    origin: tms_origin,
                    resolutions: tms_resolutions
                }),

            })
        }) ],
        renderer : 'canvas',
        target : 'map',
        view : new ol.View({
            projection      : monteMarioSystemCode,
            center          : city_center,
            maxZoom         : 10,
            minZoom         : 3,
            zoom            : 3
        })
    });

TMS TILE MAP RESOURCE http://mappe-t.comune.modena.it/ortofoto/2014/tms2014/tilemapresource.xml

2voto

Prabhpreet Puntos 33

He encontrado una solución que funciona basada en la versión 3.7 de openlayers

Este es un ejemplo de trabajo:

http://mappe-t.comune.modena.it/prove/demo_ol3/tms_ol3_with_popup.html

básicamente es necesario crear una fuente TileImage personalizada

este es mi código

/*
    CONFIGURATION PARAMETERS DESUMED FROM gdal2tiles generated file
    http://mappe.comune.modena.it/ortofoto/2014/tilemapresource.xml
    */

    var tms_resolutions_2014 = [ 102.39999999999979, 51.19999999999990, 25.59999999999995, 12.79999999999997,
                              6.39999999999999, 3.19999999999999, 1.60000000000000, 0.80000000000000,
                              0.40000000000000, 0.20000000000000, 0.10000000000000 ];

    var extent_ortofoto_2014 = [1640349.34499999997206, 4935769.97499999962747, 1659997.04499999992549, 4956992.87500000000000];

    /* CONFIGURATION PARAMETERS DESUMED FROM http://epsg.io/3003 */
    var coordSystemCode = 'EPSG:3003';
    var projectionMonteMario = ol.proj.get(coordSystemCode);
    //var extent_italy_monte_mario    = [1290679.24, 4194066.17, 2226886.34, 5259894.49];
    var extent_italy_monte_mario    = [1290650.93, 4192956.42, 2226749.10, 5261004.57];
    projectionMonteMario.setExtent(extent_italy_monte_mario);

    //TMS LAYER. IS CONFIGURED AS A CUSTOM TileImage source

    var tmsModena = new ol.layer.Tile({

        preload: 1,
        source: new ol.source.TileImage({
            crossOrigin: null,
            extent: extent_ortofoto_2014,
            projection: projectionMonteMario,
            tileGrid: new ol.tilegrid.TileGrid({
                extent: extent_ortofoto_2014,
                origin: [extent_ortofoto_2014[0], extent_ortofoto_2014[1]],
                resolutions: tms_resolutions_2014

            }),
            tileUrlFunction: function(coordinate) {

                if (coordinate === null) return undefined;

                // TMS Style URL
                var z = coordinate[0];
                var x = coordinate[1];
                var y = coordinate[2];
                var url = 'http://mappe.comune.modena.it/ortofoto/2014/'+z+'/'+ x +'/'+y +'.jpg';
                return url;
            }
        })
    });

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