Suite

Aide avec TMS (gdal2tiles) Openlayers 3 et projection personnalisée

Aide avec TMS (gdal2tiles) Openlayers 3 et projection personnalisée


Je travaille avec une projection italienne locale (EPSG:3003 Monte Mario Italy zone 1) et j'avais chargé cette projection dans mon projet pour eviter afin de reprojeter toutes mes données.

J'avais créé la pyramide de tuiles avec la dernière version de gdal2tiles (la version livrée avec la dernière version de maptiler open source [voir http://trac.osgeo.org/gdal/ticket/2052] pour pouvoir générer des tuiles jpeg à la place de tuiles png)

mon problème est que je n'arrive pas à attribuer l'étendue correcte à ma page. Si j'affecte au montemarioProjection l'étendue pour l'italie, cette étendue est également appliquée à ma carte, mais ma carte ne contient que la commune de modène. Mon étendue de tms de modène, calculée par gdal2tiles, semble être ignorée.

lorsque j'essaie de faire un panoramique vers un certain point de coordonnées dans le système de coordonnées monte mario, la carte se trouve au mauvais endroit, car elle n'est pas bien positionnée.

quelques exemples : (ICI J'AI AFFECTÉ À MONTE MARIO UNIQUEMENT LA MESURE DE MODÈNE COMME ÉTENDUE, PAS L'ITALIE)

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

(ICI, J'AI ATTRIBUÉ À MONTE MARIO SA RÉELLE ÉTENDUE ET ESSAYÉ DE FORCER L'ORIGINE DE LA CARTE, MAIS ELLE A ÉTÉ IGNORÉE. JE DOIS SUPPRIMER le paramètre d'étendue de ol.layer.tile et ol.view)

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

voir lignes 111-115

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

SI VOUS REGARDEZ LE CONTRLE DE LA POSITION DE LA SOURIS, LES COORDONNÉES SONT FAUX DANS LES EXEMPLES 1 ET 2

VOICI TOUT MON CODE DE L'EXEMPLE 2 (SANS LES PARTIES COMMENTÉES)

var tms_extent = [ 1640349.34499999997206, 4935769.9749999999962747, 1659997.04499999992549, 4956992.875000000000000 ]; var tms_origin = [1640349.34499999997206, 4935769.9749999999962747] ; var tms_resolutions = [ 12.799999999999997, 6.39999999999999999, 3.19999999999999, 1.6000000000000000, 0.8000000000000000, 0.4000000000000, 0.200000000000000, 0.100000000000000 ] ; var city_center = [ 1652769.73, 4945475.55 ]; var monteMarioSystemCode = 'EPSG:3003'; var projectionMonteMario = ol.proj.get(monteMarioSystemCode); var extend_italia_monte_mario = [1290679.24, 4194066.17, 2226886.34, 5259894.49]; projectionMonteMario.setExtent(extent_italia_monte_mario); var map = new ol.Map({ contrôles: 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 : ' ' }) ]), calques : [ new ol.layer.Tile({ source : new ol.source.XYZ({ crossOrigin : null, //projection de paramètre expérimental : monteMarioSystemCode, //paramètre expérimental (nécessaire car gdal2tiles génère des tuiles en mode TMS et non en mode XYZ) tileUrlFunction : function(coordinate) { if (coordinate == null) { return ""; } // le type de ol.TileCoord a récemment été remplacé par un tableau de trois nombres : [z, x, y] var z = coordonné[0] ; var x = coordonné[1] ; var y = (1 << z) - coordonné[ 2] - 1 ; retour 'http://mappe-t.comune.modena.it/ortofoto/2014/tms2014/' + z + '/' + x + '/' + y + '.jpg">http : //mappe-t.comune.modena.it/ortofoto/2014/tms2014/tilemapresource.xml


J'ai trouvé une solution de travail basée sur la version 3.7 d'openlayers

Voici un exemple de travail :

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

est essentiellement nécessaire pour créer une source TileImage personnalisée

c'est mon code

/* PARAMÈTRES DE CONFIGURATION DÉSUMÉS À PARTIR du fichier généré par gdal2tiles http://mappe.comune.modena.it/ortofoto/2014/tilemapresource.xml */ var tms_resolutions_2014 = [ 102.399999999999979, 51.19999999999999990, 25.599999 1.99999999999, 12.7999999000999999, 6.399990000 0,4000000000000, 0,2000000000000, 0,1000000000000000] ; var extend_ortofoto_2014 = [1640349.34499999997206, 4935769.97499999962747, 1659997.044999999992549, 4956992.875000000000000]; /* PARAMÈTRES DE CONFIGURATION DÉSUMÉS DE http://epsg.io/3003 */ var coordSystemCode = 'EPSG:3003'; var projectionMonteMario = ol.proj.get(coordSystemCode); //var extend_italy_monte_mario = [1290679.24, 4194066.17, 2226886.34, 5259894.49]; var extend_italy_monte_mario = [1290650.93, 4192956.42, 2226749.10, 5261004.57]; projectionMonteMario.setExtent(extent_italy_monte_mario); //COUCHE TMS. EST CONFIGURÉ COMME UN TileImage PERSONNALISÉ 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, origine : [extent_ortofoto_2014[0], extent_ortofoto_2014[1]], résolutions : tms_resolutions_2014 }), tileUrlFunction : function(coordinate) { if (coordinate === null) return undefined ; // Style TMS URL var z = coordonnée[0] ; var x = coordonnée[1] ; var y = coordonnée[2] ; var url = 'http://mappe.comune.modena.it/ortofoto/2014/'+z+'/ '+ x +'/'+y +'.jpg">PartagerAméliorer cette réponserépondu 23 juillet 15 à 14:59Gian Marco ArtioliGian Marco Artioli1511 insigne en argent8 insignes de bronze
							

Voir la vidéo: OpenLayers Introduction for Beginners