@mint-ui/map 1.2.0-test.61 → 1.2.0-test.63
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 +91 -6
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.js +423 -77
- package/dist/components/mint-map/core/advanced/shared/types.d.ts +2 -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 +493 -77
- package/dist/index.js +1 -0
- package/dist/index.umd.js +493 -76
- package/package.json +1 -1
|
@@ -129,6 +129,8 @@ export interface RenderEventParams<T> {
|
|
|
129
129
|
utils: RenderUtils<T>;
|
|
130
130
|
selectedItems?: CanvasData<T>[];
|
|
131
131
|
selectedItem?: CanvasData<T> | null;
|
|
132
|
+
/** hover 시 마커를 최상단으로 표시할지 여부 (기본값: false) */
|
|
133
|
+
topOnHover?: boolean;
|
|
132
134
|
}
|
|
133
135
|
/**
|
|
134
136
|
* 커스텀 렌더링 함수 타입 - Event Layer
|
|
@@ -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;
|