@vtx/cs-map 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +202 -202
  2. package/lib/_util/EventEmitter.js +80 -0
  3. package/lib/_util/EventEmitter.js.map +1 -0
  4. package/lib/_util/Provider.js +14 -0
  5. package/lib/_util/Provider.js.map +1 -0
  6. package/lib/_util/getDefaultMapInfo.js +2 -2
  7. package/lib/_util/getDefaultMapInfo.js.map +1 -1
  8. package/lib/_util/useProps.js +15 -0
  9. package/lib/_util/useProps.js.map +1 -0
  10. package/lib/assets/colors.png +0 -0
  11. package/lib/assets/colors1.png +0 -0
  12. package/lib/cesium-3dtiles-layer/Cesium3DTilesLayer.js +38 -0
  13. package/lib/cesium-3dtiles-layer/Cesium3DTilesLayer.js.map +1 -0
  14. package/lib/cesium-3dtiles-layer/index.js +30 -0
  15. package/lib/cesium-3dtiles-layer/index.js.map +1 -0
  16. package/lib/feature-layer/FeatureLayer.js +47 -12
  17. package/lib/feature-layer/FeatureLayer.js.map +1 -1
  18. package/lib/feature-layer/createFeatureCollection.js +4 -0
  19. package/lib/feature-layer/createFeatureCollection.js.map +1 -1
  20. package/lib/feature-layer/index.js +35 -25
  21. package/lib/feature-layer/index.js.map +1 -1
  22. package/lib/group-layer/GroupLayer.js +89 -0
  23. package/lib/group-layer/GroupLayer.js.map +1 -0
  24. package/lib/group-layer/index.js +68 -0
  25. package/lib/group-layer/index.js.map +1 -0
  26. package/lib/group-layer/style/css.js +4 -0
  27. package/lib/group-layer/style/css.js.map +1 -0
  28. package/lib/group-layer/style/index.css +0 -0
  29. package/lib/group-layer/style/index.js +4 -0
  30. package/lib/group-layer/style/index.js.map +1 -0
  31. package/lib/group-layer/style/index.less +0 -0
  32. package/lib/highlight-layer/HighlightLayer.js +172 -0
  33. package/lib/highlight-layer/HighlightLayer.js.map +1 -0
  34. package/lib/highlight-layer/index.js +25 -0
  35. package/lib/highlight-layer/index.js.map +1 -0
  36. package/lib/highlight-layer/style/css.js +4 -0
  37. package/lib/highlight-layer/style/css.js.map +1 -0
  38. package/lib/highlight-layer/style/index.css +0 -0
  39. package/lib/highlight-layer/style/index.js +4 -0
  40. package/lib/highlight-layer/style/index.js.map +1 -0
  41. package/lib/highlight-layer/style/index.less +0 -0
  42. package/lib/image-layer/ImageLayer.js +113 -0
  43. package/lib/image-layer/ImageLayer.js.map +1 -0
  44. package/lib/image-layer/index.js +74 -0
  45. package/lib/image-layer/index.js.map +1 -0
  46. package/lib/image-layer/style/css.js +4 -0
  47. package/lib/image-layer/style/css.js.map +1 -0
  48. package/lib/image-layer/style/index.css +0 -0
  49. package/lib/image-layer/style/index.js +4 -0
  50. package/lib/image-layer/style/index.js.map +1 -0
  51. package/lib/image-layer/style/index.less +0 -0
  52. package/lib/index.js +36 -1
  53. package/lib/index.js.map +1 -1
  54. package/lib/line-flow-layer/LineFlowLayer.js +110 -0
  55. package/lib/line-flow-layer/LineFlowLayer.js.map +1 -0
  56. package/lib/line-flow-layer/index.js +30 -0
  57. package/lib/line-flow-layer/index.js.map +1 -0
  58. package/lib/line-flow-layer/style/css.js +4 -0
  59. package/lib/line-flow-layer/style/css.js.map +1 -0
  60. package/lib/line-flow-layer/style/index.css +0 -0
  61. package/lib/line-flow-layer/style/index.js +4 -0
  62. package/lib/line-flow-layer/style/index.js.map +1 -0
  63. package/lib/line-flow-layer/style/index.less +0 -0
  64. package/lib/map/InfoTool/index.css +55 -0
  65. package/lib/map/InfoTool/index.js +247 -0
  66. package/lib/map/InfoTool/index.js.map +1 -0
  67. package/lib/map/InfoTool/index.less +46 -0
  68. package/lib/map/InfoTool/util.js +113 -0
  69. package/lib/map/InfoTool/util.js.map +1 -0
  70. package/lib/map/InfoWindow.js +11 -6
  71. package/lib/map/InfoWindow.js.map +1 -1
  72. package/lib/map/Popup.js +164 -78
  73. package/lib/map/Popup.js.map +1 -1
  74. package/lib/map/hooks/useGetMapFeatureInfoByText.js +211 -0
  75. package/lib/map/hooks/useGetMapFeatureInfoByText.js.map +1 -0
  76. package/lib/map/index.js +415 -102
  77. package/lib/map/index.js.map +1 -1
  78. package/lib/map/style/index.css +76 -9
  79. package/lib/map/style/index.less +79 -8
  80. package/lib/marker/Marker.js +1 -0
  81. package/lib/marker/Marker.js.map +1 -1
  82. package/lib/marker/index.js +6 -4
  83. package/lib/marker/index.js.map +1 -1
  84. package/lib/material/TrailPolylineMaterial.js +31 -0
  85. package/lib/material/TrailPolylineMaterial.js.map +1 -0
  86. package/lib/point/index.js +6 -4
  87. package/lib/point/index.js.map +1 -1
  88. package/lib/polygon/index.js +6 -4
  89. package/lib/polygon/index.js.map +1 -1
  90. package/lib/polyline/index.js +6 -4
  91. package/lib/polyline/index.js.map +1 -1
  92. package/lib/renderer/index.js +4 -1
  93. package/lib/renderer/index.js.map +1 -1
  94. package/lib/tools/assets/footer.png +0 -0
  95. package/lib/tools/assets/layer.png +0 -0
  96. package/lib/tools/assets/search.png +0 -0
  97. package/lib/tools/index.js +37 -0
  98. package/lib/tools/index.js.map +1 -0
  99. package/lib/tools/layer/index.js +169 -0
  100. package/lib/tools/layer/index.js.map +1 -0
  101. package/lib/tools/search/Select/index.js +56 -0
  102. package/lib/tools/search/Select/index.js.map +1 -0
  103. package/lib/tools/search/Select/style/css.js +4 -0
  104. package/lib/tools/search/Select/style/css.js.map +1 -0
  105. package/lib/tools/search/Select/style/index.css +45 -0
  106. package/lib/tools/search/Select/style/index.js +4 -0
  107. package/lib/tools/search/Select/style/index.js.map +1 -0
  108. package/lib/tools/search/Select/style/index.less +47 -0
  109. package/lib/tools/search/index.js +203 -0
  110. package/lib/tools/search/index.js.map +1 -0
  111. package/lib/tools/style/css.js +8 -0
  112. package/lib/tools/style/css.js.map +1 -0
  113. package/lib/tools/style/index.css +123 -0
  114. package/lib/tools/style/index.js +8 -0
  115. package/lib/tools/style/index.js.map +1 -0
  116. package/lib/tools/style/index.less +120 -0
  117. package/lib/tools/tools-item/index.js +50 -0
  118. package/lib/tools/tools-item/index.js.map +1 -0
  119. package/lib/trail-polyline-layer/TrailPolylineLayer.js +84 -0
  120. package/lib/trail-polyline-layer/TrailPolylineLayer.js.map +1 -0
  121. package/lib/trail-polyline-layer/index.js +28 -0
  122. package/lib/trail-polyline-layer/index.js.map +1 -0
  123. package/lib/trail-polyline-layer/style/css.js +4 -0
  124. package/lib/trail-polyline-layer/style/css.js.map +1 -0
  125. package/lib/trail-polyline-layer/style/index.css +0 -0
  126. package/lib/trail-polyline-layer/style/index.js +4 -0
  127. package/lib/trail-polyline-layer/style/index.js.map +1 -0
  128. package/lib/trail-polyline-layer/style/index.less +0 -0
  129. package/package.json +121 -121
package/lib/map/index.js CHANGED
@@ -11,15 +11,25 @@ var _cesium = require("cesium");
11
11
  require("./base");
12
12
  require("./material");
13
13
  var _AmapMercatorTilingScheme = _interopRequireDefault(require("./base/imagery/transform/AmapMercatorTilingScheme"));
14
+ var _ImageLayer = _interopRequireDefault(require("../image-layer/ImageLayer"));
14
15
  var _getDefaultMapInfo2 = _interopRequireDefault(require("../_util/getDefaultMapInfo"));
15
16
  require("cesium/Build/Cesium/Widgets/widgets.css");
16
17
  var _classnames = _interopRequireDefault(require("classnames"));
17
- var _InfoWindow = _interopRequireDefault(require("./InfoWindow"));
18
- var _excluded = ["center", "dark", "zoom", "createdMap", "style", "tk"],
19
- _excluded2 = ["lng", "lat", "z"];
18
+ var _events = require("../events");
19
+ var _Popup = _interopRequireDefault(require("./Popup"));
20
+ var _Provider = _interopRequireDefault(require("../_util/Provider"));
21
+ var _EventEmitter = _interopRequireDefault(require("../_util/EventEmitter"));
22
+ var _useGetMapFeatureInfoByText = _interopRequireDefault(require("./hooks/useGetMapFeatureInfoByText"));
23
+ var _lodash = _interopRequireDefault(require("lodash"));
24
+ var _excluded = ["center", "dark", "zoom", "createdMap"],
25
+ _excluded2 = ["entity", "lng", "lat", "height"];
20
26
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
21
27
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
22
28
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
30
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
31
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
32
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
23
33
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
24
34
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
25
35
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -34,6 +44,19 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
34
44
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
35
45
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
36
46
  function Map(props) {
47
+ var _props$width = props.width,
48
+ width = _props$width === void 0 ? '100%' : _props$width,
49
+ _props$height = props.height,
50
+ height = _props$height === void 0 ? '100%' : _props$height,
51
+ dark = props.dark,
52
+ _props$mapStyle = props.mapStyle,
53
+ mapStyle = _props$mapStyle === void 0 ? 'vec' : _props$mapStyle,
54
+ tk = props.tk,
55
+ children = props.children,
56
+ onCloseTemplateBefore = props.onCloseTemplateBefore,
57
+ onZoom = props.onZoom,
58
+ _props$onEvents = props.onEvents,
59
+ onEvents = _props$onEvents === void 0 ? {} : _props$onEvents;
37
60
  var _useState = (0, _react.useState)(false),
38
61
  _useState2 = _slicedToArray(_useState, 2),
39
62
  mapLoaded = _useState2[0],
@@ -46,24 +69,73 @@ function Map(props) {
46
69
  _useState6 = _slicedToArray(_useState5, 2),
47
70
  tip = _useState6[0],
48
71
  setTip = _useState6[1];
49
- var _useState7 = (0, _react.useState)({}),
50
- _useState8 = _slicedToArray(_useState7, 2),
51
- infoWindow = _useState8[0],
52
- setInfoWindow = _useState8[1];
53
72
  var mapRef = (0, _react.useRef)(null);
54
73
  var mapDomRef = (0, _react.useRef)(null);
55
74
  var tipRef = (0, _react.useRef)(null);
75
+ var popupRef = (0, _react.useRef)();
76
+ var getMapFeatureInfoByText = (0, _useGetMapFeatureInfoByText["default"])(mapRef);
56
77
  (0, _react.useEffect)(function () {
57
78
  initMap();
58
79
  }, []);
80
+ var imgLayerVisible = function imgLayerVisible() {
81
+ if (mapRef.current) {
82
+ var layers = mapRef.current.imageryLayers._layers || [];
83
+ layers.map(function (item) {
84
+ var _item$_imageryProvide;
85
+ if (['img_w', 'cia_w'].includes((_item$_imageryProvide = item._imageryProvider) === null || _item$_imageryProvide === void 0 ? void 0 : _item$_imageryProvide._layer)) {
86
+ item.show = mapStyle === 'img';
87
+ }
88
+ });
89
+ }
90
+ };
91
+ var addImageryProvider = function addImageryProvider() {
92
+ var TDT_IMG_W = "http://{s}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=".concat(tk);
93
+ var TDT_CIA_W = "http://{s}.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=".concat(tk);
94
+ var Img = new _cesium.WebMapTileServiceImageryProvider({
95
+ //调用影响中文服务
96
+ url: TDT_IMG_W,
97
+ // url地址,换影像还是矢量,随便你喜欢
98
+ layer: 'img_w',
99
+ // WMTS请求的层名称
100
+ style: 'default',
101
+ // WMTS请求的样式名称
102
+ format: 'tiles',
103
+ // MIME类型,用于从服务器检索图像
104
+ tileMatrixSetID: 'GoogleMapsCompatible',
105
+ // 用于WMTS请求的TileMatrixSet的标识符
106
+ subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'],
107
+ // 天地图8个服务器
108
+ minimumLevel: 0,
109
+ // 最小层级
110
+ maximumLevel: 18 // 最大层级
111
+ });
112
+
113
+ mapRef.current.imageryLayers.addImageryProvider(Img); // 添加到cesium图层上
114
+
115
+ var cia = new _cesium.WebMapTileServiceImageryProvider({
116
+ // 调用影响中文注记服务
117
+ url: TDT_CIA_W,
118
+ layer: 'cia_w',
119
+ style: 'default',
120
+ format: 'tiles',
121
+ tileMatrixSetID: 'GoogleMapsCompatible',
122
+ subdomains: ['t0', 't1', 't2', 't3', 't4', 't5', 't6', 't7'],
123
+ // 天地图8个服务器
124
+ minimumLevel: 0,
125
+ maximumLevel: 18
126
+ });
127
+ mapRef.current.imageryLayers.addImageryProvider(cia); // 添加到cesium图层上
128
+
129
+ imgLayerVisible();
130
+ };
131
+ (0, _react.useEffect)(function () {
132
+ imgLayerVisible();
133
+ }, [mapStyle]);
59
134
  var initMap = function initMap() {
60
135
  var center = props.center,
61
136
  dark = props.dark,
62
137
  zoom = props.zoom,
63
138
  createdMap = props.createdMap,
64
- _props$style = props.style,
65
- style = _props$style === void 0 ? 'vec' : _props$style,
66
- tk = props.tk,
67
139
  options = _objectWithoutProperties(props, _excluded);
68
140
  var _getDefaultMapInfo = (0, _getDefaultMapInfo2["default"])(),
69
141
  minZoom = _getDefaultMapInfo.minZoom,
@@ -79,6 +151,7 @@ function Map(props) {
79
151
  minZoom: minZoom && Number(minZoom) || 0,
80
152
  maxZoom: maxZoom && Number(maxZoom) || 20
81
153
  };
154
+ _cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhZjc0ZDQ1ZS0wNWNhLTRhMDQtODJmYy03NTcyNDcxYzgzMDUiLCJpZCI6NzE4MTQsImlhdCI6MTYzNTQ3NzgyNX0.4TrdZWPWc9_6jLeGe90bRmBPB14XptwinSewVMu1iCE';
82
155
  var map = new _cesium.Viewer(mapDomRef.current, _objectSpread({
83
156
  shouldAnimate: true,
84
157
  animation: false,
@@ -117,56 +190,344 @@ function Map(props) {
117
190
  })
118
191
  }, options));
119
192
 
193
+ // 事件订阅
194
+ map.eventEmitter = new _EventEmitter["default"]();
195
+
120
196
  // 去版权信息
121
197
  map._cesiumWidget._creditContainer.style.display = 'none'; // 隐藏cesium ion
122
198
 
123
199
  mapRef.current = map;
200
+ addImageryProvider();
201
+
202
+ // 展示提示
203
+ map.showTip = function (content) {
204
+ setTip(content);
205
+ };
206
+
207
+ // 隐藏提示
208
+ map.hideTip = function () {
209
+ setTip(null);
210
+ };
211
+
212
+ // 查找所有dataSource和imagery图层
213
+ map.getAllLayers = function () {
214
+ var _map$dataSources, _map$imageryLayers, _map$scene;
215
+ var dataSources = (map === null || map === void 0 || (_map$dataSources = map.dataSources) === null || _map$dataSources === void 0 ? void 0 : _map$dataSources._dataSources) || [];
216
+ var imageryLayers = (map === null || map === void 0 || (_map$imageryLayers = map.imageryLayers) === null || _map$imageryLayers === void 0 ? void 0 : _map$imageryLayers._layers) || [];
217
+ var primitives = (map === null || map === void 0 || (_map$scene = map.scene) === null || _map$scene === void 0 || (_map$scene = _map$scene.primitives) === null || _map$scene === void 0 ? void 0 : _map$scene._primitives) || [];
218
+ return [].concat(_toConsumableArray(dataSources), _toConsumableArray(imageryLayers), _toConsumableArray(primitives));
219
+ };
220
+
221
+ // 添加dataSource和imagery图层
222
+ map.layers = [];
223
+
224
+ // 图层改变
225
+ map.layersChange = function () {
226
+ map.eventEmitter.emit('layersChange', map.layers);
227
+ onEvents.layersChange && onEvents.layersChange(map.layers);
228
+ };
229
+
230
+ // 添加图层
231
+ map.addLayer = function (layer) {
232
+ // 挂载获取地图的方法
233
+ layer.getMap = function () {
234
+ return map;
235
+ };
236
+ if (layer instanceof _cesium.CustomDataSource) {
237
+ map.dataSources.add(layer);
238
+ } else if (layer instanceof _ImageLayer["default"]) {
239
+ map.scene.imageryLayers.add(layer);
240
+ }
241
+
242
+ // 图层是否含有name字段,作为加入到图层树的判断依据
243
+ if (layer.name) {
244
+ map.layers.push(layer);
245
+ onEvents.addLayer && onEvents.addLayer(layer);
246
+ map.layersChange();
247
+ }
248
+ };
249
+
250
+ // 移除图层
251
+ map.removeLayer = function (layer) {
252
+ if (layer instanceof _cesium.CustomDataSource) {
253
+ map.dataSources.remove(layer);
254
+ } else if (layer instanceof _ImageLayer["default"]) {
255
+ map.scene.imageryLayers.remove(layer);
256
+ }
257
+ map.layers = map.layers.filter(function (v) {
258
+ return v !== layer;
259
+ });
260
+ onEvents.removeLayer && onEvents.removeLayer(layer);
261
+ map.layersChange();
262
+ };
263
+
264
+ // 清除图层和entity
265
+ map.clearLayers = function () {
266
+ var imageryLayers = map.getImageryLayers() || [];
267
+ map.dataSources.removeAll();
268
+ imageryLayers.map(function (layer) {
269
+ if (layer !== null && layer !== void 0 && layer.key) {
270
+ map.imageryLayers.remove(layer);
271
+ }
272
+ });
273
+ map.entities.removeAll();
274
+ map.layers = [];
275
+ onEvents.clearLayer && onEvents.clearLayer();
276
+ map.layersChange();
277
+ };
278
+
279
+ // 根据key查找imageryLayers图层
280
+ map.getImageryLayers = function (keys) {
281
+ var _map$imageryLayers2;
282
+ return ((map === null || map === void 0 || (_map$imageryLayers2 = map.imageryLayers) === null || _map$imageryLayers2 === void 0 ? void 0 : _map$imageryLayers2._layers) || []).filter(function (layer) {
283
+ if (typeof keys === 'string') {
284
+ return layer.key === keys;
285
+ } else if (Array.isArray(keys)) {
286
+ return keys.includes(layer.key);
287
+ } else {
288
+ return layer;
289
+ }
290
+ });
291
+ };
292
+
293
+ // 通过图形查询所属图层
294
+ map.getLayerByFeature = function (entity) {
295
+ return map.getAllLayers().find(function (layer) {
296
+ if (entity instanceof _cesium.ImageryLayerFeatureInfo) {
297
+ var _entity$imageryLayer;
298
+ if (layer !== null && layer !== void 0 && layer.key && layer.key === (entity === null || entity === void 0 || (_entity$imageryLayer = entity.imageryLayer) === null || _entity$imageryLayer === void 0 ? void 0 : _entity$imageryLayer.key)) {
299
+ return layer;
300
+ }
301
+ } else if (layer instanceof _cesium.Primitive) {
302
+ var _entity$primitive;
303
+ if (layer !== null && layer !== void 0 && layer.key && layer.key === (entity === null || entity === void 0 || (_entity$primitive = entity.primitive) === null || _entity$primitive === void 0 ? void 0 : _entity$primitive.key)) {
304
+ return layer;
305
+ }
306
+ } else {
307
+ if (layer !== null && layer !== void 0 && layer.key && layer.key === (entity === null || entity === void 0 ? void 0 : entity.key)) {
308
+ return layer;
309
+ }
310
+ }
311
+ });
312
+ };
313
+
314
+ // 获取entity中数据
315
+ map.getProperties = function (feature) {
316
+ var _feature$_properties, _properties;
317
+ if (feature !== null && feature !== void 0 && feature.primitive && (feature === null || feature === void 0 ? void 0 : feature.primitive) instanceof _cesium.Primitive) {
318
+ return feature.primitive.data.find(function (item) {
319
+ return item.id === feature.id;
320
+ });
321
+ }
322
+ var properties = (feature === null || feature === void 0 || (_feature$_properties = feature._properties) === null || _feature$_properties === void 0 ? void 0 : _feature$_properties.getValue(feature._id)) || (feature === null || feature === void 0 ? void 0 : feature.properties) || {};
323
+ properties = ((_properties = properties) === null || _properties === void 0 ? void 0 : _properties.properties) || properties;
324
+ return properties;
325
+ };
326
+
327
+ // 通过key查询图层
328
+ map.getLayerByKey = function (key) {
329
+ return map.getAllLayers().find(function (layer) {
330
+ return key && layer.key && layer.key === key;
331
+ });
332
+ };
333
+
334
+ // 通过keys查询多个图层
335
+ map.getLayerByKeys = function (keys) {
336
+ return map.getAllLayers().filter(function (layer) {
337
+ return layer.key && keys.includes(layer.key);
338
+ });
339
+ };
340
+
341
+ // 通过返回值控制是否执行关闭
342
+ map.onCloseTemplateBefore = function (feature) {
343
+ if (onCloseTemplateBefore) {
344
+ return onCloseTemplateBefore(feature);
345
+ }
346
+ };
347
+
348
+ // 根据key查找展示的图层
349
+ map.getVisibleLayersByKeys = function (keys) {
350
+ var layers = map.getAllLayers() || [];
351
+ return layers.filter(function (layer) {
352
+ if (typeof keys === 'string') {
353
+ return layer.key === keys && layer.show;
354
+ } else if (Array.isArray(keys)) {
355
+ return keys.includes(layer.key) && layer.show;
356
+ } else {
357
+ return layer.show && layer.key;
358
+ }
359
+ });
360
+ };
361
+
362
+ // 展示看板
363
+ map.showTemplate = function (feature) {
364
+ popupRef.current.showTemplate(feature);
365
+ };
366
+
367
+ // 隐藏看板
368
+ map.hideTemplate = function () {
369
+ popupRef.current.hideTemplate();
370
+ };
124
371
  var handlePoint = new _cesium.ScreenSpaceEventHandler(map.scene.canvas);
125
- // 点击事件
126
- handlePoint.setInputAction(function (e) {
127
- var feature = map.scene.pick(e.position);
128
- if ((0, _cesium.defined)(feature)) {
129
- var _entity$geometryInfo;
130
- var entity = feature.id.properties.properties._value;
131
- props.onClick && props.onClick(entity, e.position);
132
-
133
- // 点位才出现默认弹窗
134
- if (((_entity$geometryInfo = entity.geometryInfo) === null || _entity$geometryInfo === void 0 ? void 0 : _entity$geometryInfo.type) == 'point') {
135
- setInfoWindow({
136
- visible: true,
137
- entity: entity,
138
- position: e.position,
139
- _position: (0, _cesium.defaultValue)(feature.id, feature.primitive.id)._position._value
140
- });
372
+
373
+ // 获取图层上的图形信息
374
+ map.pickDataSourcesFeature = function (event) {
375
+ if (event !== null && event !== void 0 && event.position) {
376
+ var position = event.position;
377
+ var pick = map.scene.pick(position);
378
+ if (_lodash["default"].isString(pick === null || pick === void 0 ? void 0 : pick.id)) {
379
+ return pick;
141
380
  }
381
+ return pick === null || pick === void 0 ? void 0 : pick.id;
382
+ }
383
+ };
384
+ map.getMapFeatureInfoByText = getMapFeatureInfoByText;
385
+
386
+ // 获取wms的图形数据
387
+ map.pickImageryLayerFeatures = function (event) {
388
+ if (event !== null && event !== void 0 && event.position) {
389
+ var position = event.position;
390
+ var pickRay = map.camera.getPickRay(position);
391
+ return map.imageryLayers.pickImageryLayerFeatures(pickRay, map.scene);
392
+ }
393
+ };
394
+
395
+ // 注册事件
396
+ (0, _events.registerEventLayer)(map, props);
397
+ function registerMapEvent(e, event) {
398
+ if (map[event]) {
399
+ map[event](e);
400
+ onEvents[event] && onEvents[event](e);
401
+ }
402
+ }
403
+ function registerEvent(feature, event) {
404
+ if (feature) {
405
+ var _feature$event;
406
+ var properties = map.getProperties(feature);
407
+
408
+ // 触发自身事件
409
+ (_feature$event = feature[event]) === null || _feature$event === void 0 || _feature$event.call(feature, properties);
410
+ var layer = map.getLayerByFeature(feature);
411
+ if (layer !== null && layer !== void 0 && layer[event]) {
412
+ layer[event](properties);
413
+ }
414
+ }
415
+ }
416
+
417
+ // 点击事件
418
+ handlePoint.setInputAction(function (event) {
419
+ registerMapEvent(event, 'onClick');
420
+ map.hideTip();
421
+ var entity = map.pickDataSourcesFeature(event);
422
+ var featuresPromise = map.pickImageryLayerFeatures(event);
423
+ if (entity) {
424
+ map.onClickTemplateAfter && map.onClickTemplateAfter(entity);
425
+ registerEvent(entity, 'onClick');
426
+ map.showTemplate(entity, event);
427
+ } else if ((0, _cesium.defined)(featuresPromise)) {
428
+ (0, _cesium.when)(featuresPromise, function (features) {
429
+ var feature = features === null || features === void 0 ? void 0 : features[0];
430
+ registerEvent(feature, 'onClick');
431
+ map.showTemplate(feature, event);
432
+ });
142
433
  }
143
434
  }, _cesium.ScreenSpaceEventType.LEFT_CLICK);
435
+
144
436
  // 双击事件
145
- handlePoint.setInputAction(function (e) {
146
- var feature = map.scene.pick(e.position);
147
- if ((0, _cesium.defined)(feature)) {
148
- props.onDoubleClick && props.onDoubleClick(feature.id.properties.properties._value, e.position);
149
- }
437
+ handlePoint.setInputAction(function (event) {
438
+ map.trackedEntity = undefined; // 取消双击锁定
439
+
440
+ registerMapEvent(event, 'onDoubleClick');
441
+ var feature = map.pickDataSourcesFeature(event);
442
+ registerEvent(feature, 'onDoubleClick');
150
443
  }, _cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
444
+
151
445
  // 鼠标移动
152
- // handlePoint.setInputAction(e => {
153
- // let feature = map.scene.pick(e.position);
154
- // if(defined(feature) && props.onMouseMove instanceof Function){
155
- // props.onMouseMove(feature.id.properties.properties._value,e.position)
156
- // }
157
- // }, ScreenSpaceEventType.MOUSE_MOVE)
446
+ var hoverFeature;
447
+ var getUid = function getUid(feature) {
448
+ if (!feature._id) {
449
+ feature._id = window.Math.random();
450
+ }
451
+ return feature._id;
452
+ };
453
+ handlePoint.setInputAction(function (event) {
454
+ registerMapEvent(event, 'onMouseMove');
455
+ var feature = map.pickDataSourcesFeature({
456
+ position: event.endPosition
457
+ });
458
+ if (feature) {
459
+ registerEvent(feature, 'onMouseMove');
460
+
461
+ // 判断是否在图形内移动
462
+ if (hoverFeature) {
463
+ var uid = getUid(feature);
464
+ var hoverUid = getUid(hoverFeature);
465
+
466
+ // 判断是否进入新的图形
467
+ if (uid !== hoverUid) {
468
+ registerEvent(hoverFeature, 'onMouseLeave');
469
+ registerEvent(feature, 'onMouseEnter');
470
+ hoverFeature = feature;
471
+ }
472
+ } else {
473
+ registerEvent(feature, 'onMouseEnter');
474
+ hoverFeature = feature;
475
+ }
476
+ registerEvent(feature, 'onMouseMove');
477
+ } else {
478
+ if (hoverFeature) {
479
+ registerEvent(hoverFeature, 'onMouseLeave');
480
+ }
481
+ hoverFeature = null;
482
+ }
483
+ }, _cesium.ScreenSpaceEventType.MOUSE_MOVE);
484
+ if (onZoom) {
485
+ map.camera.moveEnd.addEventListener(function () {
486
+ var viewRectangle = map.camera.computeViewRectangle();
487
+ var west = viewRectangle.west / _cesium.Math.PI * 180; // 左上方(西)
488
+ var north = viewRectangle.north / _cesium.Math.PI * 180; //右上方(北)
489
+ var east = viewRectangle.east / _cesium.Math.PI * 180; // 右下方(东)
490
+ var south = viewRectangle.south / _cesium.Math.PI * 180; // 左下方(南)
491
+ var cameraHeight = map.camera.positionCartographic.height;
492
+ onZoom && onZoom({
493
+ west: west,
494
+ north: north,
495
+ east: east,
496
+ south: south,
497
+ cameraHeight: cameraHeight
498
+ });
499
+ });
500
+ }
158
501
 
502
+ // 动态调整视角,不传参数为默认视角,参数可以是图层、图形、数据等
159
503
  map.fitView = function (e) {
160
504
  var _ref = e || {},
161
505
  entity = _ref.entity,
162
- isZoom = _ref.isZoom,
506
+ lng = _ref.lng,
507
+ lat = _ref.lat,
163
508
  _ref$height = _ref.height,
164
- height = _ref$height === void 0 ? 50000 : _ref$height;
509
+ height = _ref$height === void 0 ? 50000 : _ref$height,
510
+ rest = _objectWithoutProperties(_ref, _excluded2);
511
+ var pitch = map.camera.pitch;
165
512
  // 判断是否点击了图形
166
513
  if (entity) {
167
- map.camera.flyTo(entity, {
168
- duration: 2
514
+ map.flyTo(entity, {
515
+ duration: 2,
516
+ offset: {
517
+ heading: _cesium.Math.toRadians(0.0),
518
+ pitch: pitch,
519
+ range: height
520
+ }
169
521
  });
522
+ } else if (lng && lat) {
523
+ map.camera.flyTo(_objectSpread({
524
+ destination: new _cesium.Cartesian3.fromDegrees(Number(lng), Number(lat), height),
525
+ orientation: {
526
+ pitch: _cesium.Math.toRadians(-88.0),
527
+ roll: 0.0
528
+ },
529
+ duration: 2
530
+ }, rest));
170
531
  } else {
171
532
  var _viewDefault$center = _slicedToArray(viewDefault.center, 3),
172
533
  x = _viewDefault$center[0],
@@ -183,26 +544,9 @@ function Map(props) {
183
544
  });
184
545
  }
185
546
  };
186
- map.flyTo = function (e) {
187
- var _ref2 = e || {},
188
- lng = _ref2.lng,
189
- lat = _ref2.lat,
190
- _ref2$z = _ref2.z,
191
- z = _ref2$z === void 0 ? 50000 : _ref2$z,
192
- rest = _objectWithoutProperties(_ref2, _excluded2);
193
- if (lng && lat) {
194
- map.camera.flyTo(_objectSpread({
195
- destination: new _cesium.Cartesian3.fromDegrees(Number(lng), Number(lat), z),
196
- orientation: {
197
- pitch: _cesium.Math.toRadians(-88.0),
198
- roll: 0.0
199
- },
200
- duration: 2
201
- }, rest));
202
- }
203
- };
204
547
  map.fitView();
205
548
  createdMap && createdMap(map);
549
+ onEvents.createdMap && onEvents.createdMap(map);
206
550
  setMapLoaded(true);
207
551
  };
208
552
  var onMouseMove = function onMouseMove(event) {
@@ -211,39 +555,6 @@ function Map(props) {
211
555
  tipRef.current.style.top = "".concat(event.nativeEvent.layerY + 15, "px");
212
556
  }
213
557
  };
214
- var _props$width = props.width,
215
- width = _props$width === void 0 ? '100%' : _props$width,
216
- _props$height = props.height,
217
- height = _props$height === void 0 ? '100%' : _props$height,
218
- dark = props.dark,
219
- children = props.children;
220
-
221
- // 渲染 Children
222
- var renderChildren = function renderChildren() {
223
- return _react.Children.map(children, function (child) {
224
- if (child) {
225
- var cType = child.type;
226
- /* 针对下面两种组件不注入地图相关属性
227
- * 1. 明确声明不需要注入的
228
- * 2. DOM 元素
229
- */
230
- if (cType.preventMap || typeof cType === 'string') {
231
- return child;
232
- }
233
- return /*#__PURE__*/_react["default"].cloneElement(child, {
234
- __map__: mapRef.current
235
- });
236
- }
237
- return child;
238
- });
239
- };
240
-
241
- // 默认template
242
- var template = function template(entity) {
243
- return /*#__PURE__*/_react["default"].createElement("div", {
244
- className: (0, _classnames["default"])('cesium-template')
245
- }, "\u540D\u79F0\uFF1A", (entity === null || entity === void 0 ? void 0 : entity.name) || '');
246
- };
247
558
  return /*#__PURE__*/_react["default"].createElement("div", {
248
559
  style: {
249
560
  width: width,
@@ -264,15 +575,14 @@ function Map(props) {
264
575
  }, tip && tipVis && /*#__PURE__*/_react["default"].createElement("div", {
265
576
  ref: tipRef,
266
577
  className: (0, _classnames["default"])('custom-tip')
267
- }, tip)), mapLoaded && renderChildren(), infoWindow.visible && /*#__PURE__*/_react["default"].createElement(_InfoWindow["default"], {
268
- map: mapRef.current,
269
- position: infoWindow.position,
270
- _position: infoWindow._position,
271
- offset: props.infoWindowOffset,
272
- onClose: function onClose() {
273
- setInfoWindow({});
578
+ }, tip), mapRef.current && /*#__PURE__*/_react["default"].createElement(_Popup["default"], {
579
+ ref: popupRef,
580
+ map: mapRef.current
581
+ })), mapLoaded && /*#__PURE__*/_react["default"].createElement(_Provider["default"], {
582
+ value: {
583
+ map: mapRef.current
274
584
  }
275
- }, props.template ? props.template(infoWindow.entity) : template(infoWindow.entity)));
585
+ }, children));
276
586
  }
277
587
  var _default = Map;
278
588
  exports["default"] = _default;
@@ -280,12 +590,15 @@ Map.propTypes = {
280
590
  width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
281
591
  height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
282
592
  createdMap: _propTypes["default"].func,
593
+ onCloseTemplateBefore: _propTypes["default"].func,
594
+ onZoom: _propTypes["default"].func,
283
595
  center: _propTypes["default"].array,
284
596
  zoom: _propTypes["default"].number,
285
597
  minZoom: _propTypes["default"].number,
286
598
  maxZoom: _propTypes["default"].number,
287
599
  dark: _propTypes["default"].bool,
288
- style: _propTypes["default"].oneOfType(['vec', 'img']),
289
- tk: _propTypes["default"].string.isRequired
600
+ mapStyle: _propTypes["default"].oneOfType(['vec', 'img']),
601
+ tk: _propTypes["default"].string.isRequired,
602
+ onEvents: _propTypes["default"].object
290
603
  };
291
604
  //# sourceMappingURL=index.js.map