// Documentation : http://randochartreuse.free.fr/mobac2.x/documentation/#bsh // Version : 16/10/2023 // Nom de la carte affiché dans MOBAC name = "Allemagne, Rhénanie-Westphalie-Z(22)"; // Nom du serveur String MyServer = "www.wms.nrw.de"; // MyUserAgent correspond à celui créé notamment 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 "dossier" ou "dossier1/dossier2/etc" String MyFolder = "geobasis/wms_nw_dtk"; // échelle : >1/200 000 String MyFolder_100 = "geobasis/wms_nw_dtk100"; // échelle : 1/50 000-1/200 000 String MyFolder_50 = "geobasis/wms_nw_dtk50"; // échelle : 1/20 000-1/100 000 String MyFolder_25 = "geobasis/wms_nw_dtk25"; // échelle : <1/50 000 String MyFolder_10 = "geobasis/wms_nw_dtk10"; // échelle : <1/50 000 // Paramètres communs String MyService = "WMS"; // Service : le type de service (ici : “WMS”) String MyVersion = "1.3.0"; // Version : la Version du service utilisée (1.1.1 ou 1.3.0) String MyRequest = "GetMap"; // Request : la requête adressée au serveur (GetCapabilities, GetTile ou GetFeatureInfo) // Paramètres spécifiques GetMap String MyFormat = "image/png"; // Format : le format de sortie - type-mime - du fichier image (“image/png”, “image/jpg”, …) String MyLayers = "nw_dtk_col"; // Layers : la ou les "nom1,nom2" ressources à utiliser pour calculer l’image. C’est le nom technique de la ressource qui est utilisé String MyLayers_100 = "nw_dtk100_col"; String MyLayers_50 = "nw_dtk50_col"; String MyLayers_25 = "nw_dtk25_col"; String MyLayers_10 = "nw_dtk10_col"; String MyStyles = "default"; // Styles : le style de rendu des couches String Mycrs = "EPSG:3857"; // Crs : indique le système de coordonnées utilisé en WMS 1.3.0 (ex :900913, 3857) String Mysrs = ""; // Srs : indique le système de coordonnées utilisé en WMS Version < 1.3 String Mywidth = "256"; // Width : largeur de l’image finale en pixels String Myheight = "256"; // Height : hauteur de l’image finale en pixels String Mytransparent = "TRUE"; 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 = 22; // Facultatif : Zoom maximal souhaité (et/ou fourni par le serveur) -> Maximum 22 pour Mobac String getTileUrl(int Zoom, int X, int Y) { if (Zoom < 7) { // gestion Zoom < 7, on prend une carte générique Google pour voir le monde entier return "https://mt0.google.com/vt?lyrs=m&hl=fr&z=" + Zoom + "&x=" + X + "&y=" + Y; }else if (Zoom < 11){ // url2_de_test = "https://www.wms.nrw.de/geobasis/wms_nw_dtk?TRANSPARENT=TRUE&STYLES=default&LAYERS=nw_dtk_col&SERVICE=WMS&REQUEST=GetMap&Version=1.3.0&FORMAT=image/png&CRS=EPSG:3857&BBOX=802283.0487695313,6672646.820253908,821850.9280078125,6692214.699492187&WIDTH=256&HEIGHT=256" return "https://" + MyServer + "/" + MyFolder + "?TRANSPARENT=" + Mytransparent + "&STYLES=" + MyStyles + "&LAYERS=" + MyLayers + "&SERVICE=" + MyService + "&REQUEST=" + MyRequest + "&Version=" + MyVersion + "&FORMAT=" + MyFormat + "&CRS=" + Mycrs + "&BBOX=" + MercatorTileEdges(X,Y,Zoom) + "&WIDTH=" + Mywidth + "&HEIGHT=" + Myheight; }else if (Zoom < 12){ // url2_de_test = "https://www.wms.nrw.de/geobasis/wms_nw_dtk100?TRANSPARENT=TRUE&STYLES=default&LAYERS=nw_dtk100_col&SERVICE=WMS&REQUEST=GetMap&Version=1.3.0&FORMAT=image/png&CRS=EPSG:3857&BBOX=802283.0487695313,6672646.820253908,821850.9280078125,6692214.699492187&WIDTH=256&HEIGHT=256" return "https://" + MyServer + "/" + MyFolder_100 + "?TRANSPARENT=" + Mytransparent + "&STYLES=" + MyStyles + "&LAYERS=" + MyLayers_100 + "&SERVICE=" + MyService + "&REQUEST=" + MyRequest + "&Version=" + MyVersion + "&FORMAT=" + MyFormat + "&CRS=" + Mycrs + "&BBOX=" + MercatorTileEdges(X,Y,Zoom) + "&WIDTH=" + Mywidth + "&HEIGHT=" + Myheight; }else if (Zoom < 13){ // url2_de_test = "https://www.wms.nrw.de/geobasis/wms_nw_dtk50?TRANSPARENT=TRUE&STYLES=default&LAYERS=nw_dtk50_col&SERVICE=WMS&REQUEST=GetMap&Version=1.3.0&FORMAT=image/png&CRS=EPSG:3857&BBOX=831634.8676269532,6653078.941015624,841418.8072460938,6662862.880634766&WIDTH=256&HEIGHT=256" return "https://" + MyServer + "/" + MyFolder_50 + "?TRANSPARENT=" + Mytransparent + "&STYLES=" + MyStyles + "&LAYERS=" + MyLayers_50 + "&SERVICE=" + MyService + "&REQUEST=" + MyRequest + "&Version=" + MyVersion + "&FORMAT=" + MyFormat + "&CRS=" + Mycrs + "&BBOX=" + MercatorTileEdges(X,Y,Zoom) + "&WIDTH=" + Mywidth + "&HEIGHT=" + Myheight; }else if (Zoom < 15){ // url2_de_test = "https://www.wms.nrw.de/geobasis/wms_nw_dtk25?TRANSPARENT=TRUE&STYLES=default&LAYERS=nw_dtk25_col&SERVICE=WMS&REQUEST=GetMap&Version=1.3.0&FORMAT=image/png&CRS=EPSG:3857&BBOX=848756.7619604492,6679984.77496826,851202.7468652345,6682430.759873048&WIDTH=256&HEIGHT=256" return "https://" + MyServer + "/" + MyFolder_25 + "?TRANSPARENT=" + Mytransparent + "&STYLES=" + MyStyles + "&LAYERS=" + MyLayers_25 + "&SERVICE=" + MyService + "&REQUEST=" + MyRequest + "&Version=" + MyVersion + "&FORMAT=" + MyFormat + "&CRS=" + Mycrs + "&BBOX=" + MercatorTileEdges(X,Y,Zoom) + "&WIDTH=" + Mywidth + "&HEIGHT=" + Myheight; }else{ // url2_de_test = "https://www.wms.nrw.de/geobasis/wms_nw_dtk10?TRANSPARENT=TRUE&STYLES=default&LAYERS=nw_dtk10_col&SERVICE=WMS&REQUEST=GetMap&Version=1.3.0&FORMAT=image/png&CRS=EPSG:3857&BBOX=852425.7393176269,6678761.78251587,853648.7317700195,6679984.77496826&WIDTH=256&HEIGHT=256" return "https://" + MyServer + "/" + MyFolder_10 + "?TRANSPARENT=" + Mytransparent + "&STYLES=" + MyStyles + "&LAYERS=" + MyLayers_10 + "&SERVICE=" + MyService + "&REQUEST=" + MyRequest + "&Version=" + MyVersion + "&FORMAT=" + MyFormat + "&CRS=" + Mycrs + "&BBOX=" + MercatorTileEdges(X,Y,Zoom) + "&WIDTH=" + Mywidth + "&HEIGHT=" + Myheight; } } void addHeaders(java.net.HttpURLConnection conn) { conn.addRequestProperty("Referer",MyReferer); conn.addRequestProperty("User-Agent",MyUserAgent); } // // Fonction projection - https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames // Simplifiée par par Manfred Wollny (wollny.m at freenet.de) // et Raimund Held (raimundheld at gmx.de) // Adaptée pour les Versions 1.1.1 par Nicolas PAOUR (http://randochartreuse.free.fr) // import java.lang.Math; static double tile2lon(int x, int z) { return x / Math.pow(2.0, z) * 360.0 - 180; } static double tile2lat(int y, int z) { double n = Math.PI - (2.0 * Math.PI * y) / Math.pow(2.0, z); return Math.toDegrees(Math.atan(Math.sinh(n))); } // Fonction projecion de WSG 1984 // https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84 // Unité = degrés (coordonnées géographiques) if (MyVersion == "1.1.1") { // BBOX=xmin,ymin,xmax,ymax NON-FLIPPED axes en Version 1.1.1 String TileEdges(int x, int y, int zoom) { // "WGS 84" (EPSG:4326) return tile2lon(x ,zoom) + "," + // west (°) tile2lat(y + 1,zoom) + "," + // south (°) tile2lon(x + 1,zoom) + "," + // east (°) tile2lat(y ,zoom) ; // north (°) } } else { // BBOX=ymin,xmin,ymax,xmax FLIPPED axes en Version 1.3.0 String TileEdges(int x, int y, int zoom) { // "WGS 84" (EPSG:4326) return tile2lat(y + 1,zoom) + "," + // south (°) tile2lon(x ,zoom) + "," + // west (°) tile2lat(y ,zoom) + "," + // north (°) tile2lon(x + 1,zoom) ; // east (°) } } // Fonction projecion de Mercator // https://en.wikipedia.org/wiki/Web_Mercator_projection // R = 6378137.0 m -> P / 2 = 20037508.34 double lon2mercator(double l) { return (l * 20037508.34 / 180); } double lat2mercator(double l) { r = Math.toRadians(l); lat = Math.log((1 + Math.sin(r)) / (1 - Math.sin(r))); return (lat * 20037508.34 / 2 / Math.PI); } // Unité = mètre (coordonnées projetées) // BBOX=xmin,ymin,xmax,ymax NON-FLIPPED axes String MercatorTileEdges(int x, int y , int zoom) { // "WGS 84 / Pseudo-Mercator" (EPSG:3857) - "GOOGLE" (EPSG:900913) - "Popular Visualization CRS / Mercator" (EPSG:3785) return lon2mercator(tile2lon(x ,zoom)) + "," + // west (m) lat2mercator(tile2lat(y + 1,zoom)) + "," + // south (m) lon2mercator(tile2lon(x + 1,zoom)) + "," + // east (m) lat2mercator(tile2lat(y ,zoom)) ; // north (m) } // // FIN projection //