my-openlayer 2.3.0 → 2.3.1

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.
@@ -87,6 +87,29 @@ export default class MapTools {
87
87
  maxZoom?: number;
88
88
  duration?: number;
89
89
  }): boolean;
90
+ /**
91
+ * 根据GeoJSON数据定位地图视图
92
+ * @param jsonData GeoJSON格式的数据
93
+ * @param fitOptions fit 参数(可选)
94
+ * @returns true 表示已触发定位;false 表示未得到有效范围或数据无效
95
+ */
96
+ fitByData(jsonData: MapJSONData, fitOptions?: {
97
+ padding?: [number, number, number, number];
98
+ maxZoom?: number;
99
+ duration?: number;
100
+ }): boolean;
101
+ /**
102
+ * 根据GeoJSON数据定位地图视图(静态方法)
103
+ * @param map 地图实例
104
+ * @param jsonData GeoJSON格式的数据
105
+ * @param fitOptions fit 参数(可选)
106
+ * @returns true 表示已触发定位;false 表示未得到有效范围或数据无效
107
+ */
108
+ static fitByData(map: Map, jsonData: MapJSONData, fitOptions?: {
109
+ padding?: [number, number, number, number];
110
+ maxZoom?: number;
111
+ duration?: number;
112
+ }): boolean;
90
113
  /**
91
114
  * 视图自适应到指定图层集合的整体范围(overallExtent)
92
115
  * 说明:会取每个图层 source 的 extent,合并后执行 view.fit
@@ -100,4 +123,8 @@ export default class MapTools {
100
123
  maxZoom?: number;
101
124
  duration?: number;
102
125
  }): boolean;
126
+ /**
127
+ * 执行地图定位(内部辅助方法)
128
+ */
129
+ private static executeFit;
103
130
  }
package/core/MapTools.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
+ import VectorSource from "ol/source/Vector";
2
3
  import GeoJSON from "ol/format/GeoJSON";
3
4
  import { ErrorHandler, ErrorType } from "../utils/ErrorHandler";
4
5
  import { ValidationUtils } from "../utils/ValidationUtils";
@@ -212,6 +213,43 @@ class MapTools {
212
213
  fitToLayers(layerNameOrLayers, fitOptions) {
213
214
  return MapTools.fitToLayers(this.map, layerNameOrLayers, fitOptions);
214
215
  }
216
+ /**
217
+ * 根据GeoJSON数据定位地图视图
218
+ * @param jsonData GeoJSON格式的数据
219
+ * @param fitOptions fit 参数(可选)
220
+ * @returns true 表示已触发定位;false 表示未得到有效范围或数据无效
221
+ */
222
+ fitByData(jsonData, fitOptions) {
223
+ return MapTools.fitByData(this.map, jsonData, fitOptions);
224
+ }
225
+ /**
226
+ * 根据GeoJSON数据定位地图视图(静态方法)
227
+ * @param map 地图实例
228
+ * @param jsonData GeoJSON格式的数据
229
+ * @param fitOptions fit 参数(可选)
230
+ * @returns true 表示已触发定位;false 表示未得到有效范围或数据无效
231
+ */
232
+ static fitByData(map, jsonData, fitOptions) {
233
+ if (!map) {
234
+ throw new Error('Map instance is required');
235
+ }
236
+ if (!jsonData) {
237
+ return false;
238
+ }
239
+ try {
240
+ const features = new GeoJSON().readFeatures(jsonData);
241
+ if (!features || features.length === 0) {
242
+ return false;
243
+ }
244
+ const source = new VectorSource({ features });
245
+ const extent = source.getExtent();
246
+ return MapTools.executeFit(map, extent, fitOptions, 'Error fitting view to data');
247
+ }
248
+ catch (error) {
249
+ ErrorHandler.getInstance().error('Error fitting view to data:', error);
250
+ return false;
251
+ }
252
+ }
215
253
  /**
216
254
  * 视图自适应到指定图层集合的整体范围(overallExtent)
217
255
  * 说明:会取每个图层 source 的 extent,合并后执行 view.fit
@@ -249,11 +287,20 @@ class MapTools {
249
287
  ErrorHandler.getInstance().error('Error calculating layer extent:', error);
250
288
  }
251
289
  });
252
- if (!hasValidExtent || isEmpty(overallExtent)) {
290
+ if (!hasValidExtent) {
291
+ return false;
292
+ }
293
+ return MapTools.executeFit(map, overallExtent, fitOptions, 'Error fitting view to extent');
294
+ }
295
+ /**
296
+ * 执行地图定位(内部辅助方法)
297
+ */
298
+ static executeFit(map, extent, fitOptions, errorMessage = 'Error fitting view') {
299
+ if (!extent || isEmpty(extent)) {
253
300
  return false;
254
301
  }
255
302
  try {
256
- map.getView().fit(overallExtent, {
303
+ map.getView().fit(extent, {
257
304
  padding: fitOptions?.padding ?? [200, 200, 200, 200],
258
305
  maxZoom: fitOptions?.maxZoom ?? 14,
259
306
  duration: fitOptions?.duration ?? 1500,
@@ -261,7 +308,7 @@ class MapTools {
261
308
  return true;
262
309
  }
263
310
  catch (error) {
264
- ErrorHandler.getInstance().error('Error fitting view to extent:', error);
311
+ ErrorHandler.getInstance().error(errorMessage, error);
265
312
  return false;
266
313
  }
267
314
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "my-openlayer",
3
3
  "private": false,
4
- "version": "2.3.0",
4
+ "version": "2.3.1",
5
5
  "type": "module",
6
6
  "main": "index.js",
7
7
  "types": "index.d.ts",