Continued on the "web version of Baidu map load offline tile", this article on the download tile simple procedures.
Baidu Map Tile download is actually very easy, get download link and then batch download on the line. However, because of the need to follow the rules to store, it is best to write a program to download these links. Otherwise you have to use someone else has done the program to download, many of these are required to charge, or have a watermark or something.
In fact, it is not difficult to get all the tiles directly inside the map window, just follow the code in the script. But the script is compressed and confusing, it is difficult to read.
This article directly paste out the good code, and then you can call to download.
Function downloadbaidutiles () {var earthradius = 6370996.81;var mcband = [ 12890594.86, 8362377.87, 5591021, 3481989.83, &NBSP;1678043.12,&NBSP;0&NBSP;];VAR&NBSP;LLBAND&NBSP;=&NBSP;[&NBSP;75,&NBSP;60,&NBSP;45,&NBSP;30,&NBSP;15, 0 ];var MC2LL = [ [ 1.410526172116255e-8, 0.00000898305509648872,-1.9939833816331, 200.9824383106796,-187.2403703815547, 91.6087516669843,-23.38765649603339, 2.57121317296198,-0.03801003308653, 17337981.2 ], [ -7.435856389565537e-9, 0.000008983055097726239,- 0.78625201886289, 96.32687599759846,-1.85204757529826, -59.36935905485877,47.40033549296737, - 16.50741931063887,2.28786674699375, 10260144.86 ], [ -3.030883460898826e-8, 0.00000898305509983578,0.30071316287616, 59.74293618442277,7.357984074871, - 25.38371002664745,13.45380521110908, -3.29883767235584,0.32710905363475, 6856817.37 ], [ -1.981981304930552e-8, 0.000008983055099779535,0.03278182852591, 40.31678527705744,0.65659298677277, - 4.44255534477492,0.85341911805263, 0.12923347998204,-0.04625736007561, 4482777.06 ], [ 3.09191371068437e-9, 0.000008983055096812155,0.00006995724062, 23.10934304144901,-0.00023663490511, -0.6321817810242,- 0.00663494467273, 0.03430082397953,-0.00466043876332, 2555164.4 ], [ 2.890871144776878e-9, 0.000008983055095805407,-3.068298e-8, 7.47137025468032,-0.00000353937994, -0.02145144861037,-0.00001234426596, 0.00010322952773,- 0.00000323890364, 826088.5 ] ];var  ll2mc = [ [ -0.0015702102444, 111320.7020616939,1704480524535203, -10338987376042340,26112667856603880, - 35149669176653700,26595700718403920, -10725012454188240,1800819912950474, 82.5 ], [ 0.0008277824516172526, 111320.7020463578,647795574.6671607, -4082003173.641316,10774905663.51142, -15171875531.51559,12053065338.62167, - 5124939663.577472,913311935.9512032, 67.5 ], [ 0.00337398766765, 111320.7020202162,4481351.045890365, -23393751.19931662,79682215.47186455, - 115964993.2797253,97236711.15602145, -43661946.33752821,8477230.501135234, 52.5 ], [ 0.00220636496208, 111320.7020209128,51751.86112841131, 3796837.749470245,992013.7397791013, -1221952.21711287,1340652.697009075, -620943.6990984312,144416.9293806241, 37.5 ], [ -0.0003441963504368392, 111320.7020576856,278.2353980772752, 2485758.690035394,6070.750963243378, 54821.18345352118,9540.606633304236, - 2710.55326746645,1405.483844121726, 22.5 ], [ - 0.0003218135878613132, 111320.7020701615,0.00369383431289, 823725.6402795718,0.46104986909093, 2351.343141331292,1.58060784298199, 8.77738589078284,0.37238884252424, 7.45 ] ];function point (Lng, lat) { this.lng = lng; this.lat = lat;} function convertor (POINT,&NBSP;LL2MC) { if (!point | | &NBSP;!LL2MC) { return } The conversion of // longitude is simple and a simple linear conversion is possible. &nbsP; // 0, 1 of the number of levels is such a -0.0015702102444, 111320.7020616939 var x = ll2mc[0] + ll2mc[1] * math.abs (POINT.LNG); // A linear relationship is calculated first, where 9 is the order of magnitude: 67.5,a is valued at approximately one single digit var a = math.abs (Point.lat) The conversion of / ll2mc[9]; // dimension is relatively complex,y=b+ca+da^2+ea^3+fa^4+ga^5+ha^6 // where A is a linear conversion of a dimension, and the final value is a six-square polynomial, the values of 2, 3, 4, 5, 6, 7, 8 are approximately such: // 278.2353980772752, 2485758.690035394, // 6070.750963243378, 54821.18345352118, // 9540.606633304236, -2710.55326746645, // 1405.483844121726, // This means that the dimension will become a large number, much too big to be hard to say var y = ll2mc[2] + ll2mc[3] * a + ll2mc[4] * a * a + ll2mc[5] * a * a * a + ll2mc[6] * a * a * A * a + ll2mc[7] * a * a * a * a * a + ll2mc[8] * a * a * a * a * a * a; // the entire calculation is based on the absolute value, and the sign bit ends up on the line x *= (point.lng < 0 ? -1 : 1); y *= (point.lat < 0 ? -1 : 1); // produces a new point coordinate. It's not the same. return new point (x, y)}function lnglattomercator (T) { &NBSP;&NBSP;&NBSP;&NBSP;RETURN&NBSP;CONVERTLL2MC (T);} Function getloop (Value, min, max) { while (value > max) { value -= max - min } while (Value < min) { value += max - min } return value}function convertLL2MC (point) { var point1; var ll2mc; point.lng = getloop (point.lng, -180, 180);// standardized to intra-range point.lat = getrange (point.lat, -74, 74);// standardized to intra-range point1 = new point (Point.lng, point.lat); // Find Llband Dimension dictionary, dictionary from large to small sort, find then stop for (var i = 0; i < llband.length; i++) { if (Point1.lat >= llband[i]) { ll2mc = ll2mc[i]; break; } } // if not found, turn to find. Found is stopped. if (!LL2MC) { for (var i = llband.length - 1; i >= 0; i--) { if (Point1.lat <= -llband[i]) { ll2mc = ll2mc[i];break; } } } var Newpoint = convertor (POINT,&NBSP;LL2MC); var point = new Point (NewPoint.lng.toFixed (2), newpoint.lat.tofixed (2)); return point;} Function findalltiles (Map, callback) { var maptype = Map.getmaptype ();// map type var zoomLevel = map.zoomLevel;// magnification var center = map.mercatorCenter;// Center coordinates This.mapcenterpoint = center; var cv = maptype.getzoomunits ( Zoomlevel);// zoomlevel related index, =2^ (18-zoomlevel) var unitSize = Maptype.getzoomfactor (Zoomlevel);// a factor, =cv*256 var longitudeunits = math.ceil (center.lng / unitsize);// center.lng is a very large number var Latitudeunits = math.ceil (center.lat / unitsize); var tilesize = maptype.gettilesize (); var cp = [ longitudeunits, latitudeUnits, (center.Lng - longitudeunits * unitsize) / unitSize * tileSize, (center.lat - latitudeunits * UnitSize) / unitsize * tilesize ]; var width0 = cp[0] - math.ceil ((map.width / 2 - cp[2]) / tilesize); var height0 = cp[1] - math.ceil ((map.height / 2 - &NBSP;CP[3] / tilesize); var width = cp[0] + Math.ceil ((map.width / 2 + cp[2]) / tilesize); var c0 = 0; if (maptype === bmap_perspective_map && map.getzoom () == 15) { c0 = 1 } var height = cp[1] + math.ceil ((map.height / 2 + cp[3 ]) / tilesize) + c0; var xydata = []; for (var i = width0; i < width; i++) { for (var j = height0; j < height; j++) { xydata.push ([ i, j ]) } } var zoom = map.getzoom (); //var win = window.open () ; for (var i = 0, len = xydata.length; i < len; i++) { showtile ([ xydata[i][0], xydata[i][1],&nbSp;zoom ], callback) } } Function showtile (xyz, callback) { console.log (xyz[2]+ "/" +xyz[0]+ "/" +xyz[1] "); &NBSP;&NBSP;&NBSP;&NBSP;IF (!! Callback) { callback (Xyz, gettilesurl ({x:xyz[0],y:xyz[1]}, &NBSP;XYZ[2]); }}var j = [ "http://online0.map.bdimg.com/tile/", "http://online1.map.bdimg.com/tile/", "http://online2.map.bdimg.com/tile/", "http://online3.map.bdimg.com/tile/", "http://online4.map.bdimg.com/tile/" ]; function gettilesurl (XY,&NBSP;Z) { var x = xy.x; var y = xy.y; var udt = "20150518"; var style = "PL"; // if (this.map.highResolutionEnabled ()) { //style = "PH" // } var cm = j[math.abs ( x + y) % j.length] + "qt=tile&x=" + (x + ""). Replace (/-/gi, "M") + "&y=" + (y + , ""). Replace (/-/gi, "M") + "&z=" + z + "&styles=" + style + "& udt= " + udt; // This place abandoned the above calculation results, directly using the local image //cM = "maptile/" + z + "/" + x + "/" + y + ". jpg"; Return cm.replace (/-(\d+)/gi, "m$1") } return function (map, callback) {findalltiles (map, callback);};}
Then introduce this JS file, and then write a button, constantly moving the window, add a new download connection bar.
<script type= "Text/javascript" src= "js/findtiles.js" ></script><input type= "button" value= "Findtiles "Onclick=" Findtiles (); " ><script>function findtiles () {var findalltiles = Downloadbaidutiles (); Findalltiles (map, addurls);} function Addurls (xyz, url) {var div = document.getElementById ("list"); var anchor = document.createelement ("a"); Anchor.href = URL; anchor.innerhtml = xyz[2]+ "/" +xyz[0]+ "/" +xyz[1 "; Div.appendchild (anchor); var br = document.createelement ("BR"); Div.appendchild (BR);} </script>
:
This method has a good advantage, you can zoom the map at any time, and then click the button, so you can constantly get new tile address. However, the code is not optimized, the mobile map may produce duplicate tiles, and then download the program has not been written. Finally, we can arrange the location of the files according to XYZ.
Download the Baidu Map tile method