Arcgis for js加载百度地图

看转:https://blog.csdn.net/qq_41046162/article/details/80248281

通过学习了一段时间的arcgis for js,让我来讲一下如何在arcgis for js加载百度地图。

 

加载的结果显示:

 

 

 

 

 

                                                                           地图

 

 

 

                                                                  影像 - 无标注

 

 

 

                                                                           影像 - 有标注

 

制作步骤:

 

首先,我是在学习了https://blog.csdn.net/gisshixisheng/article/details/44853709这篇文章,代码大多都是那里的,参数也都没错,但是复制过去还是打不开,这个之后我会讲的。

 

其次,就是_百度地图在柯林斯调用的有地图在切片,影像切片,以及道路等POI切片,我将之用TiledMapServiceLayer做了扩展,成了BDAnoLayer,BDVecLayer,BDimgLayer三个图层,其代码如下:(通俗的意思就是在html同目录的新建一个文件夹,然后建立三个JavaScript文件分别是BDAnoLayer,BDVecLayer,BDImgLayer)

 

BDAnoLayer.js

 

define(["dojo/_base/declare",

        "esri/layers/TiledMapServiceLayer",

        "esri/geometry/Extent",

        "esri/SpatialReference",

        "esri/layers/TileInfo"

    ], function (declare, TiledMapServiceLayer, Extent, SpatialReference, TileInfo) {

        return declare(TiledMapServiceLayer, {

            constructor: function () {

                this.spatialReference = new SpatialReference({ wkid: 102100 });

                this.initialExtent = (this.fullExtent = new Extent(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892, this.spatialReference));

                this.scale = [591657527.591555,295828763.795777,147914381.897889,73957190.948944,36978595.474472,18489297.737236,9244648.868618,

                    4622324.434309,2311162.217155,1155581.108577,577790.554289,288895.277144,144447.638572,72223.819286,

                    36111.9096437,18055.9548224,9027.977411,4513.988705,2256.994353,1128.497176];

                this.resolution = [156543.033928,78271.5169639999,39135.7584820001,19567.8792409999,9783.93962049996,4891.96981024998,2445.98490512499,

                    1222.99245256249,611.49622628138,305.748113140558,152.874056570411,76.4370282850732,38.2185141425366,19.1092570712683,9.55462853563415,

                    4.77731426794937,2.38865713397468,1.19432856685505,0.597164283559817,0.298582141647617];

                this.tileInfo = new TileInfo({

                    "rows": 256,

                    "cols": 256,

                    "compressionQuality": 90,

                    "origin": {

                        "x": -20037508.3427892,

                        "y": 20037508.3427892

                    },

                    "spatialReference": this.spatialReference,

                    "lods": [{ "level": 0, "resolution": this.resolution[0], "scale": this.scale[0] },

                        { "level": 1, "resolution": this.resolution[1], "scale": this.scale[1] },

                        { "level": 2, "resolution": this.resolution[2], "scale": this.scale[2] },

                        { "level": 3, "resolution": this.resolution[3], "scale": this.scale[3] },

                        { "level": 4, "resolution": this.resolution[4], "scale": this.scale[4] },

                        { "level": 5, "resolution": this.resolution[5], "scale": this.scale[5] },

                        { "level": 6, "resolution": this.resolution[6], "scale": this.scale[6] },

                        { "level": 7, "resolution": this.resolution[7], "scale": this.scale[7] },

                        { "level": 8, "resolution": this.resolution[8], "scale": this.scale[8] },

                        { "level": 9, "resolution": this.resolution[9], "scale": this.scale[9] },

                        { "level": 10, "resolution": this.resolution[10], "scale": this.scale[10] },

                        { "level": 11, "resolution": this.resolution[11], "scale": this.scale[11] },

                        { "level": 12, "resolution": this.resolution[12], "scale": this.scale[12] },

                        { "level": 13, "resolution": this.resolution[13], "scale": this.scale[13] },

                        { "level": 14, "resolution": this.resolution[14], "scale": this.scale[14] },

                        { "level": 15, "resolution": this.resolution[15], "scale": this.scale[15] },

                        { "level": 16, "resolution": this.resolution[16], "scale": this.scale[16] },

                        { "level": 17, "resolution": this.resolution[17], "scale": this.scale[17] },

                        { "level": 18, "resolution": this.resolution[18], "scale": this.scale[18] },

                        { "level": 19, "resolution": this.resolution[19], "scale": this.scale[19] }

                    ]

                });

                this.loaded = true;

                this.onLoad(this);

            },

            getTileUrl: function (level, row, col) {

                var zoom = level - 1;

                var offsetX = parseInt(Math.pow(2, zoom));

                var offsetY = offsetX - 1;

                var numX = col - offsetX, numY = (-row) + offsetY ;

                var num = (col + row) % 8 + 1;

                return "http://online" + num + ".map.bdimg.com/tile/?qt=tile&x="+numX+"&y="+numY+"&z="+level+"&styles=sl&udt=20180505";

            }

        });

});

BDVecLayer.js

 

define(["dojo/_base/declare",

        "esri/layers/TiledMapServiceLayer",

        "esri/geometry/Extent",

        "esri/SpatialReference",

        "esri/layers/TileInfo"

    ], function (declare, TiledMapServiceLayer, Extent, SpatialReference, TileInfo) {

        return declare(TiledMapServiceLayer, {

            constructor: function () {

                this.spatialReference = new SpatialReference({ wkid: 102100 });

                this.initialExtent = (this.fullExtent = new Extent(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892, this.spatialReference));

                this.scale = [591657527.591555,295828763.795777,147914381.897889,73957190.948944,36978595.474472,18489297.737236,9244648.868618,

                    4622324.434309,2311162.217155,1155581.108577,577790.554289,288895.277144,144447.638572,72223.819286,

                    36111.9096437,18055.9548224,9027.977411,4513.988705,2256.994353,1128.497176];

                this.resolution = [156543.033928,78271.5169639999,39135.7584820001,19567.8792409999,9783.93962049996,4891.96981024998,2445.98490512499,

                    1222.99245256249,611.49622628138,305.748113140558,152.874056570411,76.4370282850732,38.2185141425366,19.1092570712683,9.55462853563415,

                    4.77731426794937,2.38865713397468,1.19432856685505,0.597164283559817,0.298582141647617];

                this.tileInfo = new TileInfo({

                    "rows": 256,

                    "cols": 256,

                    "compressionQuality": 90,

                    "origin": {

                        "x": -20037508.3427892,

                        "y": 20037508.3427892

                    },

                    "spatialReference": this.spatialReference,

                    "lods": [{ "level": 0, "resolution": this.resolution[0], "scale": this.scale[0] },

                        { "level": 1, "resolution": this.resolution[1], "scale": this.scale[1] },

                        { "level": 2, "resolution": this.resolution[2], "scale": this.scale[2] },

                        { "level": 3, "resolution": this.resolution[3], "scale": this.scale[3] },

                        { "level": 4, "resolution": this.resolution[4], "scale": this.scale[4] },

                        { "level": 5, "resolution": this.resolution[5], "scale": this.scale[5] },

                        { "level": 6, "resolution": this.resolution[6], "scale": this.scale[6] },

                        { "level": 7, "resolution": this.resolution[7], "scale": this.scale[7] },

                        { "level": 8, "resolution": this.resolution[8], "scale": this.scale[8] },

                        { "level": 9, "resolution": this.resolution[9], "scale": this.scale[9] },

                        { "level": 10, "resolution": this.resolution[10], "scale": this.scale[10] },

                        { "level": 11, "resolution": this.resolution[11], "scale": this.scale[11] },

                        { "level": 12, "resolution": this.resolution[12], "scale": this.scale[12] },

                        { "level": 13, "resolution": this.resolution[13], "scale": this.scale[13] },

                        { "level": 14, "resolution": this.resolution[14], "scale": this.scale[14] },

                        { "level": 15, "resolution": this.resolution[15], "scale": this.scale[15] },

                        { "level": 16, "resolution": this.resolution[16], "scale": this.scale[16] },

                        { "level": 17, "resolution": this.resolution[17], "scale": this.scale[17] },

                        { "level": 18, "resolution": this.resolution[18], "scale": this.scale[18] },

                        { "level": 19, "resolution": this.resolution[19], "scale": this.scale[19] }

                    ]

                });

                this.loaded = true;

                this.onLoad(this);

            },

            getTileUrl: function (level, row, col) {

                var zoom = level - 1;

                var offsetX = parseInt(Math.pow(2, zoom));

                var offsetY = offsetX - 1;

                var numX = col - offsetX, numY = (-row) + offsetY ;

                var num = (col + row) % 8 + 1;

                return "http://online" + num + ".map.bdimg.com/tile/?qt=tile&x="+numX+"&y="+numY+"&z="+level+"&styles=pl&scaler=1&udt=20180505";

            }

        });

});

BDImgLayer.js

 

define(["dojo/_base/declare",

        "esri/layers/TiledMapServiceLayer",

        "esri/geometry/Extent",

        "esri/SpatialReference",

        "esri/layers/TileInfo"

    ], function (declare, TiledMapServiceLayer, Extent, SpatialReference, TileInfo) {

        return declare(TiledMapServiceLayer, {

            constructor: function () {

                this.spatialReference = new SpatialReference({ wkid: 102100 });

                this.initialExtent = (this.fullExtent = new Extent(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892, this.spatialReference));

                this.scale = [591657527.591555,295828763.795777,147914381.897889,73957190.948944,36978595.474472,18489297.737236,9244648.868618,

                    4622324.434309,2311162.217155,1155581.108577,577790.554289,288895.277144,144447.638572,72223.819286,

                    36111.9096437,18055.9548224,9027.977411,4513.988705,2256.994353,1128.497176];

                this.resolution = [156543.033928,78271.5169639999,39135.7584820001,19567.8792409999,9783.93962049996,4891.96981024998,2445.98490512499,

                    1222.99245256249,611.49622628138,305.748113140558,152.874056570411,76.4370282850732,38.2185141425366,19.1092570712683,9.55462853563415,

                    4.77731426794937,2.38865713397468,1.19432856685505,0.597164283559817,0.298582141647617];

                this.tileInfo = new TileInfo({

                    "rows": 256,

                    "cols": 256,

                    "compressionQuality": 90,

                    "origin": {

                        "x": -20037508.3427892,

                        "y": 20037508.3427892

                    },

                    "spatialReference": this.spatialReference,

                    "lods": [{ "level": 0, "resolution": this.resolution[0], "scale": this.scale[0] },

                        { "level": 1, "resolution": this.resolution[1], "scale": this.scale[1] },

                        { "level": 2, "resolution": this.resolution[2], "scale": this.scale[2] },

                        { "level": 3, "resolution": this.resolution[3], "scale": this.scale[3] },

                        { "level": 4, "resolution": this.resolution[4], "scale": this.scale[4] },

                        { "level": 5, "resolution": this.resolution[5], "scale": this.scale[5] },

                        { "level": 6, "resolution": this.resolution[6], "scale": this.scale[6] },

                        { "level": 7, "resolution": this.resolution[7], "scale": this.scale[7] },

                        { "level": 8, "resolution": this.resolution[8], "scale": this.scale[8] },

                        { "level": 9, "resolution": this.resolution[9], "scale": this.scale[9] },

                        { "level": 10, "resolution": this.resolution[10], "scale": this.scale[10] },

                        { "level": 11, "resolution": this.resolution[11], "scale": this.scale[11] },

                        { "level": 12, "resolution": this.resolution[12], "scale": this.scale[12] },

                        { "level": 13, "resolution": this.resolution[13], "scale": this.scale[13] },

                        { "level": 14, "resolution": this.resolution[14], "scale": this.scale[14] },

                        { "level": 15, "resolution": this.resolution[15], "scale": this.scale[15] },

                        { "level": 16, "resolution": this.resolution[16], "scale": this.scale[16] },

                        { "level": 17, "resolution": this.resolution[17], "scale": this.scale[17] },

                        { "level": 18, "resolution": this.resolution[18], "scale": this.scale[18] },

                        { "level": 19, "resolution": this.resolution[19], "scale": this.scale[19] }

                    ]

                });

                this.loaded = true;

                this.onLoad(this);

            },

            getTileUrl: function (level, row, col) {

                var zoom = level - 1;

                var offsetX = parseInt(Math.pow(2, zoom));

                var offsetY = offsetX - 1;

                var numX = col - offsetX, numY = (-row) + offsetY ;

                var num = (col + row) % 8 + 1;

                return "http://shangetu" + num + ".map.bdimg.com/it/u=x="+numX+";y="+numY+";z="+level+";v=009;type=sate&fm=46&udt=20180505";

            }

        });

});

从上面的getTileUrl 可以看到,三者返回的URL的地址是没有有区别的,在上述的URL有可能失效,为了得到最新的地址,学习了那篇文章,我做了如下工作:

 

1,先用百度地图JS API调用并显示百度地图,代码如下:

 

<!DOCTYPE html>  

<html>  

<head>  

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />  

    <style type="text/css">  

        body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}  

    </style>  

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=NkuwFBPlXG1uqPDsB9nK2nqpyLFF0SFV"></script>  

    <title>地图展示</title>  

</head>  

<body>  

<div id="allmap"></div>  

</body>  

</html>  

<script type="text/javascript">

    // 百度地图API功能  

    var map = new BMap.Map("allmap");    // 创建Map实例  

    map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);  // 初始化地图,设置中心点坐标和地图级别  

    map.addControl(new BMap.MapTypeControl());   //添加地图类型控件  

    map.setCurrentCity("北京");          // 设置地图显示的城市 此项是必须设置的  

    map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放  

</script>  

你的密钥需要更改为百度API的密钥,有需要的要申请。

 

2,然后用chrome打开这个html,F12调试--NetWork--左边找一张切片,右边切换至预览面板

 

 

 

                                                                BDVecLayer.js(地图网址)

 

 

 

                                                                                BDImgLayer.js(影像链接)

 

 

 

                                                                                   BDAnoLayer.js(poi网址)

 

只需要将最后面的数字替换掉就行了,20180505。

 

3.将上面的三个JS调用到地图主页。

 

代码如下:

 

<!DOCTYPE html>

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">

    <title>Baidu Map</title>

    <link rel="stylesheet" href="https://js.arcgis.com/3.23/dijit/themes/tundra/tundra.css"/>

    <link rel="stylesheet" href="https://js.arcgis.com/3.23/esri/css/esri.css">

    <style>

        html, body, #map {

            height: 100%;

            margin: 0;

            padding: 0;

        }

        .base-map-ano{

            position: absolute;

            right: 0pt;

            top:18pt;

            background: #e6edf1;

            border: #96aed1 1px solid;

            padding: 4px 5px;

            padding-left: 0px;

            padding-top: 0px;

            display: none;

            font-weight: normal;

        }

        .base-map{

            position: absolute;

            right: 15pt;

            top:15pt;

            background: #f0f0f0;

            border: #96aed1 1px solid;

            width: auto;

            height: auto;

            z-index: 99;

            font:normal 11px "宋体",Arial;

            color:#868686;

        }

        .base-map-switch{

            padding: 4px 8px;

            float: left;

        }

        .base-map-switch-active{

            background:#e6edf1;

            font-weight: bold;

            color: #4d4d4d;

        }

        .base-map-switch:hover{

            cursor: pointer;

        }

        .base-map-switch-center{

            border: 1px #96aed1 solid;

            border-top:none;

            border-bottom:none;

        }

    </style>

    <script type="text/javascript">

        dojoConfig = {

            parseOnLoad: true,

            packages: [{

                name: 'bdlib',

                location: this.location.pathname.replace(/\/[^/]+$/, "")+"/js"

            }]

        };

    </script>

<script src="https://js.arcgis.com/3.23/"></script>

    <script src="js/jquery-1.8.3.js"></script>

    <script>

        var map,showMap,anoCtrl;

        require(["esri/map",

                "bdlib/BDVecLayer",

                "bdlib/BDImgLayer",

                "bdlib/BDAnoLayer",

                "esri/layers/FeatureLayer",

                "esri/geometry/Point",

                "esri/SpatialReference",

                "dojo/domReady!"],

            function (Map,

                      BDVecLayer,

                      BDImgLayer,

                      BDAnoLayer,

                      FeatureLayer,

                      Point,

                      SpatialReference

            ){

                map = new Map("map", {

                    logo: false

                });

                var vecMap = new BDVecLayer();

                var imgMap = new BDImgLayer();

                var anoMap = new BDAnoLayer();

                map.addLayer(vecMap);

                map.addLayers([imgMap,anoMap]);

                imgMap.hide();

                anoMap.hide();

 

                var pt = new Point(7038512.810510807, 2629489.7975553474, new SpatialReference({ wkid: 102100 }));

                map.centerAndZoom(pt, 5);

 

                showMap = function(layer){

                    //设置按钮样式

                    var baseMap = ["vec","img"];

                    for(var i= 0, dl=baseMap.length;i<dl;i++){

                        $("#"+baseMap[i]).removeClass("base-map-switch-active");

                    }

                    $("#"+layer).addClass("base-map-switch-active");

                    //设置显示地图

                    switch(layer){

                        case "img":{//影像

                            vecMap.hide();

                            imgMap.show();

                            $("#ano").show();

                            break;

                        }

                        default :{//地图

                            vecMap.show();

                            imgMap.hide();

                            anoMap.hide();

                            $("#ano").hide();

                            $("#chkAno").attr("checked",false);

                            break;

                        }

                    }

                };

                anoCtrl = function(){

                    if($("#chkAno").prop("checked")){

                        anoMap.show();

                    }

                    else{

                        anoMap.hide();

                    }

                }

            });

    </script>

</head>

<body>

<div id="map">

    <div class="base-map">

        <div id="vec" class="base-map-switch base-map-switch-active" onclick="showMap('vec')">地图</div>

        <div id="img" class="base-map-switch base-map-switch-center"  onclick="showMap('img')">影像

            <div id="ano" class="base-map-ano">

                <input id="chkAno" type="checkbox" name="chkAno" value="chkAno" onchange="anoCtrl()"/>标注

            </div>

        </div>

    </div>

</div>

</body>

</html>

 

其中的jQuery-1.8.3.js的代码可以自己百度下,然后放到JS文件夹下面。

全部代码下载链接:下载链接

最后建议先用火狐浏览器打开这个baidumap,显示偏移的话可能是代码错了.google浏览器要改一下,需要配置google chrome支持本地(file协议)的AJAX请求:

设置浏览器的快捷方式属性,在“目标”后面加上--allow-文件访问从 - 文件,注意前面有个空格,重新打开浏览器即可。

如果还是不显示的话请用火狐浏览器。

--------------------- 

作者:新生GIS 

来源:CSDN 

原文:https://blog.csdn.net/qq_41046162/article/details/80248281 

版权声明:本文为博主原创文章,转载请附上博文链接!

通过学习了一段时间的arcgis for js,让我来讲一下如何在arcgis for js加载百度地图。
加载的结果显示:




                                                                           地图


                                                                  影像 - 无标注


                                                                           影像 - 有标注
制作步骤:
首先,我是在学习了https://blog.csdn.net/gisshixisheng/article/details/44853709这篇文章,代码大多都是那里的,参数也都没错,但是复制过去还是打不开,这个之后我会讲的。
其次,就是_百度地图在柯林斯调用的有地图在切片,影像切片,以及道路等POI切片,我将之用TiledMapServiceLayer做了扩展,成了BDAnoLayer,BDVecLayer,BDimgLayer三个图层,其代码如下:(通俗的意思就是在html同目录的新建一个文件夹,然后建立三个JavaScript文件分别是BDAnoLayer,BDVecLayer,BDImgLayer)
BDAnoLayer.js
define(["dojo/_base/declare",        "esri/layers/TiledMapServiceLayer",        "esri/geometry/Extent",        "esri/SpatialReference",        "esri/layers/TileInfo"    ], function (declare, TiledMapServiceLayer, Extent, SpatialReference, TileInfo) {        return declare(TiledMapServiceLayer, {            constructor: function () {                this.spatialReference = new SpatialReference({ wkid: 102100 });                this.initialExtent = (this.fullExtent = new Extent(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892, this.spatialReference));                this.scale = [591657527.591555,295828763.795777,147914381.897889,73957190.948944,36978595.474472,18489297.737236,9244648.868618,                    4622324.434309,2311162.217155,1155581.108577,577790.554289,288895.277144,144447.638572,72223.819286,                    36111.9096437,18055.9548224,9027.977411,4513.988705,2256.994353,1128.497176];                this.resolution = [156543.033928,78271.5169639999,39135.7584820001,19567.8792409999,9783.93962049996,4891.96981024998,2445.98490512499,                    1222.99245256249,611.49622628138,305.748113140558,152.874056570411,76.4370282850732,38.2185141425366,19.1092570712683,9.55462853563415,                    4.77731426794937,2.38865713397468,1.19432856685505,0.597164283559817,0.298582141647617];                this.tileInfo = new TileInfo({                    "rows": 256,                    "cols": 256,                    "compressionQuality": 90,                    "origin": {                        "x": -20037508.3427892,                        "y": 20037508.3427892                    },                    "spatialReference": this.spatialReference,                    "lods": [{ "level": 0, "resolution": this.resolution[0], "scale": this.scale[0] },                        { "level": 1, "resolution": this.resolution[1], "scale": this.scale[1] },                        { "level": 2, "resolution": this.resolution[2], "scale": this.scale[2] },                        { "level": 3, "resolution": this.resolution[3], "scale": this.scale[3] },                        { "level": 4, "resolution": this.resolution[4], "scale": this.scale[4] },                        { "level": 5, "resolution": this.resolution[5], "scale": this.scale[5] },                        { "level": 6, "resolution": this.resolution[6], "scale": this.scale[6] },                        { "level": 7, "resolution": this.resolution[7], "scale": this.scale[7] },                        { "level": 8, "resolution": this.resolution[8], "scale": this.scale[8] },                        { "level": 9, "resolution": this.resolution[9], "scale": this.scale[9] },                        { "level": 10, "resolution": this.resolution[10], "scale": this.scale[10] },                        { "level": 11, "resolution": this.resolution[11], "scale": this.scale[11] },                        { "level": 12, "resolution": this.resolution[12], "scale": this.scale[12] },                        { "level": 13, "resolution": this.resolution[13], "scale": this.scale[13] },                        { "level": 14, "resolution": this.resolution[14], "scale": this.scale[14] },                        { "level": 15, "resolution": this.resolution[15], "scale": this.scale[15] },                        { "level": 16, "resolution": this.resolution[16], "scale": this.scale[16] },                        { "level": 17, "resolution": this.resolution[17], "scale": this.scale[17] },                        { "level": 18, "resolution": this.resolution[18], "scale": this.scale[18] },                        { "level": 19, "resolution": this.resolution[19], "scale": this.scale[19] }                    ]                });                this.loaded = true;                this.onLoad(this);            },            getTileUrl: function (level, row, col) {                var zoom = level - 1;                var offsetX = parseInt(Math.pow(2, zoom));                var offsetY = offsetX - 1;                var numX = col - offsetX, numY = (-row) + offsetY ;                var num = (col + row) % 8 + 1;                return "http://online" + num + ".map.bdimg.com/tile/?qt=tile&x="+numX+"&y="+numY+"&z="+level+"&styles=sl&udt=20180505";            }        });});BDVecLayer.js
define(["dojo/_base/declare",        "esri/layers/TiledMapServiceLayer",        "esri/geometry/Extent",        "esri/SpatialReference",        "esri/layers/TileInfo"    ], function (declare, TiledMapServiceLayer, Extent, SpatialReference, TileInfo) {        return declare(TiledMapServiceLayer, {            constructor: function () {                this.spatialReference = new SpatialReference({ wkid: 102100 });                this.initialExtent = (this.fullExtent = new Extent(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892, this.spatialReference));                this.scale = [591657527.591555,295828763.795777,147914381.897889,73957190.948944,36978595.474472,18489297.737236,9244648.868618,                    4622324.434309,2311162.217155,1155581.108577,577790.554289,288895.277144,144447.638572,72223.819286,                    36111.9096437,18055.9548224,9027.977411,4513.988705,2256.994353,1128.497176];                this.resolution = [156543.033928,78271.5169639999,39135.7584820001,19567.8792409999,9783.93962049996,4891.96981024998,2445.98490512499,                    1222.99245256249,611.49622628138,305.748113140558,152.874056570411,76.4370282850732,38.2185141425366,19.1092570712683,9.55462853563415,                    4.77731426794937,2.38865713397468,1.19432856685505,0.597164283559817,0.298582141647617];                this.tileInfo = new TileInfo({                    "rows": 256,                    "cols": 256,                    "compressionQuality": 90,                    "origin": {                        "x": -20037508.3427892,                        "y": 20037508.3427892                    },                    "spatialReference": this.spatialReference,                    "lods": [{ "level": 0, "resolution": this.resolution[0], "scale": this.scale[0] },                        { "level": 1, "resolution": this.resolution[1], "scale": this.scale[1] },                        { "level": 2, "resolution": this.resolution[2], "scale": this.scale[2] },                        { "level": 3, "resolution": this.resolution[3], "scale": this.scale[3] },                        { "level": 4, "resolution": this.resolution[4], "scale": this.scale[4] },                        { "level": 5, "resolution": this.resolution[5], "scale": this.scale[5] },                        { "level": 6, "resolution": this.resolution[6], "scale": this.scale[6] },                        { "level": 7, "resolution": this.resolution[7], "scale": this.scale[7] },                        { "level": 8, "resolution": this.resolution[8], "scale": this.scale[8] },                        { "level": 9, "resolution": this.resolution[9], "scale": this.scale[9] },                        { "level": 10, "resolution": this.resolution[10], "scale": this.scale[10] },                        { "level": 11, "resolution": this.resolution[11], "scale": this.scale[11] },                        { "level": 12, "resolution": this.resolution[12], "scale": this.scale[12] },                        { "level": 13, "resolution": this.resolution[13], "scale": this.scale[13] },                        { "level": 14, "resolution": this.resolution[14], "scale": this.scale[14] },                        { "level": 15, "resolution": this.resolution[15], "scale": this.scale[15] },                        { "level": 16, "resolution": this.resolution[16], "scale": this.scale[16] },                        { "level": 17, "resolution": this.resolution[17], "scale": this.scale[17] },                        { "level": 18, "resolution": this.resolution[18], "scale": this.scale[18] },                        { "level": 19, "resolution": this.resolution[19], "scale": this.scale[19] }                    ]                });                this.loaded = true;                this.onLoad(this);            },            getTileUrl: function (level, row, col) {                var zoom = level - 1;                var offsetX = parseInt(Math.pow(2, zoom));                var offsetY = offsetX - 1;                var numX = col - offsetX, numY = (-row) + offsetY ;                var num = (col + row) % 8 + 1;                return "http://online" + num + ".map.bdimg.com/tile/?qt=tile&x="+numX+"&y="+numY+"&z="+level+"&styles=pl&scaler=1&udt=20180505";            }        });});BDImgLayer.js
define(["dojo/_base/declare",        "esri/layers/TiledMapServiceLayer",        "esri/geometry/Extent",        "esri/SpatialReference",        "esri/layers/TileInfo"    ], function (declare, TiledMapServiceLayer, Extent, SpatialReference, TileInfo) {        return declare(TiledMapServiceLayer, {            constructor: function () {                this.spatialReference = new SpatialReference({ wkid: 102100 });                this.initialExtent = (this.fullExtent = new Extent(-20037508.3427892, -20037508.3427892, 20037508.3427892, 20037508.3427892, this.spatialReference));                this.scale = [591657527.591555,295828763.795777,147914381.897889,73957190.948944,36978595.474472,18489297.737236,9244648.868618,                    4622324.434309,2311162.217155,1155581.108577,577790.554289,288895.277144,144447.638572,72223.819286,                    36111.9096437,18055.9548224,9027.977411,4513.988705,2256.994353,1128.497176];                this.resolution = [156543.033928,78271.5169639999,39135.7584820001,19567.8792409999,9783.93962049996,4891.96981024998,2445.98490512499,                    1222.99245256249,611.49622628138,305.748113140558,152.874056570411,76.4370282850732,38.2185141425366,19.1092570712683,9.55462853563415,                    4.77731426794937,2.38865713397468,1.19432856685505,0.597164283559817,0.298582141647617];                this.tileInfo = new TileInfo({                    "rows": 256,                    "cols": 256,                    "compressionQuality": 90,                    "origin": {                        "x": -20037508.3427892,                        "y": 20037508.3427892                    },                    "spatialReference": this.spatialReference,                    "lods": [{ "level": 0, "resolution": this.resolution[0], "scale": this.scale[0] },                        { "level": 1, "resolution": this.resolution[1], "scale": this.scale[1] },                        { "level": 2, "resolution": this.resolution[2], "scale": this.scale[2] },                        { "level": 3, "resolution": this.resolution[3], "scale": this.scale[3] },                        { "level": 4, "resolution": this.resolution[4], "scale": this.scale[4] },                        { "level": 5, "resolution": this.resolution[5], "scale": this.scale[5] },                        { "level": 6, "resolution": this.resolution[6], "scale": this.scale[6] },                        { "level": 7, "resolution": this.resolution[7], "scale": this.scale[7] },                        { "level": 8, "resolution": this.resolution[8], "scale": this.scale[8] },                        { "level": 9, "resolution": this.resolution[9], "scale": this.scale[9] },                        { "level": 10, "resolution": this.resolution[10], "scale": this.scale[10] },                        { "level": 11, "resolution": this.resolution[11], "scale": this.scale[11] },                        { "level": 12, "resolution": this.resolution[12], "scale": this.scale[12] },                        { "level": 13, "resolution": this.resolution[13], "scale": this.scale[13] },                        { "level": 14, "resolution": this.resolution[14], "scale": this.scale[14] },                        { "level": 15, "resolution": this.resolution[15], "scale": this.scale[15] },                        { "level": 16, "resolution": this.resolution[16], "scale": this.scale[16] },                        { "level": 17, "resolution": this.resolution[17], "scale": this.scale[17] },                        { "level": 18, "resolution": this.resolution[18], "scale": this.scale[18] },                        { "level": 19, "resolution": this.resolution[19], "scale": this.scale[19] }                    ]                });                this.loaded = true;                this.onLoad(this);            },            getTileUrl: function (level, row, col) {                var zoom = level - 1;                var offsetX = parseInt(Math.pow(2, zoom));                var offsetY = offsetX - 1;                var numX = col - offsetX, numY = (-row) + offsetY ;                var num = (col + row) % 8 + 1;                return "http://shangetu" + num + ".map.bdimg.com/it/u=x="+numX+";y="+numY+";z="+level+";v=009;type=sate&fm=46&udt=20180505";            }        });});从上面的getTileUrl 可以看到,三者返回的URL的地址是没有有区别的,在上述的URL有可能失效,为了得到最新的地址,学习了那篇文章,我做了如下工作:
1,先用百度地图JS API调用并显示百度地图,代码如下:
<!DOCTYPE html>  <html>  <head>      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />      <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />      <style type="text/css">          body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}      </style>      <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=NkuwFBPlXG1uqPDsB9nK2nqpyLFF0SFV"></script>      <title>地图展示</title>  </head>  <body>  <div id="allmap"></div>  </body>  </html>  <script type="text/javascript">    // 百度地图API功能      var map = new BMap.Map("allmap");    // 创建Map实例      map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);  // 初始化地图,设置中心点坐标和地图级别      map.addControl(new BMap.MapTypeControl());   //添加地图类型控件      map.setCurrentCity("北京");          // 设置地图显示的城市 此项是必须设置的      map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放  </script>  你的密钥需要更改为百度API的密钥,有需要的要申请。
2,然后用chrome打开这个html,F12调试--NetWork--左边找一张切片,右边切换至预览面板


                                                                BDVecLayer.js(地图网址)


                                                                                BDImgLayer.js(影像链接)


                                                                                   BDAnoLayer.js(poi网址)
只需要将最后面的数字替换掉就行了,20180505。
3.将上面的三个JS调用到地图主页。
代码如下:
<!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">    <title>Baidu Map</title>    <link rel="stylesheet" href="https://js.arcgis.com/3.23/dijit/themes/tundra/tundra.css"/>    <link rel="stylesheet" href="https://js.arcgis.com/3.23/esri/css/esri.css">    <style>        html, body, #map {            height: 100%;            margin: 0;            padding: 0;        }        .base-map-ano{            position: absolute;            right: 0pt;            top:18pt;            background: #e6edf1;            border: #96aed1 1px solid;            padding: 4px 5px;            padding-left: 0px;            padding-top: 0px;            display: none;            font-weight: normal;        }        .base-map{            position: absolute;            right: 15pt;            top:15pt;            background: #f0f0f0;            border: #96aed1 1px solid;            width: auto;            height: auto;            z-index: 99;            font:normal 11px "宋体",Arial;            color:#868686;        }        .base-map-switch{            padding: 4px 8px;            float: left;        }        .base-map-switch-active{            background:#e6edf1;            font-weight: bold;            color: #4d4d4d;        }        .base-map-switch:hover{            cursor: pointer;        }        .base-map-switch-center{            border: 1px #96aed1 solid;            border-top:none;            border-bottom:none;        }    </style>    <script type="text/javascript">        dojoConfig = {            parseOnLoad: true,            packages: [{                name: 'bdlib',                location: this.location.pathname.replace(/\/[^/]+$/, "")+"/js"            }]        };    </script><script src="https://js.arcgis.com/3.23/"></script>    <script src="js/jquery-1.8.3.js"></script>    <script>        var map,showMap,anoCtrl;        require(["esri/map",                "bdlib/BDVecLayer",                "bdlib/BDImgLayer",                "bdlib/BDAnoLayer",                "esri/layers/FeatureLayer",                "esri/geometry/Point",                "esri/SpatialReference",                "dojo/domReady!"],            function (Map,                      BDVecLayer,                      BDImgLayer,                      BDAnoLayer,                      FeatureLayer,                      Point,                      SpatialReference            ){                map = new Map("map", {                    logo: false                });                var vecMap = new BDVecLayer();                var imgMap = new BDImgLayer();                var anoMap = new BDAnoLayer();                map.addLayer(vecMap);                map.addLayers([imgMap,anoMap]);                imgMap.hide();                anoMap.hide();                 var pt = new Point(7038512.810510807, 2629489.7975553474, new SpatialReference({ wkid: 102100 }));                map.centerAndZoom(pt, 5);                 showMap = function(layer){                    //设置按钮样式                    var baseMap = ["vec","img"];                    for(var i= 0, dl=baseMap.length;i<dl;i++){                        $("#"+baseMap[i]).removeClass("base-map-switch-active");                    }                    $("#"+layer).addClass("base-map-switch-active");                    //设置显示地图                    switch(layer){                        case "img":{//影像                            vecMap.hide();                            imgMap.show();                            $("#ano").show();                            break;                        }                        default :{//地图                            vecMap.show();                            imgMap.hide();                            anoMap.hide();                            $("#ano").hide();                            $("#chkAno").attr("checked",false);                            break;                        }                    }                };                anoCtrl = function(){                    if($("#chkAno").prop("checked")){                        anoMap.show();                    }                    else{                        anoMap.hide();                    }                }            });    </script></head><body><div id="map">    <div class="base-map">        <div id="vec" class="base-map-switch base-map-switch-active" onclick="showMap('vec')">地图</div>        <div id="img" class="base-map-switch base-map-switch-center"  onclick="showMap('img')">影像            <div id="ano" class="base-map-ano">                <input id="chkAno" type="checkbox" name="chkAno" value="chkAno" onchange="anoCtrl()"/>标注            </div>        </div>    </div></div></body></html>
其中的jQuery-1.8.3.js的代码可以自己百度下,然后放到JS文件夹下面。全部代码下载链接:下载链接最后建议先用火狐浏览器打开这个baidumap,显示偏移的话可能是代码错了.google浏览器要改一下,需要配置google chrome支持本地(file协议)的AJAX请求:设置浏览器的快捷方式属性,在“目标”后面加上--allow-文件访问从 - 文件,注意前面有个空格,重新打开浏览器即可。如果还是不显示的话请用火狐浏览器。--------------------- 作者:新生GIS 来源:CSDN 原文:https://blog.csdn.net/qq_41046162/article/details/80248281 版权声明:本文为博主原创文章,转载请附上博文链接!

posted on 2019-06-15 20:15  lui  阅读(2307)  评论(0编辑  收藏  举报