arcgis模块化开发之vue.js

个人博客迁移到biubu.cn,此处停更.请移步。

说明 :

项目环境是用 vue-cli 搭建的vue项目;在项目中使用vue 配合 arcgis开发;加载的地图为天地图

1.项目环境搭建 :

  • 1.1 这里不在废话,如果会用vue;就会用vue-cli;直接用命令vue init webpack 生成就好了.
  • 1.2 安装 esri-loader;这个也是arcgis官方开发的,用命令npm install --save esri-loader安装就行了;详细文档参考这里
  • 1.3 在vue的script标签中用import的方式引入esri-loader :
import esriLoader from 'esri-loader';
  • 1.4 然后加载 css js 等资源:
   esriLoader.loadScript ({ // 加载js
        url: 'http://jsapi.thinkgis.cn/dojo/dojo.js'
   });
        // 加载css
   esriLoader.loadCss ('http://jsapi.thinkgis.cn/esri/css/esri.css');
        // 加载模块
   esriLoader.loadModules ([
            'esri/map',
            'esri/layers/TiledMapServiceLayer',
            'esri/SpatialReference',
            'esri/geometry/Extent',
            'esri/layers/TileInfo',
            'esri/geometry/Point',
            'esri/symbols/PictureMarkerSymbol',
            'esri/layers/FeatureLayer',
            'esri/tasks/LengthsParameters',
            'esri/tasks/AreasAndLengthsParameters',
            'esri/tasks/GeometryService',
            'esri/toolbars/draw',
            'esri/InfoTemplate',
            'esri/graphic',
            'esri/layers/GraphicsLayer'
    ])
   .then (this.loading)
   .then (obj => {
       this.initMap (obj);
   })
   .catch ((err) => {
       console.log (err.message);
   });

esri-loader支持Promise;所以可以直接使用then方法;这里使用了Promise的链式调用;模块加载完了,就要加载天地图了,官方的地图不是天地图;所以只能自己加载: 就是上面this.loading方法:

            loading ([
                             Map,
                             TiledMapServiceLayer,
                             SpatialReference,
                             Extent,
                             TileInfo,
                             Point,
                             PictureMarkerSymbol,
                             FeatureLayer,
                             LengthsParameters,
                             AreasAndLengthsParameters,
                             GeometryService,
                             Draw,
                             InfoTemplate,
                             Graphic,
                             GraphicsLayer
                         ]) {
                    console.log ('loading');
                    dojo.declare ('TDT', TiledMapServiceLayer, {
            
                        constructor (maptype) {
                            this._maptype = maptype;
                            this.spatialReference = new SpatialReference ({ wkid: 4326 });
                            // this.initialExtent = (this.fullExtent = new Extent (97.83, 21.48, 105.60, 29,
                            //     this.spatialReference));
                            this.initialExtent = (this.fullExtent = new Extent (-180, -90, 180, 90,
                                this.spatialReference));
            
                            this.tileInfo = new TileInfo ({
                                'rows': 256,
                                'cols': 256,
                                'dpi': 300,
                                'format': 'PNG32',
                                'compressionQuality': 0,
                                'origin': {
                                    'x': -180,
                                    'y': 90
                                },
                                'spatialReference': {
                                    'wkid': 4326
                                },
                                'lods': [ {
                                    'level': 2,
                                    'resolution': 0.3515625,
                                    'scale': 147748796.52937502
                                }, {
                                    'level': 3,
                                    'resolution': 0.17578125,
                                    'scale': 73874398.264687508
                                }, {
                                    'level': 4,
                                    'resolution': 0.087890625,
                                    'scale': 36937199.132343754
                                }, {
                                    'level': 5,
                                    'resolution': 0.0439453125,
                                    'scale': 18468599.566171877
                                }, {
                                    'level': 6,
                                    'resolution': 0.02197265625,
                                    'scale': 9234299.7830859385
                                }, {
                                    'level': 7,
                                    'resolution': 0.010986328125,
                                    'scale': 4617149.8915429693
                                }, {
                                    'level': 8,
                                    'resolution': 0.0054931640625,
                                    'scale': 2308574.9457714846
                                }, {
                                    'level': 9,
                                    'resolution': 0.00274658203125,
                                    'scale': 1154287.4728857423
                                }, {
                                    'level': 10,
                                    'resolution': 0.001373291015625,
                                    'scale': 577143.73644287116
                                }, {
                                    'level': 11,
                                    'resolution': 0.0006866455078125,
                                    'scale': 288571.86822143558
                                }, {
                                    'level': 12,
                                    'resolution': 0.00034332275390625,
                                    'scale': 144285.93411071779
                                }, {
                                    'level': 13,
                                    'resolution': 0.000171661376953125,
                                    'scale': 72142.967055358895
                                }, {
                                    'level': 14,
                                    'resolution': 8.58306884765625e-005,
                                    'scale': 36071.483527679447
                                }, {
                                    'level': 15,
                                    'resolution': 4.291534423828125e-005,
                                    'scale': 18035.741763839724
                                }, {
                                    'level': 16,
                                    'resolution': 2.1457672119140625e-005,
                                    'scale': 9017.8708819198619
                                }, {
                                    'level': 17,
                                    'resolution': 1.0728836059570313e-005,
                                    'scale': 4508.9354409599309
                                }, {
                                    'level': 18,
                                    'resolution': 5.3644180297851563e-006,
                                    'scale': 2254.4677204799655
                                } ]
                            });
                            this.loaded = true;
                            this.onLoad (this);
                        },
            
                        getTileUrl (level, row, col) {
                            return 'http://t' + col % 8 + '.tianditu.cn/' + this._maptype + '_c/wmts?' +
                                'SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=' + this._maptype +
                                '&STYLE=default&TILEMATRIXSET=c&TILEMATRIX=' +
                                level + '&TILEROW=' + row + '&TILECOL=' + col + '&FORMAT=tiles';
                        }
                    });
                    return {
                        Map,
                        TiledMapServiceLayer,
                        SpatialReference,
                        Extent,
                        TileInfo,
                        Point,
                        PictureMarkerSymbol,
                        FeatureLayer,
                        LengthsParameters,
                        AreasAndLengthsParameters,
                        GeometryService,
                        Draw,
                        TDT,
                        InfoTemplate,
                        Graphic,
                        GraphicsLayer,
                    };
                }

同样,到这里,天地图的加载就出来了,然后就是初始化地图了,就是initMap方法:

initMap(obj){
    this.mapObj = obj;// 将对象保存到vue data 的maoObj中,方便调用;
    let map = new this.mapObj.Map ('map', { logo: false });// 创建地图实例
    this.mapObj.map = map;
    // 调用地图类型切换
    this.mapType ();
    // this.switchers('hotSpot',true);
    var pt = new this.mapObj.Point (this.mapCenter.lon, this.mapCenter.lat); // 设置中心点
    this.mapObj.map.centerAndZoom (pt, this.mapCenter.zoom); // 设置中心点和缩放级别;
}

这里,天地图就加载完成了.应该就能看见地图了.如果有问题,就是初始值没设置,换成相应的地理坐标就行了,等有空了我自己在写个详细的demo.

如果看的懵懂,直接看demo:demo地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容