【ArcGis for javascript从零开始】之一 ArcGis加载天地图

原文:【ArcGis for javascript从零开始】之一 ArcGis加载天地图

最近做项目需要用到ArcGis来进行数据展示和数据分析。以前从来没有接触过与Gis有关的东西,一切需要从头开始学。没有时间从头系统地学习了,只能用到哪个学习哪里了,本系列只是对学习的路径进行记录。ArcGis在网上没有找到中文的API,只有官网的英文API和Demo,而且用到了大量dojo的API,dojo也没有接触过,这方面也是需要学习的……

 

一、ArcGis加载

引入css 和js

 

[html] view plain copy

 

  1. <link rel= "stylesheet" href ="https://js.arcgis.com/3.15/esri/css/esri.css">  
  2. <script src= "https://js.arcgis.com/3.15/" ></script>  

 html

 

[html] view plain copy

 

  1. <div id= "map" ></div>  

初始化地图

 

 

[javascript] view plain copy

 

  1. require(["esri/map", "dojo/domReady!" ], function(Map) {  
  2. <span style="white-space:pre">    </span>var map = new Map("map" , {  
  3. <span style="white-space:pre">        </span>center: [-118, 34.5],  
  4. <span style="white-space:pre">        </span>zoom: 8,  
  5. <span style="white-space:pre">        </span>basemap: "topo"  
  6.  <span style="white-space:pre">   </span>});  
  7. });  

 

以上代码为ArcGis首页上的demo,是最简单的地图了。地图上什么多余的功能都没有……

     显示的效果是这样子的↓↓↓

 

二、加载天地图

能显示出地图了,很好,下一步是加载天地图了!上面那个地图全是英文的,我们给客户就不能用这样式的,而且还因为给特殊用户做的,所以只能暂时选定天地图了。哎,废话就不多说了。

     在ArcGis的Sample Code中,有一个叫做Dynamic Layers的示例,动态图层。我理解的是地图中就一层一层的,底层是地图,上面可以覆盖上其他的标注,再往上可以是描的点,and so on……这个我在后面研究散点的时候有了更深刻的体会,散点下次再说。

     扯远了,再扯回来,那个动态图层的Sample Code地址,加载两个动态图层:点我打开官方demo

[javascript] view plain copy

 

  1. //加载天地图  
  2. var baseMap = new WebTiledLayer("http://\${subDomain}.tianditu.com/DataServer?T=vec_c&X=\${col}&Y=\${row}&L=\${level}" , {  
  3. <span style="white-space:pre">    </span>"copyright" : "Tianditu",  
  4. <span style="white-space:pre">    </span>"id": "Tianditu" ,  
  5. <span style="white-space:pre">    </span>"subDomains" : ["t0", "t1", "t2" ]  
  6. });  
  7. map.addLayer(baseMap);  

我按照他们的代码,显示出来的是一片空白的屏幕。

这个原因是ArcGis与天地图采用的是两套投影体系,这样直接搬过来是没有什么用的。需要加上一些配置。↓↓↓

[javascript] view plain copy

 

  1. <span style="white-space:pre">    </span>var tileInfo = new esri.layers.TileInfo({  
  2.                 "rows" : 256,  
  3.                 "cols" : 256,  
  4.                 "compressionQuality" : 0,  
  5.                 "origin" : {  
  6.                     "x" : -180,  
  7.                     "y" : 90  
  8.                 },  
  9.                 "spatialReference" : {  
  10.                     "wkid" : 4326  
  11.                 },  
  12.                 "lods" : [  
  13.                 {  
  14.                     "level" : 2,  
  15.                     "resolution" : 0.3515625,  
  16.                     "scale" : 147748796.52937502  
  17.                 },  
  18.   
  19.                 {  
  20.                     "level" : 3,  
  21.                     "resolution" : 0.17578125,  
  22.                     "scale" : 73874398.264687508  
  23.                 },  
  24.   
  25.                 {  
  26.                     "level" : 4,  
  27.                     "resolution" : 0.087890625,  
  28.                     "scale" : 36937199.132343754  
  29.                 },  
  30.   
  31.                 {  
  32.                     "level" : 5,  
  33.                     "resolution" : 0.0439453125,  
  34.                     "scale" : 18468599.566171877  
  35.                 },  
  36.   
  37.                 {  
  38.                     "level" : 6,  
  39.                     "resolution" : 0.02197265625,  
  40.                     "scale" : 9234299.7830859385  
  41.                 },  
  42.   
  43.                 {  
  44.                     "level" : 7,  
  45.                     "resolution" : 0.010986328125,  
  46.                     "scale" : 4617149.8915429693  
  47.                 },  
  48.   
  49.                 {  
  50.                     "level" : 8,  
  51.                     "resolution" : 0.0054931640625,  
  52.                     "scale" : 2308574.9457714846  
  53.                 },  
  54.   
  55.                 {  
  56.                     "level" : 9,  
  57.                     "resolution" : 0.00274658203125,  
  58.                     "scale" : 1154287.4728857423  
  59.                 },  
  60.   
  61.                 {  
  62.                     "level" : 10,  
  63.                     "resolution" : 0.001373291015625,  
  64.                     "scale" : 577143.73644287116  
  65.                 },  
  66.   
  67.                 {  
  68.                     "level" : 11,  
  69.                     "resolution" : 0.0006866455078125,  
  70.                     "scale" : 288571.86822143558  
  71.                 },  
  72.   
  73.                 {  
  74.                     "level" : 12,  
  75.                     "resolution" : 0.00034332275390625,  
  76.                     "scale" : 144285.93411071779  
  77.                 },  
  78.   
  79.                 {  
  80.                     "level" : 13,  
  81.                     "resolution" : 0.000171661376953125,  
  82.                     "scale" : 72142.967055358895  
  83.                 },  
  84.   
  85.                 {  
  86.                     "level" : 14,  
  87.                     "resolution" : 8.58306884765625e-005,  
  88.                     "scale" : 36071.483527679447  
  89.                 },  
  90.   
  91.                 {  
  92.                     "level" : 15,  
  93.                     "resolution" : 4.291534423828125e-005,  
  94.                     "scale" : 18035.741763839724  
  95.                 },  
  96.   
  97.                 {  
  98.                     "level" : 16,  
  99.                     "resolution" : 2.1457672119140625e-005,  
  100.                     "scale" : 9017.8708819198619  
  101.                 },  
  102.   
  103.                 {  
  104.                     "level" : 17,  
  105.                     "resolution" : 1.0728836059570313e-005,  
  106.                     "scale" : 4508.9354409599309  
  107.                 },  
  108.   
  109.                 {  
  110.                     "level" : 18,  
  111.                     "resolution" : 5.3644180297851563e-006,  
  112.                     "scale" : 2254.4677204799655  
  113.                 }  
  114.                 ]  
  115.             });  

又长又难看,强迫症表示忍不了,每一个页面都有写之么长一段,好烦,我给拿到一个单独的js里了。

这样, 天地图的图层需要加上这么一句,见下面代码加粗部分:

[javascript] view plain copy

 

  1. <span style="white-space:pre">    </span>var baseMap = new WebTiledLayer("http://\${subDomain}.tianditu.com/DataServer?T=vec_c&X=\${col}&Y=\${row}&L=\${level}" , {  
  2.                 "copyright" : "Tianditu",  
  3.                 "id": "Tianditu" ,  
  4.                 "subDomains" : ["t0", "t1", "t2" ],  
  5.                 <strong>"tileInfo" :tileInfo</strong>  
  6.             });  

     这样显示出来是下面的样子,好一片蔚蓝的大海。

我们把地图缩小一下再看:

地图上是没有标注的,这个就需要再加载一个再标注的图层才可以的。

[javascript] view plain copy

 

  1. //底图标注  
  2.             var baseMapMarker = new WebTiledLayer("http://\${subDomain}.tianditu.com/DataServer?T=cva_c&X=\${col}&Y=\${row}&L=\${level}" , {  
  3.                 "copyright" : "Tianditu",  
  4.                 "id": "Tianditu2" ,  
  5.                 "subDomains" : ["t0", "t1", "t2" ],  
  6.                 "tileInfo" :tileInfo  
  7.             });  
  8.             map.addLayer(baseMapMarker);  

显示效果变成这个样子:

 

这样基本就完工喽,最后设置一下初始的中心位置和缩放比例吧,我们就以我们的首都为例吧:

[javascript] view plain copy

 

  1. <span style="white-space:pre">    </span>map.centerAndZoom(new esri.geometry.Point({  
  2.                 "x": 116.40969,  
  3.                 "y": 39.89945,  
  4.                 "spatialReference": {  
  5.                     "wkid": 4326  
  6.                 }  
  7.             }),12);  

最终效果,至于显示div的样式,铺满全屏什么的,这就是CSS的问题了,不多说了,上一张完工图:

 

我写的demo,html版的,可以稍微借鉴一下吧 ^_^ 点我下载

 

学习是一个很复杂的过程,把这个学习研究的过程讲出来,也挺累的……好了,本宝宝该接着上班了。

下集预告:安装部署引入本地ArcGis

时间: 2024-10-03 20:58:29

【ArcGis for javascript从零开始】之一 ArcGis加载天地图的相关文章

响应式JavaScript:在需要时加载JS

文章简介:与之前我们在前端加载全部javascript相比,为什么我们不加载最少量的JavaScript然后在用户界面需要的时候再加载额外的JavaScript代码呢? 一年前我做了一个关于这个主题的演讲.我第一次关注这个技术是因为 @dhh发布的他们在 37signals使用的一些观点.我注意到他们 在模板视图里如何使用JavaScript,动态生成JavaScript这是它的关注点,这引起了我的思考. 与之前我们在前端加载全部javascript相比,为什么我们不加载最少量的JavaScri

javascript 文件的同步加载与异步加载

原文:[转载]javascript 文件的同步加载与异步加载   HTML 4.01 的script属性 charset: 可选.指定src引入代码的字符集,大多数浏览器忽略该值. defer: boolean, 可选.延迟脚本执行,相当于将script标签放入页面body标签的底部,js脚本会在document的DOMContentLoaded之前执行.除IE和较新版本的Firefox外,其他浏览器并未支持. language: 已废弃.大部分浏览器会忽略该值. src: 可选.指定引入的外部

javascript判断图片是否加载完成的方法推荐_javascript技巧

load事件 <script type="text/javascript"> $('img').onload = function() { //code } </script> 优点:简单易用,不影响HTML代码. 缺点:只能指定一个元素,javascipt代码必须置于图片元素的下方 jquery方法 <script type="text/javascript"> $(function(){ $('.pic1').each(fun

跟我学习javascript的异步脚本加载_javascript技巧

先来看这行代码: <script src = "allMyClientSideCode.js"></script> 这有点儿--不怎么样."这该放在哪儿?"开发人员会奇怪,"靠上点,放到<head>标签里?还是靠下点,放到<body>标签里?"这两种做法都会让富脚本站点的下场很凄惨.<head>标签里的大脚本会滞压所有页面渲染工作,使得用户在脚本加载完毕之前一直处于"白屏死机&

JavaScript实现图片懒加载(Lazyload)_javascript技巧

懒加载的意义(为什么要使用懒加载) 对页面加载速度影响最大的就是图片,一张普通的图片可以达到几M的大小,而代码也许就只有几十KB.当页面图片很多时,页面的加载速度缓慢,几S钟内页面没有加载完成,也许会失去很多的用户. 所以,对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载.这样子对于页面加载性能上会有很大的提升,也提高了用户体验. 原理 将页面中的img标签src指向一张小图片或者src为空,然后定义data

原生javaScript实现图片延时加载的方法_javascript技巧

本文实例讲述了原生javaScript实现图片延时加载的方法.图片延时加载其实是有jquery插件了并且加载方法非常的简单并且合理了,但有朋友觉得加载jquery插件包太大了,于时自己写了一个,给各位分享一下. 首先,图片延时加载可以节省我们带宽,获取到更好的用户体验,尤其对于图片多的站点,这一点显得至关重要,下面就跟大家探讨一下图片延时加载原理和实现代码. 图片延时加载原理 图片延时加载原理是在html里面的图片src填的并不是真正的图片地址,而是以一种自定义属性把图片地址赋给img标签,如:

JavaScript实现当网页加载完成后执行指定函数的方法_javascript技巧

本文实例讲述了JavaScript实现当网页加载完成后执行指定函数的方法.分享给大家供大家参考.具体分析如下: 下面的JS代码演示了如何在网页加载完成时调用指定的函数,并且可以通过第二段代码动态添加多个函数同时执行. 我们只需要给window.onload指定一个函数既可以在页面加载完成时自动执行MyCoolInitFunc函数 <script type="text/javascript" > window.onload = MyCoolInitFunc </scri

JavaScript 模块的循环加载实现方法_javascript技巧

"循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本. // a.js var b = require('b'); // b.js var a = require('a'); 通常,"循环加载"表示存在强耦合,如果处理不好,还可能导致递归加载,使得程序无法执行,因此应该避免出现. 但是实际上,这是很难避免的,尤其是依赖关系复杂的大项目,很容易出现a依赖b,b依赖c,c又依赖a这样的情况.这意味着,模块加载机

JavaScript 模块的循环加载

"循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本. // a.js var b = require('b'); // b.js var a = require('a'); 通常,"循环加载"表示存在强耦合,如果处理不好,还可能导致递归加载,使得程序无法执行,因此应该避免出现. 但是实际上,这是很难避免的,尤其是依赖关系复杂的大项目,很容易出现a依赖b,b依赖c,c又依赖a这样的情况.这意味着,模块加载机