EchartsLayer.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. !(function () {
  2. function EchartsLayer(viewer) {
  3. this._viewer = viewer;
  4. registerMap(this);
  5. createChart(this);
  6. resize(this);
  7. }
  8. Object.defineProperties(EchartsLayer.prototype, {
  9. chart: {
  10. get: function () {
  11. return this._chart;
  12. }
  13. }
  14. })
  15. function registerMap(layer) {
  16. if (!SuperMap3D.defined(echarts)) {
  17. throw new SuperMap3D.DeveloperError("echarts is undefined.");
  18. }
  19. echarts.registerCoordinateSystem("GLMap", getCoordinateSystem(layer._viewer)),
  20. echarts.registerAction({
  21. type: "GLMapRoam",
  22. event: "GLMapRoam",
  23. update: "updateLayout"
  24. }, function (t, e) {
  25. }),
  26. echarts.extendComponentModel({
  27. type: "GLMap",
  28. defaultOption: {roam: !1}
  29. });
  30. echarts.extendComponentView({
  31. type: "GLMap",
  32. init: function (t, e) {
  33. this.api = e;
  34. layer._viewer.scene.postRender.addEventListener(this.moveHandler, this)
  35. },
  36. moveHandler: function (t, e) {
  37. this.api.dispatchAction({
  38. type: "GLMapRoam"
  39. });
  40. },
  41. render: function (t, e, i) {
  42. },
  43. dispose: function (t) {
  44. layer._viewer.scene.postRender.removeEventListener(this.moveHandler, this)
  45. }
  46. });
  47. }
  48. function createChart(layer) {
  49. var scene = layer._viewer.scene;
  50. scene.canvas.setAttribute("tabIndex", 0);
  51. var ele = document.createElement('div');
  52. ele.style.position = "absolute";
  53. ele.style.top = "0px";
  54. ele.style.left = "0px";
  55. ele.style.width = scene.canvas.width + "px";
  56. ele.style.height = scene.canvas.height + "px";
  57. ele.style.pointerEvents = "none";
  58. ele.setAttribute("id", "echarts");
  59. ele.setAttribute("class", "echartMap");
  60. layer._viewer.container.appendChild(ele);
  61. layer._echartsContainer = ele;
  62. layer._chart = echarts.init(ele);
  63. }
  64. function resize(layer) {
  65. window.onresize = function () {
  66. var scene = layer._viewer.scene;
  67. layer._echartsContainer.style.width = scene.canvas.style.width + "px";
  68. layer._echartsContainer.style.height = scene.canvas.style.height + "px";
  69. layer._chart.resize();
  70. }
  71. }
  72. EchartsLayer.prototype.isDestroyed = function () {
  73. return false;
  74. };
  75. EchartsLayer.prototype.destroy = function () {
  76. if (this._echartsContainer) {
  77. this._viewer.container.removeChild(this._echartsContainer);
  78. this._echartsContainer = undefined;
  79. }
  80. if (this._chart) {
  81. this._chart.dispose();
  82. this._chart = undefined;
  83. }
  84. SuperMap3D.destroyObject(this);
  85. }
  86. function getCoordinateSystem(viewer) {
  87. function GLMapCoordSys(api) {
  88. this.dimensions = ['lng', 'lat'];
  89. this._mapOffset = [0, 0];
  90. this._api = api;
  91. this._viewer = viewer;
  92. this._occluder = new SuperMap3D.EllipsoidalOccluder(this._viewer.scene.globe.ellipsoid, this._viewer.scene.camera.position);
  93. }
  94. GLMapCoordSys.prototype.dimensions = ['lng', 'lat']
  95. GLMapCoordSys.prototype.setMapOffset = function (mapOffset) {
  96. this._mapOffset = mapOffset;
  97. };
  98. GLMapCoordSys.prototype.dataToPoint = function (data) {
  99. var e = [0, 0],
  100. i = SuperMap3D.Cartesian3.fromDegrees(data[0], data[1]);
  101. if (!i) return e;
  102. this._occluder.cameraPosition = this._viewer.scene.camera.position;
  103. if(!this._occluder.isPointVisible(i)) {
  104. return [];
  105. };
  106. var n = viewer.scene.cartesianToCanvasCoordinates(i);
  107. if (!n) return e;
  108. return (SuperMap3D.Cartesian3.angleBetween(viewer.scene.camera.position, i) < SuperMap3D.Math.toRadians(75))
  109. ? [n.x - this._mapOffset[0], n.y - this._mapOffset[1]] : e;
  110. }
  111. GLMapCoordSys.prototype.pointToData = async function (pt) {
  112. var mapOffset = this._mapOffset;
  113. var cart = await viewer.scene.pickPosition(
  114. new Cartesian2(pt[0] + mapOffset[0], pt[1] + mapOffset[1]), new SuperMap3D.Cartesian3()
  115. );
  116. var carto = SuperMap3D.Cartographic.fromCartesian(cart);
  117. return [SuperMap3D.Math.toDegrees(carto.longitude), SuperMap3D.Math.toDegrees(carto.latitude)];
  118. }
  119. GLMapCoordSys.prototype.getViewRect = function () {
  120. var api = this._api
  121. return new echarts.graphic.BoundingRect(0, 0, api.getWidth(), api.getHeight())
  122. }
  123. GLMapCoordSys.prototype.getRoamTransform = function () {
  124. return echarts.matrix.create();
  125. }
  126. GLMapCoordSys.dimensions = GLMapCoordSys.prototype.dimensions
  127. GLMapCoordSys.create = function (ecModel, api) {
  128. var coordSys;
  129. ecModel.eachComponent('GLMap', function (GLMapModel) {
  130. coordSys = new GLMapCoordSys(api);
  131. coordSys.setMapOffset(GLMapModel.__mapOffset || [0, 0]);
  132. GLMapModel.coordinateSystem = coordSys;
  133. })
  134. ecModel.eachSeries(function (seriesModel) {
  135. if (seriesModel.get('coordinateSystem') === 'GLMap') {
  136. seriesModel.coordinateSystem = coordSys;
  137. }
  138. })
  139. }
  140. return GLMapCoordSys;
  141. }
  142. window.EchartsLayer = EchartsLayer;
  143. })();