http://blog.csdn.net/gisshixisheng/article/details/47955787

概述:

本文讲述如何在OpenLayers中调用Arcgis Server切片并显示。

思路:

在OpenLayers中加载Arcgis Server切片用XYZ图层,Arcgis Server的切片调用地址我们可以看到如下:

可以看到,切片的请求地址为http://localhost:6080/arcgis/rest/services/china/MapServer/z/y/x,其中,z为缩放级别,x,y分别为改切片距离tileOrigin的行列号,其计算方式为:

  1. var res = this.getResolution();
  2. var originTileX = (this.tileOrigin.lon + (res * this.tileSize.w/2));
  3. var originTileY = (this.tileOrigin.lat - (res * this.tileSize.h/2));
  4. var center = bounds.getCenterLonLat();
  5. var point = { x: center.lon, y: center.lat };
  6. var x = (Math.round(Math.abs((center.lon - originTileX) / (res * this.tileSize.w))));
  7. var y = (Math.round(Math.abs((originTileY - center.lat) / (res * this.tileSize.h))));
  8. var z = this.map.getZoom();

将之封装为一个OpenLayers扩展类OpenLayers.Layer.AgsTileLayer,该类的代码方式为:

  1. OpenLayers.Layer.AgsTileLayer = OpenLayers.Class(OpenLayers.Layer.XYZ, {
  2. url: null,
  3. tileOrigin: null,
  4. tileSize: new OpenLayers.Size(256, 256),
  5. type: 'png',
  6. useScales: false,
  7. overrideDPI: false,
  8. initialize: function(name, url, options) {
  9. OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments);
  10. },
  11. getURL: function (bounds) {
  12. var res = this.getResolution();
  13. var originTileX = (this.tileOrigin.lon + (res * this.tileSize.w/2));
  14. var originTileY = (this.tileOrigin.lat - (res * this.tileSize.h/2));
  15. var center = bounds.getCenterLonLat();
  16. var point = { x: center.lon, y: center.lat };
  17. var x = (Math.round(Math.abs((center.lon - originTileX) / (res * this.tileSize.w))));
  18. var y = (Math.round(Math.abs((originTileY - center.lat) / (res * this.tileSize.h))));
  19. var z = this.map.getZoom();
  20. var url = this.url;
  21. var s = '' + x + y + z;
  22. if (OpenLayers.Util.isArray(url)) {
  23. url = this.selectUrl(s, url);
  24. }
  25. url = url + '/tile/${z}/${y}/${x}';
  26. url = OpenLayers.String.format(url, {'x': x, 'y': y, 'z': z});
  27. return OpenLayers.Util.urlAppend(
  28. url, OpenLayers.Util.getParameterString(this.params)
  29. );
  30. },
  31. CLASS_NAME: 'OpenLayers.Layer.AgsTileLayer'
  32. });

调用方式为:

  1. <script src="AgsTileLayer.js"></script>
  1. var tiled = new OpenLayers.Layer.AgsTileLayer( "AGSCache",
  2. "http://localhost:6080/arcgis/rest/services/china/MapServer", {
  3. isBaseLayer: true,
  4. tileSize: new OpenLayers.Size(256, 256),
  5. resolutions: [
  6. 0.07614275218656896,
  7. 0.03807137609328448,
  8. 0.01903568804664224,
  9. 0.00951784402332112,
  10. 0.00475892201166056
  11. ],
  12. tileOrigin: new OpenLayers.LonLat(-400 , 400),
  13. maxExtent: bounds,
  14. projection: 'EPSG:4326'
  15. });
  16. map.addLayers([tiled]);

代码中涉及到的参数可以从http://localhost:6080/arcgis/rest/services/china/MapServer?f=pjson返回的JSON数据中获取,如下:

    1. {
    2. "capabilities" : "Map,Query,Data",
    3. "copyrightText" : "",
    4. "currentVersion" : 10.110,
    5. "description" : "",
    6. "documentInfo" : {
    7. "AntialiasingMode" : "None",
    8. "Author" : "",
    9. "Category" : "",
    10. "Comments" : "",
    11. "Keywords" : "",
    12. "Subject" : "",
    13. "TextAntialiasingMode" : "Force",
    14. "Title" : ""
    15. },
    16. "fullExtent" : {
    17. "spatialReference" : {
    18. "latestWkid" : 4326,
    19. "wkid" : 4326
    20. },
    21. "xmax" : 134.9767976465060,
    22. "xmin" : 73.45100463562233,
    23. "ymax" : 53.53194315222358,
    24. "ymin" : 18.16324718764174
    25. },
    26. "initialExtent" : {
    27. "spatialReference" : {
    28. "latestWkid" : 4326,
    29. "wkid" : 4326
    30. },
    31. "xmax" : 138.0530872970502,
    32. "xmin" : 70.37471498507816,
    33. "ymax" : 55.85657468506156,
    34. "ymin" : 35.30335092712114
    35. },
    36. "layers" : [
    37. {
    38. "defaultVisibility" : true,
    39. "id" : 0,
    40. "maxScale" : 0,
    41. "minScale" : 0,
    42. "name" : "province",
    43. "parentLayerId" : -1,
    44. "subLayerIds" : null
    45. },
    46. {
    47. "defaultVisibility" : true,
    48. "id" : 1,
    49. "maxScale" : 0,
    50. "minScale" : 0,
    51. "name" : "bcity",
    52. "parentLayerId" : -1,
    53. "subLayerIds" : null
    54. },
    55. {
    56. "defaultVisibility" : true,
    57. "id" : 2,
    58. "maxScale" : 0,
    59. "minScale" : 0,
    60. "name" : "bcounty",
    61. "parentLayerId" : -1,
    62. "subLayerIds" : null
    63. }
    64. ],
    65. "mapName" : "Layers",
    66. "maxImageHeight" : 2048,
    67. "maxImageWidth" : 2048,
    68. "maxRecordCount" : 1000,
    69. "maxScale" : 1000000,
    70. "minScale" : 32000000,
    71. "serviceDescription" : "",
    72. "singleFusedMapCache" : true,
    73. "spatialReference" : {
    74. "latestWkid" : 4326,
    75. "wkid" : 4326
    76. },
    77. "supportedImageFormatTypes" : "PNG32,PNG24,PNG,JPG,DIB,TIFF,EMF,PS,PDF,GIF,SVG,SVGZ,BMP",
    78. "supportedQueryFormats" : "JSON, AMF",
    79. "supportsDynamicLayers" : false,
    80. "tables" : [],
    81. "tileInfo" : {
    82. "cols" : 256,
    83. "compressionQuality" : 0,
    84. "dpi" : 96,
    85. "format" : "PNG",
    86. "lods" : [
    87. {
    88. "level" : 0,
    89. "resolution" : 0.07614275218656896,
    90. "scale" : 32000000
    91. },
    92. {
    93. "level" : 1,
    94. "resolution" : 0.03807137609328448,
    95. "scale" : 16000000
    96. },
    97. {
    98. "level" : 2,
    99. "resolution" : 0.01903568804664224,
    100. "scale" : 8000000
    101. },
    102. {
    103. "level" : 3,
    104. "resolution" : 0.009517844023321120,
    105. "scale" : 4000000
    106. },
    107. {
    108. "level" : 4,
    109. "resolution" : 0.004758922011660560,
    110. "scale" : 2000000
    111. },
    112. {
    113. "level" : 5,
    114. "resolution" : 0.002379461005830280,
    115. "scale" : 1000000
    116. }
    117. ],
    118. "origin" : {
    119. "x" : -400,
    120. "y" : 400
    121. },
    122. "rows" : 256,
    123. "spatialReference" : {
    124. "latestWkid" : 4326,
    125. "wkid" : 4326
    126. }
    127. },
    128. "units" : "esriDecimalDegrees"
    129. }

(转)OL记载Arcgis Server切片的更多相关文章

  1. OL记载Arcgis Server切片

    概述: 本文讲述怎样在OpenLayers中调用Arcgis Server切片并显示. 思路: 在OpenLayers中载入Arcgis Server切片用XYZ图层,Arcgis Server的切片 ...

  2. ArcGIS Server开发教程系列(3)切片

    切片工作,我们可以一级一级的切,也可以,所有的一块切,Recreate All Tiles这项是说,在没有进行任何的切片工作时,可以选用这项:Recreate Empty Tiles这项是说,如果之前 ...

  3. ArcGIS Server较早版本切片迁移注意事项

    原创文章,转载须标明出处自: http://www.cnblogs.com/gisspace/p/8286838.html -------------------------------------- ...

  4. arcgis server 无法手动删除切片

    背景 问题 场景如下: 切片放置在专门的文件服务器上,通过unc共享路径对外共享.文件服务器的OS为windows server2008R2 想手动更新切片服务的切片.发现同一切片服务,有的比例级别文 ...

  5. ArcGIS Server 10.4切片图的制作与发布

    场景:有一张遥感卫星图,需要以切片图的形式发布 需要的资料:tif的格式遥感图像 发布步骤: 1.选择Service Editor-->Parameters-->Anti-Aliasing ...

  6. arcgis server地图服务切片(10.4.1)

    首先要发布地图服务,过程略 首先,熟悉arcgis server的人应该知道,最直接的切片方式操作方法是在“服务属性”中设置切片,但这种方式可操作性太差,很多设置无法实现,因此不推荐 下面正式开始,打 ...

  7. Arcgis, ArcEngine, Arcgis Server使用开发汇总 索引

    ArcGIS系列软件license及安装: Arcgis SDE10.1 和 Arcgis server10.1的授权文件license tnt_esri.dat Arcgis8.1安装license ...

  8. ArcGIS API for JavaScript(2)-ArcGIS Server发布要素图层服务

    1.前言 上一篇该系列的文章我们主要讲了一下基础Web地图搭建,这篇我们主要讲一下ArcGIS Server发布服务,并且如何调用服务.将自己的数据加载到Web地图当中来,实现Web端浏览数据. 2. ...

  9. ArcGIS Server开发教程系列(7)使用ArcGIS API for Javascript-Hello World

    ArcGIS API for Javascript  API下载地址:http://support.esrichina-bj.cn/2011/0223/960.html 选择最新的下载就好了,目前是3 ...

随机推荐

  1. RestEasy 用户指南----第7章 @HeaderParam

    转载说明出处:http://blog.csdn.net/nndtdx/article/details/6870391 原文地址 http://docs.jboss.org/resteasy/docs/ ...

  2. HDU - 3556 - Continued Fraction

    先上题目: Continued Fraction Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Jav ...

  3. [bzoj3339]Rmq Problem||[bzoj3585]mex_线段树

    Rmq Problem bzoj-3339||mex bzoj-3585 题目大意:给定一个长度为n的数列a,多次讯问区间l,r中最小的不属于集合{$A_l,A_{l+1}...A_r$}的非负整数. ...

  4. github在README中展示demo

    2017年更新,现在github再master分支直接就可以操作,所以我改了这篇文章   问题所在? 解决办法? 博主建议? 一:问题的所在 相信很多小胖友们在把自己的网页上传到github仓库中,都 ...

  5. 网站配置https(腾讯云域名操作)

    我们都知道http协议是超文本传输协议,早期的网站使用的都是http,但是并不安全,数据在传输过程中容易被拦截篡改.所以后面有了https,也就是经过ssl加密的http协议.本文主要对网站配置htt ...

  6. qt on android之GPS信号的获取

    0.      写在最前面 本人參考安晓辉大侠的一篇博文后.做了Qt on android的GSP相关的实验.为了后面不时之需.故而记录下来. 1.      Qt on Android GPS系统流 ...

  7. 2.2-VLAN间路由

    2.2-VLAN间路由     第一代LAN间的通信:     不支持VLAN的交换机:由一个路由器和几个交换机组成,每个交换机的所有端口都同属于一个网段/LAN:在路由器上有几个网段就有几个与之相对 ...

  8. 创建hive整合hbase的表总结

    [Author]: kwu 创建hive整合hbase的表总结.例如以下两种方式: 1.创建hive表的同步创建hbase的表 CREATE TABLE stage.hbase_news_compan ...

  9. DotNetBar.Bar作为容器使用的方法及Text更新原理

    DotNetBar.Bar作为容器使用的方法及Text更新原理                          老帅    一.容器用法   控件DevComponents.DotNetBar.Ba ...

  10. 为什么是kafka?

    MQ在分布式场景下的应用已经非常广泛了.可是在全部的MQ使用场景中,大多都要求不能丢消息.意味着必须有持久化的能力,传统行业经常使用的activemq.rabbitmq尽管有持久化能力,无奈的是性能太 ...