IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques & Frameworks Discussion :

Afficher des tuiles TMS [LeafLet]


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre averti
    Homme Profil pro
    Geek débile créatif
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tuvalu

    Informations professionnelles :
    Activité : Geek débile créatif

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Par défaut Afficher des tuiles TMS
    Bonjour à tous,


    J'utilise Leaflet pour afficher une carte tuilée, et malheureusement les tuiles sont inversées entre le haut et le bas. Or il existe une option de L.tileLayer qui permet de les remettre à l'endroit : "tms : true". Que je mette true ou false, le résultat est le même, les tuiles sont toujours inversées...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    	var mymap = L.map('mapid', {
    		crs: L.CRS.Simple,
    		minZoom: 0,
    		closePopupOnClick: false //évite que les popups se ferment dès qu'on clique sur la carte
    		}
    	).setView(xy(0,0), -1);
     
            L.tileLayer('MapBR0-5/{z}/{x}/{y}.png', {
    		maxZoom: 5,
    		tms : true,
    		crossOrigin : true,
    		zoomReverse : false
    		}
    	).addTo(mymap);
    (je précise que l'option "crossOrigin" ne change rien non plus, mais que zoomReverse marche très bien)

    Aurais-je une erreur dans mon script ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    Bonjour,
    quelle version de leaflet est utilisée ?

    Pour la version 1.0 il faut indiquer {z}/{x}/{-y}

  3. #3
    Membre averti
    Homme Profil pro
    Geek débile créatif
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tuvalu

    Informations professionnelles :
    Activité : Geek débile créatif

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Par défaut
    Bonjour,


    La version est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        <link rel="stylesheet" href="leaflet/v1.0.3-dist/leaflet.css" />
        <script src="leaflet/v1.0.3-dist/leaflet.js"></script>
    Et le {-y} ne fonctionne pas : la carte ne s'affiche plus du tout...

    Dans la doc Leaflet ils disent :

    This reference reflects Leaflet 1.0.3.

    tms Boolean false If true, inverses Y axis numbering for tiles (turn this on for TMS services).
    Du coup, là, je ne vois pas ce qui cloche... Il n'y a pas d'erreur de syntaxe dans le code ? Ou y aurait-il un autre endroit ou une autre manière de dire que c'est le protocole TMS ?


  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 212
    Par défaut
    As tu essayé avec une version 0.7.x de leaflet pour vérifier que cela vient bien du code ?

  5. #5
    Membre averti
    Homme Profil pro
    Geek débile créatif
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tuvalu

    Informations professionnelles :
    Activité : Geek débile créatif

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Par défaut [LEAFLET] Tuiles TMS inversées en {y}

    Je n'ai pas essayé mais j'ai trouvé le problème, et il paraît insoluble...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	var mymap = L.map('mapid', {
    		crs: L.CRS.Simple,
    Ce que j'affiche n'est pas une carte géographique mais un schéma plan, donc sans projection, d'où le crs: L.CRS.Simple. Or ce mode de représentation n'est pas compatible avec l'option tms. J'ai fait l'essai en enlevant L.CRS.Simple et là ça marche, le tms:true inverse bien les tuiles. Par contre l'inconvénient est que mon schéma est "wrappé" et a pour coordonnées limites (-180,-90) et (+180,+90), ce qui ne convient pas à l'application que je veux en faire.

    Conclusion, j'ai apparemment 3 possibilités :
    1) Modifier leaflet.js pour adapter la fonctionnalité tms quelle que soit la projection,
    2) Produire des tuiles inversées pour qu'elles soient directement dans le "bon sens",
    3) Faire un script Perl ou un bricolage sous "cmd" -> Excel -> csv -> fichier .bat pour renommer mes fichiers.

    Je n'ai pas le niveau en javascript pour (1), gdal2tiles n'a pas l'air de permettre (2) et je ne connais pas d'autre outil de tuilage, donc à moins qu'il ne te vienne une idée géniale ce sera probablement la 3ème solution !

    Merci quand même pour ton aide, et je m'empresse de cliquer sur "résolu", car la maréchaussée ne plaisante pas sur le sujet !

  6. #6
    Membre averti
    Homme Profil pro
    Geek débile créatif
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tuvalu

    Informations professionnelles :
    Activité : Geek débile créatif

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Par défaut
    Et pour une raison que j'ignore, je ne parviens pas à modifier le premier message, j'aurais voulu mettre un titre plus explicite : "[LEAFLET] Tuiles TMS inversées en {y}"

  7. #7
    Membre averti
    Homme Profil pro
    Geek débile créatif
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tuvalu

    Informations professionnelles :
    Activité : Geek débile créatif

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Par défaut

    Au cas où cela pourrait servir à d'autres, voici le script Perl que j'ai fait pour inverser les tuiles en {y} dans l'arborescence d'origine :

    Code perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    #!/usr2/public/local/bin/perl
     
    use strict;
    #use warnings;
    use File::Copy;
     
    sub droite {
    	my($chaine) = $_[0];
    	my($longeur) = $_[1];
     
    	return (substr($chaine,length($chaine)-$longeur,$longeur));
    };
     
    sub reste {
    	my($chaine) = $_[0];
    	my($indice) = $_[1];
     
    	return (substr($chaine,$indice,length($chaine)-$indice));
    };
     
    #
    # Tile-reverse.pl -- Inverse en {y} les tuiles d'une arborescence
    #
     
    sub parcours {
     
    	my($dir) = @_;
    	my($ligne);
    	my(@catalog);
    	my(@temp_cat);
    	my($source);
    	my($dest);
     
    	mkdir $ARGV[0].'-y'.reste($dir, length($ARGV[0]));
    	chdir("$dir\\") || die "R‚pertoire non trouv‚ !";
     
    	opendir(DIR, $dir);
    		@catalog = readdir(DIR);
    	closedir(DIR);
     
    	foreach $ligne (@catalog) {
     
    	chdir("$dir\\") || die "R‚pertoire non trouv‚ !";
     
    		if ($ligne ne '.' and $ligne ne '..') {
     
    			if (chdir($ligne) == 1) {
     
    				&parcours("$dir\\$ligne");
    			}
    			else {
    				my $ext = droite($ligne, 4);
    				my $numname = substr($ligne, 0, length($ligne)-4);
     
    				if ($ext eq '.png') {
    					push (@temp_cat, $numname);
     
    				}					
    				else {
    					print "Orphelin : $dir\\$ligne\n";
    					print $ARGV[0].'-y'.reste("$dir\\$ligne", length($ARGV[0]))."\n\n";
     
    					copy ($dir."\\".$ligne, $ARGV[0].'-y'.reste("$dir\\$ligne", length($ARGV[0]))) || die "Erreur de copie des orphelins";			
    				};
    			};
    		};
    	};
     
    		@temp_cat = sort {$a <=> $b} @temp_cat;
     
    	for my $i (0..$#temp_cat) {
     
    		$source = pop (@temp_cat);
    		$dest = $ARGV[0].'-y'.reste("$dir\\$i.png", length($ARGV[0]));
    		print "$dir\\$source.png\n";
    		print "$dest\n\n";
     
    		copy ($dir."\\".$source.".png", $dest) || die "Erreur de copie des png";			
    	};	
    };
     
    #
    # -- Début
    #
     
    if ($ARGV[0] eq '/?' or $ARGV[0] eq '') {
     
    	print "\n\nTile_reverse.pl -- Inverse en {y} les tuiles d'une arborescence de fichiers png\n";
    	print "\nCopie les fichiers dans une nouvelle arborescence nomm‚e ...\\R‚pertoire-y\\\n";
    	print "Les fichiers autres que png sont recopi‚s tels quels.\n";
    	print "\nNe pas mettre de \"\\\" lors de l'appel : faire \"Tile_reverse.pl C:\\R‚pertoire\"\n";
    }
    else {
     
    	print "\nTile_reverse.pl en cours d'‚x‚cution...\n\n";
    	print "Parcours … partir de la racine $ARGV[0]\n\n";
     
    	&parcours($ARGV[0]);
     
    	print "\nTile_reverse.pl termin‚.\n\n";
    };

    Bon, soyons clairs : il y a plus de 10 ans que je n'ai pas fait de Perl alors c'est brut de fonderie, pas optimisé pour deux sous (il y a probablement plein de modules qui diviseraient mon code par 10), et pour les options et la gestion des exceptions, ce sera pour une autre fois. Mais ça a le mérite de marcher, ça peut donc servir.

    Fonctionnement pour inverser, par exemple, l'arborescence de tuiles située dans C:\carte

    Faire perl tile_reverse.pl C:\carte

    Le script :
    - créé un répertoire C:\carte-y.
    - parcourt toute l'arborescence, et à chaque sous-répertoire trouvé, créé l'identique sous C:\carte-y
    - copie tous les fichiers nommés 0.png, 1.png... n.png sous C:\carte-y, après avoir inversé les numéros
    - copie tous les fichiers "orphelins" (ceux qui ne sont pas .png) sous C:\carte-y sans changer leurs noms

    Si votre arborescence contient un autre type d'image (.jpg par exemple), faites un rechercher / remplacer dans le script ou améliorez-le !
    Si votre arborescence est importante en nombre de fichiers, vous pouvez l'accélérer en enlevant les "print" des lignes 60-61-75-76.

    Enfin n'hésitez pas à le modifier à votre sauce.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Débuter avec openGL, problem pour afficher des primitives
    Par kosa_nostra dans le forum OpenGL
    Réponses: 1
    Dernier message: 06/11/2011, 20h40
  2. J'ai des petits soucis avec :(
    Par Diabless6 dans le forum WebExpert
    Réponses: 1
    Dernier message: 05/08/2007, 19h35
  3. Petits soucis avec des vecteurs
    Par Superzobi dans le forum SL & STL
    Réponses: 3
    Dernier message: 03/05/2007, 09h04
  4. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo