Bílý vrch
icon TrekBuddy
www.trekbuddy.net
Outdoor companion.
  • internal / bluetooth / simulator GPS
  • offline raster maps
  • smart GPX / raw NMEA logs
  • waypoints and simple navigation
  • custom views
  • MIDP and Symbian phones
  • Blackberry
  • Android
Visit wiki to see all features, guides and howtos. Project tracker.
Trekbuddy is on Github now

Partners:    (Polish/Polski)(Polski) Compass mapy      (Polish/Polski)(Polski) Galileos mapy      (Polish/Polski)(Polski) CartoMedia      (Czech/Èesky)(Èesky) Eaglesoft trasy      (Polish/Polski)(Polski) ExpressMap     

 FAQFAQ   SearchSearch   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 
ViaMichelin ancienne version

 
Post new topic   Reply to topic    TrekBuddy Forum Index -> Français
View previous topic :: View next topic  
Author Message
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Sun Feb 11, 2018 1:26 pm    Post subject: ViaMichelin ancienne version Reply with quote

Bonjour
Suite à la simplification des cartes ViaMichelin, beaucoup de détails sont passés à la trappe. Depuis Mobac 2 je n'arrive qu'à voir les nouvelles versions (selon les trois formats dispos) mais impossible de créer un bsh ou un xml pour retrouver les anciennes versions des cartes toujours dispos pourtant en zoom 10,11 et 12 en cliquant sur le bouton 'retrouver la carte michelin' et qui ouvre une nouvelle fenêtre comme celle ci par exemple:
[url]
https://www.viamichelin.fr/static/1.218.0/html/michelinmap.html?lat=46.23970213627493&lon=3.240280151367188&zoom=10&headerLabel=Cartes%20%26%20Itin%C3%A9raires&apiJsConfigUrl=%2Fapijs%2F1.44.0%2Fapi%2Fjs%3Fkey%3DJSBS20110216111214120400892678%24166489%26lang%3Dfra%26protocol%3Dhttps%26loadModule%3DViaMichelin.Api.Custom.Core
[/url]

Si un gourou de MoBAC avait une solution ça serait super top.
Merci à lui et aussi à ce forum bien utile.
Cordialement
François
Back to top
View user's profile Send private message Visit poster's website
LaurentG



Joined: 13 Oct 2016
Posts: 34

PostPosted: Sun Feb 18, 2018 7:05 pm    Post subject: Reply with quote

Je confirme : on serait au moins deux Laughing à être intéressés
Back to top
View user's profile Send private message
qilex



Joined: 04 Jun 2018
Posts: 1

PostPosted: Mon Jun 04, 2018 5:33 pm    Post subject: ViaMichelin ancienne version Reply with quote

Bonjour,

Comme début de solution, je propose:
String Server = "http://m"+(new Random().nextInt(3)+10)+".viamichelin.com/map/mapdirect?";

Aucune idée pour la suite...

Pour info :
Trois serveurs sont interrogés:
https://m1{i}.viamichelin.com ; i = 0,1,2

Referer: https://www.viamichelin.fr/static/1.237.0/html/michelinmap.html?lat=46.988684045239104&lon=1.5428924560546877&zoom=10&headerLabel=Cartes%20%26%20Itin%C3%A9raires&apiJsConfigUrl=%2Fapijs%2F1.56.0%2Fapi%2Fjs%3Fkey%3DJSBS20110216111214120400892678%24166489%26lang%3Dfra%26protocol%3Dhttps%26loadModule%3DViaMichelin.Api.Custom.Core

Avec comme guide l'exemple suivant :

Code:
static import java.lang.Math.*;

name = "ViaMichelin";

tileType = "png";
tileSize = 256;
minZoom = 1;
maxZoom = 19;

String getTileUrl( int zoom, int x, int y ) {
    String Server = "http://map"+(new Random().nextInt(3)+1)+".viamichelin.com/map/mapdirect?";
    String Map = "viamichelin";
    String Version = "201804131440";
    return Server + "map=" + Map + "&z=" + zoom + "&x=" + x + "&y=" + y + "&version=" + Version + "&format=png&layer=background&locale=default&debug_pattern=.*";
}
Back to top
View user's profile Send private message
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Mon Jun 24, 2019 7:19 pm    Post subject: La solution Michelin Reply with quote

Le Gourou a bien bosser 10 jours, voila le bsh tant attendu
Code:

// Nom de la carte affiché dans MOBAC
   name = "France, cartes papiers Michelin (Rev.081)-Z(10,11,12)-2019";
   
// Nom du serveur
   String MyServer = ".viamichelin.com";
   String MyServer_2 = "map.viamichelin.com";
   
// Key au format "/blabla"
   String MyKey = "";      
   
// MyUserAgent correspond à celui créé notemment avec la clé IGN
// Par défaut, on trouve souvent MyUserAgent = "Mozilla/5.0 Gecko/20100101 Firefox/49.0";
   String MyUserAgent = "Mozilla/5.0 Gecko/20100101 Firefox/49.0";

// MyReferer peut être demandé
   String MyReferer = "";

// MyFolder au format "/blabla"
   String MyFolder = "/mapsgene/dm/mapdirect";
   String MyFolder_2 = "/map/mapsgene/dm/mapdirect";

tileType = "png";   // Type d’image fourni par le serveur (png, jpg or gif)
tileSize = 256;      // Facultatif : Supprimer la ligne dans le doute
minZoom = 2;      // Facultatif : Zoom minimal souhaité (et/ou fourni par le serveur)
maxZoom = 19;      // Facultatif : Zoom maximal souhaité (et/ou fourni par le serveur) -> Maximum 22 pour Mobac

// Gestion des passages de zooms pour recentrer la carte
Zoom10=0;
Zoom11=0;
Zoom12=0;
CorrectionX=0;
CorrectionY=0;

String getTileUrl(int Zoom, int X, int Y) {
// Autres paramètres spécifiques GetTile
//      TileMatrix = Zoom : Le nom de la matrice qui contient la tuile
//      TileCol = X : Le numéro de colonne du coin supérieur gauche de la tuile
//      TileRow = Y : Le numéro de ligne du coin supérieur gauche de la tuile
   if (Zoom < 7) {
      Zoom10=0;
      Zoom11=0;
      Zoom12=0;
      // gestion Zoom < 7, on prend une carte générique Google pour voir le monde entier
      return "http://mt0.google.com/vt/lyrs=m@176103410&hl=fr&s=Galileo&scale=1&z=" + Zoom + "&x=" + X + "&y=" + Y;
   }else if (Zoom < 10){
      Zoom10=0;
      Zoom11=0;
      Zoom12=0;
      // url = ""
      return "https://" + MyServer_2 + MyFolder_2 + ";" + urlstring(Zoom,X+1,Y+1);
   }else if (Zoom < 11){
      Num_Server = (X % 3) + 10;   // 10 11 12
      Zoom11=0;
      Zoom12=0;
      if (Zoom10==0) {
         //             X(A,B)->X, A1,A2,B1,B2
         //                  Brest <-> Strasbourg
         CorrectionX = EchelleXY(X,499,16,534,37);
         //               Dunkerque <-> Perpignan
         CorrectionY = EchelleXY(Y,343,34,377,55);
         Zoom10=1;
      }   
      return "http://m" + Num_Server + MyServer + MyFolder + ";" + urlstring(Zoom,X-CorrectionX,Y-CorrectionY);
   }else if (Zoom < 12){
      Num_Server = (X % 3) + 10;   // 10 11 12
      Zoom10=0;
      Zoom12=0;
      // pour geneve correction X-993,Y-687      
      if (Zoom11==0) {
         //             X(A,B)->X, A1,A2,B1,B2
         //                  Brest <-> Strasbourg
         CorrectionX = EchelleXY(X,998,14,1067,73);
         //               Dunkerque <-> Perpignan
         CorrectionY = EchelleXY(Y,685,5,754,65);
         Zoom11=1;
      }      
      return "http://m" + Num_Server + MyServer + MyFolder + ";" + urlstring(Zoom,X-CorrectionX,Y-CorrectionY);
   }else if (Zoom < 13){
      Num_Server = (X % 3) + 10;   // 10 11 12
      Zoom10=0;
      Zoom11=0;
      // pour geneve correction X-2017,Y-1386   
      if (Zoom12==0) {
         //             X(A,B)->X, A1,A2,B1,B2
         //                  Brest <-> Strasbourg
         CorrectionX = EchelleXY(X,1996,11,2136,112);
         //               Dunkerque <-> Perpignan
         CorrectionY = EchelleXY(Y,1370,8,1509,112);
         Zoom12=1;
      }      
      return "http://m" + Num_Server + MyServer + MyFolder + ";" + urlstring(Zoom,X-CorrectionX,Y-CorrectionY);
   }else{
      // url = ""
      return "https://" + MyServer_2 + MyFolder_2 + ";" + urlstring(Zoom,X+1,Y+1);
   }
}

void addHeaders(java.net.HttpURLConnection conn) {
   conn.addRequestProperty("Referer",MyReferer);
   conn.addRequestProperty("User-Agent",MyUserAgent);   
}

//
// Fonction EchelleXY
//
   static import java.lang.Math.*;
int EchelleXY(int XY,int a1,int a2,int b1,int b2){
   // *0.00001/100000 -> pour convertir avec 5 chiffres significatifs, sinon 0.0
   float A = ((b2 - a2)*0.00001/(b1-a1))*100000;
   float B = a2 - A * a1;
   int corXY = round(A * XY + B);
   //   javax.swing.JOptionPane.showMessageDialog(null,"XY" +XY+ "#" + (XY-corXY));
   return (XY-corXY);
}

//
// Fonction projecion de ViaMichelin
//      

   import java.util.Base64;

String urlstring(int zm,int My_col,int My_row) {
   int[] tile;
   int new_zoom=zm;
   String zs;
   switch (new_zoom) {
         case 1   : zs="viamichelin.background@z1"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MQ==
         case 2   : zs="viamichelin.background@z2"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Mg==
         case 3   : zs="viamichelin.background@z3"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Mw==
         case 4   : zs="viamichelin.background@z4"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6NA==
         case 5   : zs="viamichelin.background@z5"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6NQ==
         case 6   : zs="viamichelin.background@z6"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Ng==
         case 7   : zs="viamichelin.background@z7"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Nw==
         case 8   : zs="viamichelin.background@z8"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6OA==
         case 9   : zs="viamichelin.background@z9"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6OQ==
         case 10  : zs="eur_c_1000k_r05"            ; break;   //ZXVyX2NfMTAwMGtfcjA1
         case 11  : zs="fra_c_0275k_r81"            ; break;   //ZnJhX2NfMDI3NWtfcjgx
         case 12  : zs="fra_c_0185k_r81"            ; break;   //ZnJhX2NfMDE4NWtfcjgx
         case 13  : zs="viamichelin.background@z13"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTM=
         case 14  : zs="viamichelin.background@z14"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTQ=
         case 15  : zs="viamichelin.background@z15"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTU=
         case 16  : zs="viamichelin.background@z16"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTY=
         case 17  : zs="viamichelin.background@z17"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTc=
         case 18  : zs="viamichelin.background@z18"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTg=
         case 19  : zs="viamichelin.background@z19"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTk=
      }
   tile = cr2tile(My_col,My_row);
   int tileA = tile[0];
   int tileB = tile[1];
   switch (new_zoom) {
      case 10:
      
         String tilestring = tiles2string(String.valueOf(tileA),String.valueOf(tileB));
         //javax.swing.JOptionPane.showMessageDialog(null,tilestring);
         break;
      case 11:
         String tilestring = tiles2string(String.valueOf(tileA),String.valueOf(tileB));
         break;
      case 12:
         String tilestring = tiles2string(String.valueOf(tileA),String.valueOf(tileB));
         break;
      default:
         String tilestring = tiles2string(String.valueOf(tileA),String.valueOf(tileB));
         break;
      }

   // Encode Base64
      String mapb64string  = Base64.getEncoder().encodeToString(zs.getBytes("utf-8"));
      String tileb64string = Base64.getEncoder().encodeToString(tilestring.getBytes("utf-8"));
      
   return mapb64string + ";"+ tileb64string;
}

int[] cr2tile(int My_col,int My_row) {
//      original cell:
//      A:B
//      child cells:
//      2B:2A      2B+1:2A
//      2B:2A+1    2B+1:2A+1

   int[] tile2 = new int[2];
   int A;
   int B;

   if ((My_col==1)&&(My_row==1)) {
      A = 0;
      B = 0;
   }
   else {
      // transformation en decimal -> (double)
      Double col0=(Double)My_col;
      Double row0=(Double)My_row;
      int col2 = round(col0/2);
      int row2 = round(row0/2);
      tile2 = cr2tile(col2,row2);
      int tile2A = tile2[0];
      int tile2B = tile2[1];
      A = tile2B * 2 + ((My_col-1) % 2);
      B = tile2A * 2 + ((My_row-1) % 2);
      // note that the A/B switch above is intentional
   }
   return new int[] {A,B};
}

String tiles2string(String a,String b) {
   String ps="";
   String qs="";
   int p=a.length();
   int q=b.length();
   for(i=0;i<(10-p);p++)
      ps=ps+"0";
   for(i=0;i<(10-q);q++)
      qs=qs+"0";
   return ps + a + qs + b;
}

   
//
// FIN ViaMichelin
//


Mister Pouard[/tube]
Back to top
View user's profile Send private message Visit poster's website
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Thu Jun 27, 2019 10:18 am    Post subject: Reply with quote

Youhou respect! Cool

Par contre, il y a encore des décalages au niveau de l'emplacement des dalles... Je vais voir si j'y comprends quelque chose.
Back to top
View user's profile Send private message Visit poster's website
LaurentG



Joined: 13 Oct 2016
Posts: 34

PostPosted: Thu Jun 27, 2019 12:01 pm    Post subject: Reply with quote

C'est un bon début.... mais ce n'est effectivement qu'un début Sad

Les niveaux 10, 11 et 12 retournent bien les bonnes cartes (les "bonnes vieilles cartes Michelin"), mais hélas, je confirme, avec un gros décalage des dalles...

Il semble que cela vienne de la fonction EchelleXY, ou des paramètres qui lui sont passés, mais j'avoue ne pas comprendre ce qu'il y a derrière ces paramètres.

J'espère que l'auteur de ce .bsh va savoir corriger, car ce serait encore plus frustrant d'être près du but et de ne pas l'atteindre ! .Embarassed
Back to top
View user's profile Send private message
LaurentG



Joined: 13 Oct 2016
Posts: 34

PostPosted: Thu Jun 27, 2019 12:35 pm    Post subject: Reply with quote

J'ai peur que ce soit bien plus compliqué encore qu'un "simple" décalage de dalles...
Il y a manifestement un problème d'échelle.

J'ai mesuré, sur mon écran, la distance en mm entre deux points, avec la carte Viamichelin "normale" (qui fonctionne bien) et celle-ci.

Su la carte "normale", on a bien la distance qui double chaque fois qu'on monte un niveau de zoom (ce qui est normal....)

Par exemple, entre Criquetot l'Esneval et Goderville (NE du Havre - 76)
Zoom 10 : 13.5 mm
Zoom 11 : 26.8 mm
Zoom 12 : 53 mm (à la précision de la mesure sur l'écran près...)

Autre exemple, entre Guillestre et Saint-Véran (Hautes alpes)
Zoom 10 : 29 mm
Zoom 11 : 58 mm
Zoom 12 : 116 mm

Si en revanche on affiche ce nouveau fonds de carte, d'une part on n'a pas le ratio x2 à chaque changement de zoom, d'autre part on n'a pas du tout les mêmes mesures (et donc pas la bonne échelle...), à savoir:

Exemple 1 de Criquetot l'Esneval à Goderville
Zoom 10 : 8 mm
Zoom 11 : 21 mm
Zoom 12 : 37 mm

Exemple 2 de Guillestre à StVéran
Zoom 10 : 19 mm
Zoom 11 : 53 mm
Zoom 12 : 90 mm

Voilà. Faire ces mesures, et identifier le (ou au moins une partie du) problème, je sais faire, en tirer des conclusions intelligentes et utiles pour corriger, hélas, ça me dépasse.... Sad
Back to top
View user's profile Send private message
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Thu Jun 27, 2019 2:41 pm    Post subject: Reply with quote

Merci pour les mesures précises!
Effectivement, il doit y avoir une reprojection à faire en plus (d'autant plus que les limites de dalles ne tombent pas au bon endroit), ce qui risque d'être impossible dans MOBAC - sauf à savoir extorquer de leur serveur des dalles en 3857, mais je ne vois nulle part une indication de projection dans le bouzingue.
Back to top
View user's profile Send private message Visit poster's website
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Tue Jul 02, 2019 4:58 pm    Post subject: ViaMichelin ancienne version Reply with quote

Pour info, mon script n'a pas pour but de changer de zoom, sinon il y a un décalage dû au cache de Mobac. Si vous videz le cache (mobac\tilestore) le problème disparaît.
Donc :
1- rester sur le même niveau de zoom
2- pas possible de faire du multi-cartes-zooms avec Oruxmaps (par exemple)
3- corriger éventuellement
Code:
   }else{
      // url = ""
      return "https://" + MyServer_2 + MyFolder_2 + ";" + urlstring(Zoom,X+1,Y+1);
   }

par
Code:
   }else{
      Zoom10=0;
      Zoom11=0;
      Zoom12=0;
      // url = ""
      return "https://" + MyServer_2 + MyFolder_2 + ";" + urlstring(Zoom,X+1,Y+1);
   }

J'ai aussi laissé des lignes inutiles plus bas mais c'est sans conséquence (fichier en PJ)
Par contre la carte n'est pas calibrée sans sortir l'artilerie lourde pour un atlas téléphone (par exemple pour Oruxmap)
J'ai contacté Mobac qui n'a pas de solution alors si quelqu'un a une combine ...
Rappel ; Les cartes Michelin sont soumises à un copyright donc c'est juste pour le fun
Back to top
View user's profile Send private message Visit poster's website
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Tue Jul 02, 2019 5:25 pm    Post subject: Reply with quote

Pour répondre a LaurenG, les cartes ne sont pas centrées sur la France ! Pour le zoom10, la France était en Norvège. Les autres je sais pas car j'ai dû faire un script pour les retrouver sur la planète !
J'ai donc systématiquement pour chaque zoom recherché les 4 villes Brest <-> Strasbourg et Dunkerque <-> Perpignan pour les centrer sur les mêmes villes en zoom 9.
J'applique ensuite avec echelleXY une fonction affine y=ax+b passant par deux points (Dunkerque <-> Perpignan) pour échelle verticale et (Brest <-> Strasbourg) pour l'horizontale et cela juste pour "essayer de centrer les villes lors d'un changement de zoom car ces 3 cartes ont leurs échelles propres et qui ne correspondent pas au zooms standard 10,11 et 12 de Mobac.
Ceci explique donc pourquoi :
1- il ne faut pas changer de zoom
2- le décalage de tuile si on ne vide pas le cache après changement de zoom.
Je ne sais donc pas si il est possible de les calibrer dans Mobac ? J'ai pensé à un changement d'échelle d'image png ?!?
La PJ n'est pas passée, fichier à jour dispo ici :
http://randochartreuse.free.fr/mobac2.x/mapsources/France-Michelin-2019.bsh
Back to top
View user's profile Send private message Visit poster's website
LaurentG



Joined: 13 Oct 2016
Posts: 34

PostPosted: Tue Jul 02, 2019 6:58 pm    Post subject: Reply with quote

Puisque je suis cité, je réponds... et je réponds que je ne comprends pas ce que tu veux dire quand tu dis
Quote:
les cartes ne sont pas centrées sur la France ! Pour le zoom10, la France était en Norvège.


Pour éviter tout problème de cache, je le vide (en purgeant Tilestore avant même de lancer Mobac)
Puis je lance Mobac, avec n'importe quel fonds de carte qui marche.
Je me centre sur Paris (par exemple), au niveau de zoom 10, puis je change de fonds de carte, pour passer à ce Michelin à problème (sans changer de zoom). Certes, il y a un décalage, mais pas au point de pouvoir dire que "la France est en Norvège" ! En gros un décalage de 20KM vers le Nord (on est donc loin de la Norvège....) et 10 vers l'Est.

Puis je me remets sur le fonds de carte qui marche, et je passe au zoom 11, toujours centré sur Paris.
Puis je me remets sur le fonds Michelin en restant au zoom 11. A nouveau un décalage, plus faible cette fois-ci.

Même manip (et même résultat) pour passer au niveau 12.

Et ce, que j'utlise la première version du BSH ou la seconde => même résultat.
Back to top
View user's profile Send private message
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Wed Jul 03, 2019 11:40 am    Post subject: Reply with quote

guest wrote:
Pour répondre a LaurenG, les cartes ne sont pas centrées sur la France ! Pour le zoom10, la France était en Norvège. Les autres je sais pas car j'ai dû faire un script pour les retrouver sur la planète !
J'ai donc systématiquement pour chaque zoom recherché les 4 villes Brest <-> Strasbourg et Dunkerque <-> Perpignan pour les centrer sur les mêmes villes en zoom 9.
J'applique ensuite avec echelleXY une fonction affine y=ax+b passant par deux points (Dunkerque <-> Perpignan) pour échelle verticale et (Brest <-> Strasbourg) pour l'horizontale et cela juste pour "essayer de centrer les villes lors d'un changement de zoom car ces 3 cartes ont leurs échelles propres et qui ne correspondent pas au zooms standard 10,11 et 12 de Mobac.

Les échelles ne correspondent effectivement pas, et après qq recherches il semble que ces cartes utilisent toujours l'antique projection de Bonne (celles des cartes d'Etat-Major du XIXe), d'où l'impossibilité de les mettre au bon endroit dans MOBAC.
La solution serait de tout télécharger et tout recaler au calme avec des outils cartographiques ad hoc...
Back to top
View user's profile Send private message Visit poster's website
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Wed Jul 03, 2019 1:00 pm    Post subject: Reply with quote

Le(s) ami(s), moi je te (vous) donne des éléments pour que l'on avance :)
Si tu retires les corrections dans mon script :
X-CorrectionX et Y-CorrectionY, tu ne retrouveras pas la carte sur la France, mais en Norvège ! C'est pour cela que j'applique un décalage (CorrectionX et CorrectionY) pour recentrer décaler) l'Atlas sur la France.
Si tu n'es pas convaincu, remplace
Code:
urlstring(Zoom,X-CorrectionX,Y-CorrectionY);

par
Code:
urlstring(Zoom,X,Y);

Cela va générer des dalles vides et des erreurs Java en bordure d'Atlas
Maintenant, le but est de trouver une solution pour la calibration de la carte.
Je te propose ce BSH sans correction d'échelle, mais avec Atlas centré sur Paris. Vas sur Brest en zoom9, ferme l'atlas et ouvre-le, zoom, il y aura des erreurs ...
zoom10 dans l'eau
zoom11 bordure atlas
zoom 12 erreur java car x et/ou y deviennent négatifs avec la correction
Code:

// Nom de la carte affiché dans MOBAC
   name = "France, Michelin / Paris (Rev.081)-Z(10,11,12)-2019";
   
// Nom du serveur
   String MyServer = ".viamichelin.com";
   String MyServer_2 = "map.viamichelin.com";
   
// Key au format "/blabla"
   String MyKey = "";      
   
// MyUserAgent correspond à celui créé notemment avec la clé IGN
// Par défaut, on trouve souvent MyUserAgent = "Mozilla/5.0 Gecko/20100101 Firefox/49.0";
   String MyUserAgent = "Mozilla/5.0 Gecko/20100101 Firefox/49.0";

// MyReferer peut être demandé
   String MyReferer = "";

// MyFolder au format "/blabla"
   String MyFolder = "/mapsgene/dm/mapdirect";
   String MyFolder_2 = "/map/mapsgene/dm/mapdirect";

tileType = "png";   // Type d’image fourni par le serveur (png, jpg or gif)
tileSize = 256;      // Facultatif : Supprimer la ligne dans le doute
minZoom = 2;      // Facultatif : Zoom minimal souhaité (et/ou fourni par le serveur)
maxZoom = 19;      // Facultatif : Zoom maximal souhaité (et/ou fourni par le serveur) -> Maximum 22 pour Mobac

// Gestion des passages de zooms pour recentrer la carte
tileUpdate = TileUpdate.IfModifiedSince;
//tileUpdate = TileUpdate.LastModified;

String getTileUrl(int Zoom, int X, int Y) {
// Autres paramètres spécifiques GetTile
//      TileMatrix = Zoom : Le nom de la matrice qui contient la tuile
//      TileCol = X : Le numéro de colonne du coin supérieur gauche de la tuile
//      TileRow = Y : Le numéro de ligne du coin supérieur gauche de la tuile
   if (Zoom < 7) {
      // gestion Zoom < 7, on prend une carte générique Google pour voir le monde entier
      return "http://mt0.google.com/vt/lyrs=m@176103410&hl=fr&s=Galileo&scale=1&z=" + Zoom + "&x=" + X + "&y=" + Y;
   }else if (Zoom < 10){
      // url = ""
      return "https://" + MyServer_2 + MyFolder_2 + ";" + urlstring(Zoom,X+1,Y+1);
   }else if (Zoom < 11){
      Num_Server = (X % 3) + 10;   // 10 11 12
      //   Centré sur Paris (-491/-313)
      return "http://m" + Num_Server + MyServer + MyFolder + ";" + urlstring(Zoom,X-491,Y-313);
   }else if (Zoom < 12){
      Num_Server = (X % 3) + 10;   // 10 11 12
      //   Centré sur Paris (-990/-684)
      return "http://m" + Num_Server + MyServer + MyFolder + ";" + urlstring(Zoom,X-990,Y-684);
   }else if (Zoom < 13){
      Num_Server = (X % 3) + 10;   // 10 11 12
      //   Centré sur Paris (-2007/-1373)
      return "http://m" + Num_Server + MyServer + MyFolder + ";" + urlstring(Zoom,X-2007,Y-1373);
   }else{
      // url = ""
      return "https://" + MyServer_2 + MyFolder_2 + ";" + urlstring(Zoom,X+1,Y+1);
   }
}

void addHeaders(java.net.HttpURLConnection conn) {
   conn.addRequestProperty("Referer",MyReferer);
   conn.addRequestProperty("User-Agent",MyUserAgent);   
}

//
// Fonction projecion de ViaMichelin
//      
   static import java.lang.Math.*;
   import java.util.Base64;

String urlstring(int zm,int My_col,int My_row) {
   int[] tile;
   int new_zoom=zm;
   String zs;
   switch (new_zoom) {
         case 1   : zs="viamichelin.background@z1"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MQ==
         case 2   : zs="viamichelin.background@z2"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Mg==
         case 3   : zs="viamichelin.background@z3"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Mw==
         case 4   : zs="viamichelin.background@z4"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6NA==
         case 5   : zs="viamichelin.background@z5"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6NQ==
         case 6   : zs="viamichelin.background@z6"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Ng==
         case 7   : zs="viamichelin.background@z7"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6Nw==
         case 8   : zs="viamichelin.background@z8"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6OA==
         case 9   : zs="viamichelin.background@z9"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6OQ==
         case 10  : zs="eur_c_1000k_r05"            ; break;   //ZXVyX2NfMTAwMGtfcjA1
         case 11  : zs="fra_c_0275k_r81"            ; break;   //ZnJhX2NfMDI3NWtfcjgx
         case 12  : zs="fra_c_0185k_r81"            ; break;   //ZnJhX2NfMDE4NWtfcjgx
         case 13  : zs="viamichelin.background@z13"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTM=
         case 14  : zs="viamichelin.background@z14"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTQ=
         case 15  : zs="viamichelin.background@z15"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTU=
         case 16  : zs="viamichelin.background@z16"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTY=
         case 17  : zs="viamichelin.background@z17"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTc=
         case 18  : zs="viamichelin.background@z18"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTg=
         case 19  : zs="viamichelin.background@z19"   ; break;   //dmlhbWljaGVsaW4uYmFja2dyb3VuZEB6MTk=
      }
   tile = cr2tile(My_col,My_row);
   int tileA = tile[0];
   int tileB = tile[1];
   String tilestring = tiles2string(String.valueOf(tileA),String.valueOf(tileB));
   // Encode Base64
      String mapb64string  = Base64.getEncoder().encodeToString(zs.getBytes("utf-8"));
      String tileb64string = Base64.getEncoder().encodeToString(tilestring.getBytes("utf-8"));
      
   return mapb64string + ";"+ tileb64string;
}

int[] cr2tile(int My_col,int My_row) {
//      original cell:
//      A:B
//      child cells:
//      2B:2A      2B+1:2A
//      2B:2A+1    2B+1:2A+1

   int[] tile2 = new int[2];
   int A;
   int B;

   if ((My_col==1)&&(My_row==1)) {
      A = 0;
      B = 0;
   }
   else {
      // transformation en decimal -> (double)
      Double col0=(Double)My_col;
      Double row0=(Double)My_row;
      int col2 = round(col0/2);
      int row2 = round(row0/2);
      tile2 = cr2tile(col2,row2);
      int tile2A = tile2[0];
      int tile2B = tile2[1];
      A = tile2B * 2 + ((My_col-1) % 2);
      B = tile2A * 2 + ((My_row-1) % 2);
      // note that the A/B switch above is intentional
   }
   return new int[] {A,B};
}

String tiles2string(String a,String b) {
   String ps="";
   String qs="";
   int p=a.length();
   int q=b.length();
   for(i=0;i<(10-p);p++)
      ps=ps+"0";
   for(i=0;i<(10-q);q++)
      qs=qs+"0";
   return ps + a + qs + b;
}

   
//
// FIN ViaMichelin
//
Back to top
View user's profile Send private message Visit poster's website
guest



Joined: 08 Oct 2006
Posts: 5028

PostPosted: Wed Jul 03, 2019 8:43 pm    Post subject: Reply with quote

Comme dit, la reprojection "à la volée" avec les mains dans MOBAC ne me semble pas possible, il faudrait que le serveur fournisse des dalles découpées en projection 3857 de Google, et pas celle de Bonne de l'Etat-Major...
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    TrekBuddy Forum Index -> Français All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group