@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.
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.js +12 -20
- 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 +82 -20
- package/dist/index.js +1 -0
- package/dist/index.umd.js +82 -19
- package/package.json +1 -1
|
@@ -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
|
|
|
@@ -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
|
|
|
@@ -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
|
-
|
|
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
|
|
|
@@ -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;
|