@mint-ui/map 1.2.0-test.60 → 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.
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.d.ts +3 -8
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.js +16 -26
- package/dist/components/mint-map/core/advanced/shared/types.d.ts +11 -0
- package/dist/components/mint-map/core/advanced/shared/utils.d.ts +43 -0
- package/dist/components/mint-map/core/advanced/shared/utils.js +71 -0
- package/dist/index.es.js +86 -26
- package/dist/index.js +1 -0
- package/dist/index.umd.js +86 -25
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { MarkerOptions
|
|
2
|
+
import { MarkerOptions } from '../../../types';
|
|
3
3
|
import { CanvasData, CustomRenderBase, CustomRenderEvent } from '../shared';
|
|
4
4
|
export { CanvasDataType, CanvasProvider, LRUCache, SpatialHashGrid } from '../shared';
|
|
5
|
-
export type { CanvasData, CanvasOption, CustomRenderBase, CustomRenderEvent, RenderBaseParams, RenderEventParams, RenderUtils } from '../shared';
|
|
5
|
+
export type { CanvasData, CanvasOption, CustomRenderBase, CustomRenderEvent, MarkerBoundingBox, RenderBaseParams, RenderEventParams, RenderUtils } from '../shared';
|
|
6
6
|
/**
|
|
7
7
|
* CanvasMarkerLayer Props
|
|
8
8
|
*
|
|
@@ -14,12 +14,7 @@ export interface CanvasMarkerLayerProps<T> extends Pick<MarkerOptions, 'zIndex'
|
|
|
14
14
|
/** 마커 클릭 시 호출되는 콜백 함수 */
|
|
15
15
|
onClick?: (payload: CanvasData<T>, selectedIds: Set<string>) => void;
|
|
16
16
|
/** 마커에 마우스 오버 시 호출되는 콜백 함수 */
|
|
17
|
-
onMouseOver?: (payload: CanvasData<T>
|
|
18
|
-
boundingBox?: {
|
|
19
|
-
bottomRight: Position;
|
|
20
|
-
leftTop: Position;
|
|
21
|
-
};
|
|
22
|
-
}) => void;
|
|
17
|
+
onMouseOver?: (payload: CanvasData<T>) => void;
|
|
23
18
|
/** 마커에서 마우스 아웃 시 호출되는 콜백 함수 */
|
|
24
19
|
onMouseOut?: (payload: CanvasData<T>) => void;
|
|
25
20
|
/** 다중 선택 활성화 여부 (기본값: false) */
|
|
@@ -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
|
-
|
|
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
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
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
|
|
|
@@ -416,12 +408,11 @@ var CanvasMarkerLayer = function (props) {
|
|
|
416
408
|
if (prevHovered) onMouseOut === null || onMouseOut === void 0 ? void 0 : onMouseOut(prevHovered);
|
|
417
409
|
|
|
418
410
|
if (hoveredItem) {
|
|
419
|
-
var boundingBox = getMarkerBoundingBoxCoordinates(hoveredItem); // boundingBox를 명시적으로 포함 (
|
|
411
|
+
var boundingBox = getMarkerBoundingBoxCoordinates(hoveredItem); // boundingBox를 명시적으로 포함 (CanvasData<T>에 boundingBox 속성이 포함됨)
|
|
420
412
|
|
|
421
413
|
var payload = tslib.__assign(tslib.__assign({}, hoveredItem), {
|
|
422
414
|
boundingBox: boundingBox || undefined
|
|
423
|
-
});
|
|
424
|
-
|
|
415
|
+
});
|
|
425
416
|
|
|
426
417
|
onMouseOver === null || onMouseOver === void 0 ? void 0 : onMouseOver(payload);
|
|
427
418
|
}
|
|
@@ -535,12 +526,11 @@ var CanvasMarkerLayer = function (props) {
|
|
|
535
526
|
if (context$1) {
|
|
536
527
|
// context를 통한 onMouseOver 호출 시에도 boundingBox를 포함하도록 래핑
|
|
537
528
|
var wrappedOnMouseOver = onMouseOver ? function (payload) {
|
|
538
|
-
var boundingBox = getMarkerBoundingBoxCoordinates(payload); // boundingBox를 명시적으로 포함 (
|
|
529
|
+
var boundingBox = getMarkerBoundingBoxCoordinates(payload); // boundingBox를 명시적으로 포함 (CanvasData<T>에 boundingBox 속성이 포함됨)
|
|
539
530
|
|
|
540
531
|
var enhancedPayload = tslib.__assign(tslib.__assign({}, payload), {
|
|
541
532
|
boundingBox: boundingBox || undefined
|
|
542
|
-
});
|
|
543
|
-
|
|
533
|
+
});
|
|
544
534
|
|
|
545
535
|
onMouseOver(enhancedPayload);
|
|
546
536
|
} : undefined;
|
|
@@ -14,6 +14,15 @@ export interface Paths {
|
|
|
14
14
|
type: string;
|
|
15
15
|
coordinates: number[][][][];
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* 마커 바운딩 박스 좌표 (위도/경도)
|
|
19
|
+
*/
|
|
20
|
+
export interface MarkerBoundingBox {
|
|
21
|
+
/** 왼쪽 상단 좌표 */
|
|
22
|
+
leftTop: Position;
|
|
23
|
+
/** 우측 하단 좌표 */
|
|
24
|
+
bottomRight: Position;
|
|
25
|
+
}
|
|
17
26
|
/**
|
|
18
27
|
* 캔버스 마커/폴리곤의 기본 필수 속성
|
|
19
28
|
*/
|
|
@@ -29,6 +38,8 @@ export interface CanvasOption {
|
|
|
29
38
|
offsetX?: number;
|
|
30
39
|
/** 렌더링 오프셋 Y (픽셀 단위, 기본값: 0) */
|
|
31
40
|
offsetY?: number;
|
|
41
|
+
/** 마커 바운딩 박스 좌표 (onMouseOver 이벤트에서만 제공됨) */
|
|
42
|
+
boundingBox?: MarkerBoundingBox;
|
|
32
43
|
}
|
|
33
44
|
/**
|
|
34
45
|
* 서버 데이터와 캔버스 옵션을 결합한 타입
|
|
@@ -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
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
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
|
|
|
@@ -4257,12 +4319,11 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4257
4319
|
if (prevHovered) onMouseOut === null || onMouseOut === void 0 ? void 0 : onMouseOut(prevHovered);
|
|
4258
4320
|
|
|
4259
4321
|
if (hoveredItem) {
|
|
4260
|
-
var boundingBox = getMarkerBoundingBoxCoordinates(hoveredItem); // boundingBox를 명시적으로 포함 (
|
|
4322
|
+
var boundingBox = getMarkerBoundingBoxCoordinates(hoveredItem); // boundingBox를 명시적으로 포함 (CanvasData<T>에 boundingBox 속성이 포함됨)
|
|
4261
4323
|
|
|
4262
4324
|
var payload = __assign(__assign({}, hoveredItem), {
|
|
4263
4325
|
boundingBox: boundingBox || undefined
|
|
4264
|
-
});
|
|
4265
|
-
|
|
4326
|
+
});
|
|
4266
4327
|
|
|
4267
4328
|
onMouseOver === null || onMouseOver === void 0 ? void 0 : onMouseOver(payload);
|
|
4268
4329
|
}
|
|
@@ -4376,12 +4437,11 @@ var CanvasMarkerLayer = function (props) {
|
|
|
4376
4437
|
if (context) {
|
|
4377
4438
|
// context를 통한 onMouseOver 호출 시에도 boundingBox를 포함하도록 래핑
|
|
4378
4439
|
var wrappedOnMouseOver = onMouseOver ? function (payload) {
|
|
4379
|
-
var boundingBox = getMarkerBoundingBoxCoordinates(payload); // boundingBox를 명시적으로 포함 (
|
|
4440
|
+
var boundingBox = getMarkerBoundingBoxCoordinates(payload); // boundingBox를 명시적으로 포함 (CanvasData<T>에 boundingBox 속성이 포함됨)
|
|
4380
4441
|
|
|
4381
4442
|
var enhancedPayload = __assign(__assign({}, payload), {
|
|
4382
4443
|
boundingBox: boundingBox || undefined
|
|
4383
|
-
});
|
|
4384
|
-
|
|
4444
|
+
});
|
|
4385
4445
|
|
|
4386
4446
|
onMouseOver(enhancedPayload);
|
|
4387
4447
|
} : undefined;
|
|
@@ -10389,4 +10449,4 @@ function MintMap(_a) {
|
|
|
10389
10449
|
}), loading));
|
|
10390
10450
|
}
|
|
10391
10451
|
|
|
10392
|
-
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
|
-
|
|
4230
|
-
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
|
|
4236
|
-
|
|
4237
|
-
|
|
4238
|
-
|
|
4239
|
-
|
|
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
|
|
|
@@ -4261,12 +4323,11 @@
|
|
|
4261
4323
|
if (prevHovered) onMouseOut === null || onMouseOut === void 0 ? void 0 : onMouseOut(prevHovered);
|
|
4262
4324
|
|
|
4263
4325
|
if (hoveredItem) {
|
|
4264
|
-
var boundingBox = getMarkerBoundingBoxCoordinates(hoveredItem); // boundingBox를 명시적으로 포함 (
|
|
4326
|
+
var boundingBox = getMarkerBoundingBoxCoordinates(hoveredItem); // boundingBox를 명시적으로 포함 (CanvasData<T>에 boundingBox 속성이 포함됨)
|
|
4265
4327
|
|
|
4266
4328
|
var payload = tslib.__assign(tslib.__assign({}, hoveredItem), {
|
|
4267
4329
|
boundingBox: boundingBox || undefined
|
|
4268
|
-
});
|
|
4269
|
-
|
|
4330
|
+
});
|
|
4270
4331
|
|
|
4271
4332
|
onMouseOver === null || onMouseOver === void 0 ? void 0 : onMouseOver(payload);
|
|
4272
4333
|
}
|
|
@@ -4380,12 +4441,11 @@
|
|
|
4380
4441
|
if (context) {
|
|
4381
4442
|
// context를 통한 onMouseOver 호출 시에도 boundingBox를 포함하도록 래핑
|
|
4382
4443
|
var wrappedOnMouseOver = onMouseOver ? function (payload) {
|
|
4383
|
-
var boundingBox = getMarkerBoundingBoxCoordinates(payload); // boundingBox를 명시적으로 포함 (
|
|
4444
|
+
var boundingBox = getMarkerBoundingBoxCoordinates(payload); // boundingBox를 명시적으로 포함 (CanvasData<T>에 boundingBox 속성이 포함됨)
|
|
4384
4445
|
|
|
4385
4446
|
var enhancedPayload = tslib.__assign(tslib.__assign({}, payload), {
|
|
4386
4447
|
boundingBox: boundingBox || undefined
|
|
4387
|
-
});
|
|
4388
|
-
|
|
4448
|
+
});
|
|
4389
4449
|
|
|
4390
4450
|
onMouseOver(enhancedPayload);
|
|
4391
4451
|
} : undefined;
|
|
@@ -10439,6 +10499,7 @@
|
|
|
10439
10499
|
exports.SpatialHashGrid = SpatialHashGrid;
|
|
10440
10500
|
exports.Status = Status;
|
|
10441
10501
|
exports.buildSpatialIndex = buildSpatialIndex;
|
|
10502
|
+
exports.calculateMarkerBoundingBox = calculateMarkerBoundingBox;
|
|
10442
10503
|
exports.calculateTextBoxWidth = calculateTextBoxWidth;
|
|
10443
10504
|
exports.computeMarkerOffset = computeMarkerOffset;
|
|
10444
10505
|
exports.computePolygonOffsets = computePolygonOffsets;
|