当前位置:   article > 正文

arcgis javascript api4.x加载天地图wgs84(wkid:4326)坐标系

arcgis javascript api4.x加载天地图wgs84(wkid:4326)坐标系

需求:

使用arcgis javascript api4.x以basetilelayer方式加载天地图wgs84(wkid:4326)坐标系

效果:

代码:

提示:(下述三个文件放同一个文件夹下)

4326.js

  1. define(['exports', 'esri/layers/support/TileInfo', 'esri/config'], function (
  2. exports,
  3. TileInfo,
  4. esriConfig
  5. ) {
  6. 'use strict'
  7. const lods = [
  8. {
  9. level: 1,
  10. levelValue: 1,
  11. resolution: 0.703125,
  12. scale: 295497593.05875003
  13. },
  14. {
  15. level: 2,
  16. levelValue: 2,
  17. resolution: 0.3515625,
  18. scale: 147748796.52937502
  19. },
  20. {
  21. level: 3,
  22. levelValue: 3,
  23. resolution: 0.17578125,
  24. scale: 73874398.264687508
  25. },
  26. {
  27. level: 4,
  28. levelValue: 4,
  29. resolution: 0.087890625,
  30. scale: 36937199.132343754
  31. },
  32. {
  33. level: 5,
  34. levelValue: 5,
  35. resolution: 0.0439453125,
  36. scale: 18468599.566171877
  37. },
  38. {
  39. level: 6,
  40. levelValue: 6,
  41. resolution: 0.02197265625,
  42. scale: 9234299.7830859385
  43. },
  44. {
  45. level: 7,
  46. levelValue: 7,
  47. resolution: 0.010986328125,
  48. scale: 4617149.8915429693
  49. },
  50. {
  51. level: 8,
  52. levelValue: 8,
  53. resolution: 0.0054931640625,
  54. scale: 2308574.9457714846
  55. },
  56. {
  57. level: 9,
  58. levelValue: 9,
  59. resolution: 0.00274658203125,
  60. scale: 1154287.4728857423
  61. },
  62. {
  63. level: 10,
  64. levelValue: 10,
  65. resolution: 0.001373291015625,
  66. scale: 577143.73644287116
  67. },
  68. {
  69. level: 11,
  70. levelValue: 11,
  71. resolution: 0.0006866455078125,
  72. scale: 288571.86822143558
  73. },
  74. {
  75. level: 12,
  76. levelValue: 12,
  77. resolution: 0.00034332275390625,
  78. scale: 144285.93411071779
  79. },
  80. {
  81. level: 13,
  82. levelValue: 13,
  83. resolution: 0.000171661376953125,
  84. scale: 72142.967055358895
  85. },
  86. {
  87. level: 14,
  88. levelValue: 14,
  89. resolution: 8.58306884765625e-5,
  90. scale: 36071.483527679447
  91. },
  92. {
  93. level: 15,
  94. levelValue: 15,
  95. resolution: 4.291534423828125e-5,
  96. scale: 18035.741763839724
  97. },
  98. {
  99. level: 16,
  100. levelValue: 16,
  101. resolution: 2.1457672119140625e-5,
  102. scale: 9017.8708819198619
  103. },
  104. {
  105. level: 17,
  106. levelValue: 17,
  107. resolution: 1.0728836059570313e-5,
  108. scale: 4508.9354409599309
  109. },
  110. {
  111. level: 18,
  112. levelValue: 18,
  113. resolution: 5.3644180297851563e-6,
  114. scale: 2254.4677204799655
  115. },
  116. {
  117. level: 19,
  118. levelValue: 19,
  119. resolution: 2.68220901489257815e-6,
  120. scale: 1127.23386023998275
  121. },
  122. {
  123. level: 20,
  124. levelValue: 2,
  125. resolution: 1.341104507446289075e-6,
  126. scale: 563.616930119991375
  127. }
  128. ]
  129. const tileInfo = new TileInfo({
  130. dpi: 90.71428571427429,
  131. rows: 256,
  132. cols: 256,
  133. format: 'image/png',
  134. compressionQuality: 0,
  135. origin: {
  136. x: -180,
  137. y: 90
  138. },
  139. spatialReference: {
  140. wkid: 4326
  141. },
  142. lods: lods
  143. })
  144. exports.tileInfo = tileInfo
  145. exports.lods = lods
  146. })

MyCustomTileLayer.js

  1. define(['exports', "esri/layers/BaseTileLayer","esri/request"], function (
  2. exports,
  3. BaseTileLayer,
  4. esriRequest
  5. ) {
  6. const MyCustomTileLayer = BaseTileLayer.createSubclass({
  7. // properties of the custom tile layer
  8. properties: {
  9. urlTemplate: null,
  10. },
  11. // override getTileUrl()
  12. // generate the tile url for a given level, row and column
  13. getTileUrl: function (level, row, col) {
  14. return this.urlTemplate.replace("{level}", level).replace("{col}", col).replace("{row}", row);
  15. },
  16. // This method fetches tiles for the specified level and size.
  17. // Override this method to process the data returned from the server.
  18. fetchTile: function (level, row, col, options) {
  19. // call getTileUrl() method to construct the URL to tiles
  20. // for a given level, row and col provided by the LayerView
  21. var url = this.getTileUrl(level, row, col);
  22. // request for tiles based on the generated url
  23. // the signal option ensures that obsolete requests are aborted
  24. return esriRequest(url, {
  25. responseType: "image",
  26. //signal: options && options.signal
  27. allowImageDataAccess: true
  28. })
  29. .then(function (response) {
  30. // when esri request resolves successfully
  31. // get the image from the response
  32. var image = response.data;
  33. var width = this.tileInfo.size[0];
  34. var height = this.tileInfo.size[0];
  35. // create a canvas with 2D rendering context
  36. var canvas = document.createElement("canvas");
  37. var context = canvas.getContext("2d");
  38. canvas.width = width;
  39. canvas.height = height;
  40. // Apply the tint color provided by
  41. // by the application to the canvas
  42. if (this.tint) {
  43. // Get a CSS color string in rgba form
  44. // representing the tint Color instance.
  45. context.fillStyle = this.tint.toCss();
  46. context.fillRect(0, 0, width, height);
  47. // Applies "difference" blending operation between canvas
  48. // and steman tiles. Difference blending operation subtracts
  49. // the bottom layer (canvas) from the top layer (tiles) or the
  50. // other way round to always get a positive value.
  51. context.globalCompositeOperation = "difference";
  52. }
  53. // Draw the blended image onto the canvas.
  54. context.drawImage(image, 0, 0, width, height);
  55. return canvas;
  56. }.bind(this));
  57. }
  58. });
  59. return MyCustomTileLayer;
  60. })

loadtdt4326.html

  1. <html>
  2. <head>
  3. <meta charset="utf-8" />
  4. <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no" />
  5. <title>(经纬度)天地图加载</title>
  6. <style>
  7. html,
  8. body,
  9. #viewDiv {
  10. width: 100%;
  11. height: 100%;
  12. padding: 0;
  13. margin: 0;
  14. }
  15. </style>
  16. <link rel="stylesheet" href="https://js.arcgis.com/4.23/esri/css/main.css" />
  17. <script src="https://js.arcgis.com/4.23/init.js"></script>
  18. <script>
  19. require(["esri/Map",
  20. "esri/views/MapView",
  21. "esri/layers/GraphicsLayer",
  22. "esri/Graphic",
  23. "esri/PopupTemplate",
  24. "esri/widgets/Popup",
  25. "esri/layers/MapImageLayer",
  26. "esri/widgets/Legend",
  27. "esri/layers/WebTileLayer",
  28. "esri/layers/WMTSLayer",
  29. "esri/widgets/BasemapGallery/support/LocalBasemapsSource",
  30. "esri/widgets/BasemapGallery",
  31. "esri/Basemap",
  32. "esri/layers/FeatureLayer",
  33. "esri/geometry/Extent",
  34. "esri/geometry/SpatialReference",
  35. 'esri/config',
  36. './4326.js',
  37. 'esri/layers/support/TileInfo',
  38. "./MyCustomTileLayer.js",
  39. "esri/layers/TileLayer",
  40. ], function(
  41. Map,
  42. MapView,
  43. GraphicsLayer,
  44. Graphic,
  45. PopupTemplate,
  46. Popup,
  47. MapImageLayer,
  48. Legend,
  49. WebTileLayer,
  50. WMTSLayer,
  51. LocalBasemapsSource,
  52. BasemapGallery,
  53. Basemap,
  54. FeatureLayer,
  55. Extent,
  56. SpatialReference,
  57. esriConfig,
  58. epsg4326,
  59. TileInfo,
  60. MyCustomTileLayer,
  61. TileLayer
  62. ) {
  63. var tileInfo = epsg4326.tileInfo;
  64. var key = "天地图key"
  65. key = "6a92e00bdfafade25568c053a5ba6de4"
  66. var tiledLayer = new MyCustomTileLayer({
  67. urlTemplate: "http://t0.tianditu.gov.cn/img_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles&TileMatrix={level}&TileCol={col}&TileRow={row}&tk=" +
  68. key,
  69. tileInfo: tileInfo,
  70. id: '影像',
  71. listMode: 'hide' //这个属性设置是为了在layerlist不显示出来
  72. });
  73. var tiledLayer_poi = new MyCustomTileLayer({
  74. urlTemplate: "http://t0.tianditu.gov.cn/cia_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles&TileMatrix={level}&TileCol={col}&TileRow={row}&tk=" +
  75. key,
  76. tileInfo: tileInfo,
  77. id: '影像标记',
  78. listMode: 'hide'
  79. });
  80. var tiledLayer1 = new MyCustomTileLayer({
  81. urlTemplate: "http://t0.tianditu.gov.cn/vec_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles&TileMatrix={level}&TileCol={col}&TileRow={row}&tk=" +
  82. key,
  83. tileInfo: tileInfo,
  84. id: '矢量',
  85. visible: false,
  86. listMode: 'hide'
  87. });
  88. var tiledLayer_poi1 = new MyCustomTileLayer({
  89. urlTemplate: "http://t0.tianditu.gov.cn/cva_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=c&FORMAT=tiles&TileMatrix={level}&TileCol={col}&TileRow={row}&tk=" +
  90. key,
  91. tileInfo: tileInfo,
  92. id: '矢量标记',
  93. visible: false,
  94. listMode: 'hide'
  95. });
  96. var basemap = new Basemap({
  97. baseLayers: [tiledLayer, tiledLayer_poi, tiledLayer1, tiledLayer_poi1],
  98. })
  99. var map = new Map({
  100. basemap: basemap
  101. });
  102. var view = new MapView({
  103. container: "viewDiv",
  104. map: map,
  105. spatialReference: {
  106. wkid: 4326
  107. },
  108. scale: tileInfo.lods[7],
  109. center: [114.3115879,30.5943680], //113.27434372047993,22.722786885699826
  110. linked: false,
  111. zoom:7,
  112. constraints: {
  113. lods: tileInfo.lods,
  114. minScale: tileInfo.lods[0].scale,
  115. maxScale: tileInfo.lods[19].scale
  116. },
  117. });
  118. // view.extent = new Extent({
  119. // xmin: 113.36595023855007,
  120. // ymin: 23.671927965183833,
  121. // xmax: 114.5628763484501,
  122. // ymax: 22.7009907263257,
  123. // spatialReference: {
  124. // wkid: 4326
  125. // }
  126. // });
  127. });
  128. </script>
  129. </head>
  130. <body class="calcite">
  131. <div id="viewDiv"></div>
  132. </body>
  133. </html>

参考资料:

https://www.cnblogs.com/hjyjack9563-bk/p/16067633.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/41360
推荐阅读
相关标签
  

闽ICP备14008679号