d6952e06ad3a657c5429c00539fa1d1aaf864e12.svn-base 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import TileLayer from 'ol/layer/Tile'
  2. import WMTS from 'ol/source/WMTS'
  3. import WMTSGrid from 'ol/tilegrid/WMTS'
  4. import {getWidth, getTopLeft} from 'ol/extent'
  5. import {get as getProjection} from 'ol/proj'
  6. const gjtdt_tk = "3a8f9b6a2962ca2c84a7b058b8e2957a";
  7. const sdtdt_tk = "a411d823abe2c0412d7f551ce986db7a";
  8. const layerOpacity_default = 1;
  9. const layerVisible_default = true;
  10. let imgLayer;
  11. let vecLayer;
  12. let sdtdt_vec;
  13. let sdtdt_img;
  14. let sdtdt_cia;
  15. let maps = [];
  16. export function getWMTSGrid(proj) {
  17. const tileSizePixels = 256;
  18. const projection = getProjection(proj)
  19. const projectionExtent = projection.getExtent();
  20. const size = getWidth(projectionExtent) / tileSizePixels
  21. const matrixIds = [];
  22. const resolutions = [];
  23. for (let i = 0; i <= 20; i++) {
  24. matrixIds[i] = i;
  25. resolutions[i] = size / Math.pow(2, i);
  26. }
  27. return new WMTSGrid({
  28. origin: getTopLeft(projectionExtent),
  29. resolutions: resolutions,
  30. matrixIds: matrixIds
  31. });
  32. }
  33. export function createTDTWMTSLayer(type, proj, opacity, visible) {
  34. let layerOpacity = opacity ? opacity : layerOpacity_default;
  35. let layerVisible = visible ? visible : layerVisible_default;
  36. let projection = getProjection(proj);
  37. if (!projection) {
  38. return null;
  39. }
  40. const tileGrid = getWMTSGrid(proj);
  41. let layer = new TileLayer({
  42. opacity: layerOpacity,
  43. preload: Infinity,
  44. source: new WMTS({
  45. url: 'http://t' + Math.round(Math.random() * 7) + '.tianditu.gov.cn/' + type + '/wmts?tk=' + gjtdt_tk,
  46. // url: 'http://t' + Math.round(Math.random() * 7) + '.tianditu.com/' + type + '/wmts?tk=' + gjtdt_tk,
  47. layer: type.substr(0, 3),
  48. matrixSet: type.substring(4),
  49. format: 'tiles',
  50. projection: projection,
  51. tileGrid: tileGrid,
  52. style: 'default',
  53. wrapX: true
  54. }),
  55. visible: layerVisible
  56. });
  57. layer.id = type;
  58. return layer;
  59. }
  60. export function createSDTDTWMTSLayer(url, type, proj, opacity, visible) {
  61. let projection = getProjection(proj);
  62. if (!projection) {
  63. return null;
  64. }
  65. const tileGrid = getWMTSGrid(proj);
  66. let layer = new TileLayer({
  67. opacity: opacity,
  68. source: new WMTS({
  69. url: url,
  70. layer: type,
  71. style: "default",
  72. matrixSet: proj,
  73. // projection: projection,
  74. format: "image/png",
  75. tileGrid: tileGrid,
  76. wrapX: true
  77. }),
  78. visible: visible
  79. });
  80. layer.id = type;
  81. return layer;
  82. }
  83. export function loadBaseLayer(map, defaultType) {
  84. //国家天地图影像
  85. imgLayer = createTDTWMTSLayer("img_c", "EPSG:4490", 1, false);
  86. //国家天地图矢量
  87. vecLayer = createTDTWMTSLayer("vec_c", "EPSG:4490", 1, true);
  88. //山东天地图矢量(带注记)
  89. sdtdt_vec = createSDTDTWMTSLayer("http://www.sdmap.gov.cn/tileservice/SDPubMap?tk="+ sdtdt_tk,"sdvec", "EPSG:4490", 1, true);
  90. //山东天地图影像
  91. sdtdt_img = createSDTDTWMTSLayer("http://www.sdmap.gov.cn/tileservice/SdRasterPubMap?tk="+ sdtdt_tk, "sdimg", "EPSG:4490", 1, false);
  92. //山东天地图影像注记
  93. sdtdt_cia = createSDTDTWMTSLayer("http://www.sdmap.gov.cn/tileservice/SDRasterPubMapDJ?tk="+ sdtdt_tk, "sdcia", "EPSG:4490", 1, false);
  94. map.addLayer(imgLayer);
  95. map.addLayer(vecLayer);
  96. map.addLayer(sdtdt_vec);
  97. map.addLayer(sdtdt_img);
  98. map.addLayer(sdtdt_cia);
  99. let layers = {name: map.getTarget(), imgLayer, vecLayer, sdtdt_vec, sdtdt_cia, sdtdt_img};
  100. maps.push(layers);
  101. }
  102. //右下角地图切换点击矢量图事件
  103. export function vecMapClick(name) {
  104. maps.forEach((item) => {
  105. if (item.name === name) {
  106. item.imgLayer.setVisible(false);
  107. item.vecLayer.setVisible(true);
  108. item.sdtdt_vec.setVisible(true);
  109. item.sdtdt_img.setVisible(false);
  110. item.sdtdt_cia.setVisible(false);
  111. }
  112. })
  113. }
  114. //右下角地图切换点击影像图事件
  115. export function imgMapClick(name) {
  116. maps.forEach((item) => {
  117. if (item.name === name) {
  118. item.imgLayer.setVisible(true);
  119. item.vecLayer.setVisible(false);
  120. item.sdtdt_vec.setVisible(false);
  121. item.sdtdt_img.setVisible(true);
  122. item.sdtdt_cia.setVisible(true);
  123. }
  124. })
  125. }