@mint-ui/map 1.2.0-test.61 → 1.2.0-test.62

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.
@@ -7,7 +7,7 @@ var Konva = require('konva');
7
7
  var React = require('react');
8
8
  var reactDom = require('react-dom');
9
9
  var MapDrawables = require('../../../types/MapDrawables.js');
10
- var MapTypes = require('../../../types/MapTypes.js');
10
+ require('../../../types/MapTypes.js');
11
11
  require('../../../types/MapEventTypes.js');
12
12
  var MintMapProvider = require('../../provider/MintMapProvider.js');
13
13
  var context = require('../shared/context.js');
@@ -381,25 +381,17 @@ var CanvasMarkerLayer = function (props) {
381
381
 
382
382
 
383
383
  var getMarkerBoundingBoxCoordinates = function (item) {
384
- try {
385
- var offset = getOrComputeMarkerOffset(item);
386
- if (!offset) return null;
387
- var boundingBox = computeBoundingBox(item);
388
- if (!boundingBox) return null; // 왼쪽 상단 좌표 (minX, minY)
389
-
390
- var leftTopOffset = new MapTypes.Offset(boundingBox.minX, boundingBox.minY);
391
- var leftTop = controller.offsetToPosition(leftTopOffset); // 우측 하단 좌표 (maxX, maxY)
392
-
393
- var bottomRightOffset = new MapTypes.Offset(boundingBox.maxX, boundingBox.maxY);
394
- var bottomRight = controller.offsetToPosition(bottomRightOffset);
395
- return {
396
- bottomRight: bottomRight,
397
- leftTop: leftTop
398
- };
399
- } catch (error) {
400
- console.error('[CanvasMarkerLayer] getMarkerBoundingBoxCoordinates error:', error, item);
401
- return null;
402
- }
384
+ if (!item.position) return null;
385
+ return utils.calculateMarkerBoundingBox({
386
+ controller: controller,
387
+ height: item.boxHeight || 28,
388
+ lat: item.position.lat,
389
+ lng: item.position.lng,
390
+ offsetX: item.offsetX || 0,
391
+ offsetY: item.offsetY || 0,
392
+ tailHeight: item.tailHeight || 0,
393
+ width: item.boxWidth || 50
394
+ });
403
395
  }; // 마우스 이동 이벤트 핸들러 (hover 감지)
404
396
 
405
397
 
@@ -1,3 +1,4 @@
1
+ import type { MarkerBoundingBox } from './types';
1
2
  import { CanvasData, CanvasOption } from './types';
2
3
  import { Offset } from '../../../types';
3
4
  import { MintMapController } from '../../MintMapController';
@@ -128,3 +129,45 @@ export declare function createCanvasData<T extends Record<string, any>>(serverDa
128
129
  * ```
129
130
  */
130
131
  export declare function createCanvasDataArray<T extends Record<string, any>>(serverDataArray: T[], getCanvasOptions: (serverData: T, index: number) => CanvasOption): CanvasData<T>[];
132
+ /**
133
+ * 마커 바운딩 박스 좌표 계산 (위도/경도)
134
+ *
135
+ * 마커의 중심 좌표와 크기를 기반으로 현재 뷰포트에서의 바운딩 박스 좌표를 계산합니다.
136
+ *
137
+ * @param params 계산 파라미터
138
+ * @param params.lat 마커의 중심 위도
139
+ * @param params.lng 마커의 중심 경도
140
+ * @param params.width 마커의 너비 (픽셀 단위, boxWidth)
141
+ * @param params.height 마커의 높이 (픽셀 단위, boxHeight)
142
+ * @param params.controller MintMapController 인스턴스 (뷰포트 상태를 알기 위해 필요)
143
+ * @param params.tailHeight 마커 꼬리 높이 (픽셀 단위, 기본값: 0)
144
+ * @param params.offsetX 마커 오프셋 X (픽셀 단위, 기본값: 0)
145
+ * @param params.offsetY 마커 오프셋 Y (픽셀 단위, 기본값: 0)
146
+ * @returns 마커 바운딩 박스 좌표 (위도/경도) 또는 null
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const boundingBox = calculateMarkerBoundingBox({
151
+ * lat: 37.5665,
152
+ * lng: 126.9780,
153
+ * width: 100,
154
+ * height: 50,
155
+ * controller: mintMapController
156
+ * });
157
+ *
158
+ * if (boundingBox) {
159
+ * console.log('왼쪽 상단:', boundingBox.leftTop);
160
+ * console.log('우측 하단:', boundingBox.bottomRight);
161
+ * }
162
+ * ```
163
+ */
164
+ export declare const calculateMarkerBoundingBox: (params: {
165
+ lat: number;
166
+ lng: number;
167
+ width: number;
168
+ height: number;
169
+ controller: MintMapController;
170
+ tailHeight?: number;
171
+ offsetX?: number;
172
+ offsetY?: number;
173
+ }) => MarkerBoundingBox | null;
@@ -299,7 +299,78 @@ function createCanvasDataArray(serverDataArray, getCanvasOptions) {
299
299
  return createCanvasData(serverData, canvasOptions);
300
300
  });
301
301
  }
302
+ /**
303
+ * 마커 바운딩 박스 좌표 계산 (위도/경도)
304
+ *
305
+ * 마커의 중심 좌표와 크기를 기반으로 현재 뷰포트에서의 바운딩 박스 좌표를 계산합니다.
306
+ *
307
+ * @param params 계산 파라미터
308
+ * @param params.lat 마커의 중심 위도
309
+ * @param params.lng 마커의 중심 경도
310
+ * @param params.width 마커의 너비 (픽셀 단위, boxWidth)
311
+ * @param params.height 마커의 높이 (픽셀 단위, boxHeight)
312
+ * @param params.controller MintMapController 인스턴스 (뷰포트 상태를 알기 위해 필요)
313
+ * @param params.tailHeight 마커 꼬리 높이 (픽셀 단위, 기본값: 0)
314
+ * @param params.offsetX 마커 오프셋 X (픽셀 단위, 기본값: 0)
315
+ * @param params.offsetY 마커 오프셋 Y (픽셀 단위, 기본값: 0)
316
+ * @returns 마커 바운딩 박스 좌표 (위도/경도) 또는 null
317
+ *
318
+ * @example
319
+ * ```typescript
320
+ * const boundingBox = calculateMarkerBoundingBox({
321
+ * lat: 37.5665,
322
+ * lng: 126.9780,
323
+ * width: 100,
324
+ * height: 50,
325
+ * controller: mintMapController
326
+ * });
327
+ *
328
+ * if (boundingBox) {
329
+ * console.log('왼쪽 상단:', boundingBox.leftTop);
330
+ * console.log('우측 하단:', boundingBox.bottomRight);
331
+ * }
332
+ * ```
333
+ */
334
+
335
+ var calculateMarkerBoundingBox = function (params) {
336
+ try {
337
+ var lat = params.lat,
338
+ lng = params.lng,
339
+ width = params.width,
340
+ height = params.height,
341
+ controller = params.controller,
342
+ _a = params.tailHeight,
343
+ tailHeight = _a === void 0 ? 0 : _a,
344
+ _b = params.offsetX,
345
+ offsetX = _b === void 0 ? 0 : _b,
346
+ _c = params.offsetY,
347
+ offsetY = _c === void 0 ? 0 : _c; // 마커의 중심 좌표를 화면 좌표로 변환
348
+
349
+ var markerPosition = new MapTypes.Position(lat, lng);
350
+ var markerOffset = controller.positionToOffset(markerPosition);
351
+ if (!markerOffset) return null; // 바운딩 박스의 화면 좌표 계산
352
+
353
+ var minX = markerOffset.x + offsetX - width / 2;
354
+ var minY = markerOffset.y + offsetY - height - tailHeight;
355
+ var maxX = markerOffset.x + offsetX + width / 2;
356
+ var maxY = markerOffset.y + offsetY; // 왼쪽 상단 좌표를 위도/경도로 변환
357
+
358
+ var leftTopOffset = new MapTypes.Offset(minX, minY);
359
+ var leftTop = controller.offsetToPosition(leftTopOffset); // 우측 하단 좌표를 위도/경도로 변환
360
+
361
+ var bottomRightOffset = new MapTypes.Offset(maxX, maxY);
362
+ var bottomRight = controller.offsetToPosition(bottomRightOffset);
363
+ return {
364
+ bottomRight: bottomRight,
365
+ leftTop: leftTop
366
+ };
367
+ } catch (error) {
368
+ console.error('[calculateMarkerBoundingBox] error:', error);
369
+ return null;
370
+ }
371
+ };
302
372
 
373
+ exports.calculateMarkerBoundingBox = calculateMarkerBoundingBox;
303
374
  exports.calculateTextBoxWidth = calculateTextBoxWidth;
304
375
  exports.computeMarkerOffset = computeMarkerOffset;
305
376
  exports.computePolygonOffsets = computePolygonOffsets;
package/dist/index.es.js CHANGED
@@ -1761,6 +1761,76 @@ function createCanvasDataArray(serverDataArray, getCanvasOptions) {
1761
1761
  return createCanvasData(serverData, canvasOptions);
1762
1762
  });
1763
1763
  }
1764
+ /**
1765
+ * 마커 바운딩 박스 좌표 계산 (위도/경도)
1766
+ *
1767
+ * 마커의 중심 좌표와 크기를 기반으로 현재 뷰포트에서의 바운딩 박스 좌표를 계산합니다.
1768
+ *
1769
+ * @param params 계산 파라미터
1770
+ * @param params.lat 마커의 중심 위도
1771
+ * @param params.lng 마커의 중심 경도
1772
+ * @param params.width 마커의 너비 (픽셀 단위, boxWidth)
1773
+ * @param params.height 마커의 높이 (픽셀 단위, boxHeight)
1774
+ * @param params.controller MintMapController 인스턴스 (뷰포트 상태를 알기 위해 필요)
1775
+ * @param params.tailHeight 마커 꼬리 높이 (픽셀 단위, 기본값: 0)
1776
+ * @param params.offsetX 마커 오프셋 X (픽셀 단위, 기본값: 0)
1777
+ * @param params.offsetY 마커 오프셋 Y (픽셀 단위, 기본값: 0)
1778
+ * @returns 마커 바운딩 박스 좌표 (위도/경도) 또는 null
1779
+ *
1780
+ * @example
1781
+ * ```typescript
1782
+ * const boundingBox = calculateMarkerBoundingBox({
1783
+ * lat: 37.5665,
1784
+ * lng: 126.9780,
1785
+ * width: 100,
1786
+ * height: 50,
1787
+ * controller: mintMapController
1788
+ * });
1789
+ *
1790
+ * if (boundingBox) {
1791
+ * console.log('왼쪽 상단:', boundingBox.leftTop);
1792
+ * console.log('우측 하단:', boundingBox.bottomRight);
1793
+ * }
1794
+ * ```
1795
+ */
1796
+
1797
+ var calculateMarkerBoundingBox = function (params) {
1798
+ try {
1799
+ var lat = params.lat,
1800
+ lng = params.lng,
1801
+ width = params.width,
1802
+ height = params.height,
1803
+ controller = params.controller,
1804
+ _a = params.tailHeight,
1805
+ tailHeight = _a === void 0 ? 0 : _a,
1806
+ _b = params.offsetX,
1807
+ offsetX = _b === void 0 ? 0 : _b,
1808
+ _c = params.offsetY,
1809
+ offsetY = _c === void 0 ? 0 : _c; // 마커의 중심 좌표를 화면 좌표로 변환
1810
+
1811
+ var markerPosition = new Position(lat, lng);
1812
+ var markerOffset = controller.positionToOffset(markerPosition);
1813
+ if (!markerOffset) return null; // 바운딩 박스의 화면 좌표 계산
1814
+
1815
+ var minX = markerOffset.x + offsetX - width / 2;
1816
+ var minY = markerOffset.y + offsetY - height - tailHeight;
1817
+ var maxX = markerOffset.x + offsetX + width / 2;
1818
+ var maxY = markerOffset.y + offsetY; // 왼쪽 상단 좌표를 위도/경도로 변환
1819
+
1820
+ var leftTopOffset = new Offset(minX, minY);
1821
+ var leftTop = controller.offsetToPosition(leftTopOffset); // 우측 하단 좌표를 위도/경도로 변환
1822
+
1823
+ var bottomRightOffset = new Offset(maxX, maxY);
1824
+ var bottomRight = controller.offsetToPosition(bottomRightOffset);
1825
+ return {
1826
+ bottomRight: bottomRight,
1827
+ leftTop: leftTop
1828
+ };
1829
+ } catch (error) {
1830
+ console.error('[calculateMarkerBoundingBox] error:', error);
1831
+ return null;
1832
+ }
1833
+ };
1764
1834
 
1765
1835
  /**
1766
1836
  * 캔버스 데이터 타입 Enum
@@ -4222,25 +4292,17 @@ var CanvasMarkerLayer = function (props) {
4222
4292
 
4223
4293
 
4224
4294
  var getMarkerBoundingBoxCoordinates = function (item) {
4225
- try {
4226
- var offset = getOrComputeMarkerOffset(item);
4227
- if (!offset) return null;
4228
- var boundingBox = computeBoundingBox(item);
4229
- if (!boundingBox) return null; // 왼쪽 상단 좌표 (minX, minY)
4230
-
4231
- var leftTopOffset = new Offset(boundingBox.minX, boundingBox.minY);
4232
- var leftTop = controller.offsetToPosition(leftTopOffset); // 우측 하단 좌표 (maxX, maxY)
4233
-
4234
- var bottomRightOffset = new Offset(boundingBox.maxX, boundingBox.maxY);
4235
- var bottomRight = controller.offsetToPosition(bottomRightOffset);
4236
- return {
4237
- bottomRight: bottomRight,
4238
- leftTop: leftTop
4239
- };
4240
- } catch (error) {
4241
- console.error('[CanvasMarkerLayer] getMarkerBoundingBoxCoordinates error:', error, item);
4242
- return null;
4243
- }
4295
+ if (!item.position) return null;
4296
+ return calculateMarkerBoundingBox({
4297
+ controller: controller,
4298
+ height: item.boxHeight || 28,
4299
+ lat: item.position.lat,
4300
+ lng: item.position.lng,
4301
+ offsetX: item.offsetX || 0,
4302
+ offsetY: item.offsetY || 0,
4303
+ tailHeight: item.tailHeight || 0,
4304
+ width: item.boxWidth || 50
4305
+ });
4244
4306
  }; // 마우스 이동 이벤트 핸들러 (hover 감지)
4245
4307
 
4246
4308
 
@@ -10387,4 +10449,4 @@ function MintMap(_a) {
10387
10449
  }), loading));
10388
10450
  }
10389
10451
 
10390
- export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerLayer, CanvasPolygonLayer, CanvasProvider, CircleMarker, DEFAULT_CULLING_MARGIN, DEFAULT_MAX_CACHE_SIZE, Drawable, GeoCalulator, GoogleMintMapController, LRUCache, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SPATIAL_GRID_CELL_SIZE, SVGCircle, SVGPolygon, SVGRect, Spacing, SpatialHashGrid, Status, buildSpatialIndex, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createCanvasData, createCanvasDataArray, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useCanvasContext, useMarkerMoving, useMintMapController, validateEvent, waiting };
10452
+ export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerLayer, CanvasPolygonLayer, CanvasProvider, CircleMarker, DEFAULT_CULLING_MARGIN, DEFAULT_MAX_CACHE_SIZE, Drawable, GeoCalulator, GoogleMintMapController, LRUCache, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SPATIAL_GRID_CELL_SIZE, SVGCircle, SVGPolygon, SVGRect, Spacing, SpatialHashGrid, Status, buildSpatialIndex, calculateMarkerBoundingBox, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createCanvasData, createCanvasDataArray, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useCanvasContext, useMarkerMoving, useMintMapController, validateEvent, waiting };
package/dist/index.js CHANGED
@@ -71,6 +71,7 @@ Object.defineProperty(exports, 'CanvasDataType', {
71
71
  enumerable: true,
72
72
  get: function () { return types.CanvasDataType; }
73
73
  });
74
+ exports.calculateMarkerBoundingBox = utils.calculateMarkerBoundingBox;
74
75
  exports.calculateTextBoxWidth = utils.calculateTextBoxWidth;
75
76
  exports.computeMarkerOffset = utils.computeMarkerOffset;
76
77
  exports.computePolygonOffsets = utils.computePolygonOffsets;
package/dist/index.umd.js CHANGED
@@ -1765,6 +1765,76 @@
1765
1765
  return createCanvasData(serverData, canvasOptions);
1766
1766
  });
1767
1767
  }
1768
+ /**
1769
+ * 마커 바운딩 박스 좌표 계산 (위도/경도)
1770
+ *
1771
+ * 마커의 중심 좌표와 크기를 기반으로 현재 뷰포트에서의 바운딩 박스 좌표를 계산합니다.
1772
+ *
1773
+ * @param params 계산 파라미터
1774
+ * @param params.lat 마커의 중심 위도
1775
+ * @param params.lng 마커의 중심 경도
1776
+ * @param params.width 마커의 너비 (픽셀 단위, boxWidth)
1777
+ * @param params.height 마커의 높이 (픽셀 단위, boxHeight)
1778
+ * @param params.controller MintMapController 인스턴스 (뷰포트 상태를 알기 위해 필요)
1779
+ * @param params.tailHeight 마커 꼬리 높이 (픽셀 단위, 기본값: 0)
1780
+ * @param params.offsetX 마커 오프셋 X (픽셀 단위, 기본값: 0)
1781
+ * @param params.offsetY 마커 오프셋 Y (픽셀 단위, 기본값: 0)
1782
+ * @returns 마커 바운딩 박스 좌표 (위도/경도) 또는 null
1783
+ *
1784
+ * @example
1785
+ * ```typescript
1786
+ * const boundingBox = calculateMarkerBoundingBox({
1787
+ * lat: 37.5665,
1788
+ * lng: 126.9780,
1789
+ * width: 100,
1790
+ * height: 50,
1791
+ * controller: mintMapController
1792
+ * });
1793
+ *
1794
+ * if (boundingBox) {
1795
+ * console.log('왼쪽 상단:', boundingBox.leftTop);
1796
+ * console.log('우측 하단:', boundingBox.bottomRight);
1797
+ * }
1798
+ * ```
1799
+ */
1800
+
1801
+ var calculateMarkerBoundingBox = function (params) {
1802
+ try {
1803
+ var lat = params.lat,
1804
+ lng = params.lng,
1805
+ width = params.width,
1806
+ height = params.height,
1807
+ controller = params.controller,
1808
+ _a = params.tailHeight,
1809
+ tailHeight = _a === void 0 ? 0 : _a,
1810
+ _b = params.offsetX,
1811
+ offsetX = _b === void 0 ? 0 : _b,
1812
+ _c = params.offsetY,
1813
+ offsetY = _c === void 0 ? 0 : _c; // 마커의 중심 좌표를 화면 좌표로 변환
1814
+
1815
+ var markerPosition = new Position(lat, lng);
1816
+ var markerOffset = controller.positionToOffset(markerPosition);
1817
+ if (!markerOffset) return null; // 바운딩 박스의 화면 좌표 계산
1818
+
1819
+ var minX = markerOffset.x + offsetX - width / 2;
1820
+ var minY = markerOffset.y + offsetY - height - tailHeight;
1821
+ var maxX = markerOffset.x + offsetX + width / 2;
1822
+ var maxY = markerOffset.y + offsetY; // 왼쪽 상단 좌표를 위도/경도로 변환
1823
+
1824
+ var leftTopOffset = new Offset(minX, minY);
1825
+ var leftTop = controller.offsetToPosition(leftTopOffset); // 우측 하단 좌표를 위도/경도로 변환
1826
+
1827
+ var bottomRightOffset = new Offset(maxX, maxY);
1828
+ var bottomRight = controller.offsetToPosition(bottomRightOffset);
1829
+ return {
1830
+ bottomRight: bottomRight,
1831
+ leftTop: leftTop
1832
+ };
1833
+ } catch (error) {
1834
+ console.error('[calculateMarkerBoundingBox] error:', error);
1835
+ return null;
1836
+ }
1837
+ };
1768
1838
 
1769
1839
  /**
1770
1840
  * 캔버스 데이터 타입 Enum
@@ -4226,25 +4296,17 @@
4226
4296
 
4227
4297
 
4228
4298
  var getMarkerBoundingBoxCoordinates = function (item) {
4229
- try {
4230
- var offset = getOrComputeMarkerOffset(item);
4231
- if (!offset) return null;
4232
- var boundingBox = computeBoundingBox(item);
4233
- if (!boundingBox) return null; // 왼쪽 상단 좌표 (minX, minY)
4234
-
4235
- var leftTopOffset = new Offset(boundingBox.minX, boundingBox.minY);
4236
- var leftTop = controller.offsetToPosition(leftTopOffset); // 우측 하단 좌표 (maxX, maxY)
4237
-
4238
- var bottomRightOffset = new Offset(boundingBox.maxX, boundingBox.maxY);
4239
- var bottomRight = controller.offsetToPosition(bottomRightOffset);
4240
- return {
4241
- bottomRight: bottomRight,
4242
- leftTop: leftTop
4243
- };
4244
- } catch (error) {
4245
- console.error('[CanvasMarkerLayer] getMarkerBoundingBoxCoordinates error:', error, item);
4246
- return null;
4247
- }
4299
+ if (!item.position) return null;
4300
+ return calculateMarkerBoundingBox({
4301
+ controller: controller,
4302
+ height: item.boxHeight || 28,
4303
+ lat: item.position.lat,
4304
+ lng: item.position.lng,
4305
+ offsetX: item.offsetX || 0,
4306
+ offsetY: item.offsetY || 0,
4307
+ tailHeight: item.tailHeight || 0,
4308
+ width: item.boxWidth || 50
4309
+ });
4248
4310
  }; // 마우스 이동 이벤트 핸들러 (hover 감지)
4249
4311
 
4250
4312
 
@@ -10437,6 +10499,7 @@
10437
10499
  exports.SpatialHashGrid = SpatialHashGrid;
10438
10500
  exports.Status = Status;
10439
10501
  exports.buildSpatialIndex = buildSpatialIndex;
10502
+ exports.calculateMarkerBoundingBox = calculateMarkerBoundingBox;
10440
10503
  exports.calculateTextBoxWidth = calculateTextBoxWidth;
10441
10504
  exports.computeMarkerOffset = computeMarkerOffset;
10442
10505
  exports.computePolygonOffsets = computePolygonOffsets;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.61",
3
+ "version": "1.2.0-test.62",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",