tg-map-core 4.2.2 → 4.2.3
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/README.md +3 -3
- package/dist/src/map/map/controls/map-type.control.d.ts +1 -1
- package/dist/src/map/map/extra/marker-clusterer.d.ts +4 -0
- package/dist/src/map/map/overlay/circle.d.ts +1 -1
- package/dist/src/map/map/talks-map.d.ts +1 -0
- package/dist/src/utils/talks-layers.d.ts +1 -1
- package/dist/tg-map-core.cjs +53 -20
- package/dist/tg-map-core.mjs +53 -20
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/map/dts/baidu.d.ts +62 -62
- package/src/map/dts/google.d.ts +10 -10
- package/src/map/dts/here-v31.d.ts +16 -16
- package/src/map/dts/index.d.ts +4 -4
- package/src/map/dts/js-modules.d.ts +15 -15
- package/src/map/dts/maptalks.d.ts +83 -83
- package/src/map/dts/maptalks.markercluster.d.ts +35 -35
package/README.md
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
# tg-map-core
|
|
2
|
-
|
|
3
|
-
封装 百度地图, Google地图, Here地图(未完成), Maptalks 的地图库
|
|
1
|
+
# tg-map-core
|
|
2
|
+
|
|
3
|
+
封装 百度地图, Google地图, Here地图(未完成), Maptalks 的地图库
|
|
@@ -18,7 +18,7 @@ export interface MapTypeControlOptions {
|
|
|
18
18
|
mapTypes?: MapType[];
|
|
19
19
|
}
|
|
20
20
|
export declare class BaiduMapTypeControl extends BaiduControl<BMap.MapTypeControl> implements MapTypeControl {
|
|
21
|
-
static create(this: BaiduMap, options: MapTypeControlOptions):
|
|
21
|
+
static create(this: BaiduMap, options: MapTypeControlOptions): BaiduMapTypeControl | EmptyControl;
|
|
22
22
|
}
|
|
23
23
|
export declare class GoogleMapTypeControl extends GoogleControl implements MapTypeControl {
|
|
24
24
|
type: MapTypeControlType;
|
|
@@ -134,6 +134,10 @@ export declare class TalksMarkerClusterer implements MarkerClusterer {
|
|
|
134
134
|
private map;
|
|
135
135
|
inner: ClusterLayer;
|
|
136
136
|
constructor(map: TalksMap, options: MarkerClustererOptions);
|
|
137
|
+
private checkMarkersVisibility;
|
|
138
|
+
private timeoutId;
|
|
139
|
+
private isRenderStarted;
|
|
140
|
+
private postCheckMarkersVisibility;
|
|
137
141
|
clearMarkers(removeFromMap?: boolean): void;
|
|
138
142
|
addMarker(marker: TalksMarker): void;
|
|
139
143
|
removeMarker(marker: TalksMarker): boolean;
|
|
@@ -35,7 +35,7 @@ export declare class BaiduCircle extends BaiduShape<BMap.Circle> implements Circ
|
|
|
35
35
|
private isDoingSetCenter;
|
|
36
36
|
private isDoingSetRadius;
|
|
37
37
|
private eventHubDelegate;
|
|
38
|
-
protected createDelegate(): EventHubEventTargetDelegate<"
|
|
38
|
+
protected createDelegate(): EventHubEventTargetDelegate<"radius-changed" | "center-changed">;
|
|
39
39
|
private onRadiusChanged;
|
|
40
40
|
private onCenterChanged;
|
|
41
41
|
private resetEditableTimeoutId;
|
|
@@ -60,6 +60,7 @@ export declare class TalksMap extends BaseMap {
|
|
|
60
60
|
setDoubleClickZoom(enable: boolean): void;
|
|
61
61
|
getCenter(): LatLng;
|
|
62
62
|
setCenter(latlng: LatLng): void;
|
|
63
|
+
setZoom(zoom: number): void;
|
|
63
64
|
setMinZoom(zoom: number): void;
|
|
64
65
|
setMaxZoom(zoom: number): void;
|
|
65
66
|
setMapStyle(mapStyle?: MapStyle): void;
|
|
@@ -6,7 +6,7 @@ export declare function talksBaseLayerIdToCoordType(layerId: TalksBaseLayerId |
|
|
|
6
6
|
readonly __flavor__?: 'layerId';
|
|
7
7
|
})): CoordType;
|
|
8
8
|
declare function createTalksBaseLayerImpl(layerId: TalksBaseLayerId, { id, visible, }?: {
|
|
9
|
-
id?: "osm" | "osm-light" | "osm-dark" | "osm-terrain" | "
|
|
9
|
+
id?: "google" | "osm" | "osm-light" | "osm-dark" | "osm-terrain" | "baidu" | "baidu-detail" | "amap" | "amap-terrain" | "tencent" | "geoq" | "tianditu" | "yandex" | "bing" | undefined;
|
|
10
10
|
visible?: boolean | undefined;
|
|
11
11
|
}): maptalks.TileLayer;
|
|
12
12
|
export declare const createTalksBaseLayer: typeof createTalksBaseLayerImpl;
|
package/dist/tg-map-core.cjs
CHANGED
|
@@ -7120,7 +7120,7 @@ function includesMethod(keys) {
|
|
|
7120
7120
|
/** 用于替代Vue2中的filter, 直接交给模板使用 */
|
|
7121
7121
|
exports.Objects.toJsonSafely;
|
|
7122
7122
|
|
|
7123
|
-
// cspell: ignore bmaplib, markerclusterer, texticonoverlay
|
|
7123
|
+
// cspell: ignore bmaplib, markerclusterer, texticonoverlay, renderend, renderstart
|
|
7124
7124
|
const createDefaultStylesIndexCalculator = (_styles) => {
|
|
7125
7125
|
if (_styles?.[0]?.minMarkersLength == null) {
|
|
7126
7126
|
return undefined;
|
|
@@ -7373,30 +7373,57 @@ class TalksMarkerClusterer {
|
|
|
7373
7373
|
}
|
|
7374
7374
|
});
|
|
7375
7375
|
map.innerMap.addLayer(this.inner);
|
|
7376
|
-
|
|
7377
|
-
//
|
|
7378
|
-
|
|
7379
|
-
|
|
7380
|
-
|
|
7381
|
-
|
|
7382
|
-
|
|
7383
|
-
|
|
7384
|
-
|
|
7385
|
-
|
|
7386
|
-
|
|
7376
|
+
this.inner.on('renderstart', () => {
|
|
7377
|
+
// renderstart在每次渲染时都会触发, renderend在动画时, 不会每次都触发
|
|
7378
|
+
// 渲染过程中, 才会重新计算getCurrentNeedRenderGeos(), 故需要等待渲染执行过之后, 再去执行checkMarkersVisibility
|
|
7379
|
+
this.isRenderStarted = true;
|
|
7380
|
+
});
|
|
7381
|
+
map.innerMap.on('zoomend', this.postCheckMarkersVisibility);
|
|
7382
|
+
this.postCheckMarkersVisibility();
|
|
7383
|
+
}
|
|
7384
|
+
checkMarkersVisibility = () => {
|
|
7385
|
+
// 检测marker在点聚合中的可见性改变, 然后发送事件通知marker点
|
|
7386
|
+
const visibleMarkerSet = new Set(this.inner.getRenderer()?.getCurrentNeedRenderGeos() ?? []);
|
|
7387
|
+
const markers = this.inner.getGeometries();
|
|
7388
|
+
for (const marker of markers) {
|
|
7389
|
+
const prev = marker.__visible_in_cluster ?? marker.isVisible();
|
|
7390
|
+
const curr = visibleMarkerSet.has(marker);
|
|
7391
|
+
if (prev !== curr) {
|
|
7392
|
+
marker.__visible_in_cluster = curr;
|
|
7393
|
+
marker.fire('visible-change-in-cluster', { visible: curr });
|
|
7387
7394
|
}
|
|
7388
|
-
}
|
|
7389
|
-
|
|
7390
|
-
|
|
7391
|
-
|
|
7395
|
+
}
|
|
7396
|
+
};
|
|
7397
|
+
timeoutId;
|
|
7398
|
+
isRenderStarted = false;
|
|
7399
|
+
postCheckMarkersVisibility = () => {
|
|
7400
|
+
clearTimeout(this.timeoutId);
|
|
7401
|
+
if (!this.inner.getCount()) {
|
|
7402
|
+
// 没有marker点, 不需要检测
|
|
7403
|
+
return;
|
|
7404
|
+
}
|
|
7405
|
+
this.isRenderStarted = false;
|
|
7406
|
+
const waitRenderStarted = (times = 0) => {
|
|
7407
|
+
// 为了防止无限等待, 最多等3次
|
|
7408
|
+
if (this.isRenderStarted || times > 3) {
|
|
7409
|
+
this.checkMarkersVisibility();
|
|
7410
|
+
}
|
|
7411
|
+
else {
|
|
7412
|
+
this.timeoutId = setTimeout(() => waitRenderStarted(times + 1), 50);
|
|
7413
|
+
}
|
|
7414
|
+
};
|
|
7415
|
+
this.timeoutId = setTimeout(waitRenderStarted, 100);
|
|
7416
|
+
};
|
|
7392
7417
|
clearMarkers(removeFromMap = true) {
|
|
7393
7418
|
this.inner.clear();
|
|
7394
7419
|
if (removeFromMap) {
|
|
7395
7420
|
this.inner.remove();
|
|
7421
|
+
clearTimeout(this.timeoutId);
|
|
7396
7422
|
}
|
|
7397
7423
|
}
|
|
7398
7424
|
addMarker(marker) {
|
|
7399
7425
|
this.inner.addMarker(marker.innerOverlay);
|
|
7426
|
+
this.postCheckMarkersVisibility();
|
|
7400
7427
|
}
|
|
7401
7428
|
removeMarker(marker) {
|
|
7402
7429
|
this.inner.removeGeometry(marker.innerOverlay);
|
|
@@ -7404,6 +7431,7 @@ class TalksMarkerClusterer {
|
|
|
7404
7431
|
}
|
|
7405
7432
|
addMarkers(markers) {
|
|
7406
7433
|
this.inner.addMarker(markers.map(it => it.innerOverlay));
|
|
7434
|
+
this.postCheckMarkersVisibility();
|
|
7407
7435
|
}
|
|
7408
7436
|
removeMarkers(markers) {
|
|
7409
7437
|
this.inner.removeGeometry(markers.map(it => it.innerOverlay));
|
|
@@ -9189,9 +9217,9 @@ class BaiduLabelOverlay extends BaiduOverlay {
|
|
|
9189
9217
|
icon.__icon__.scale,
|
|
9190
9218
|
icon.__icon__.strokeWeight,
|
|
9191
9219
|
].map(it => it ?? '').join(',');
|
|
9192
|
-
console.warn('BaiduLabelOverlay.attachIcon', icon.__icon__, exports.Strings.trimIndent(`
|
|
9193
|
-
为了保证Label的位置正确, 请将SymbolIcon(${iconInfo})中baiduLabelOffset的值改写成:
|
|
9194
|
-
${JSON.stringify({ x, y })}
|
|
9220
|
+
console.warn('BaiduLabelOverlay.attachIcon', icon.__icon__, exports.Strings.trimIndent(`
|
|
9221
|
+
为了保证Label的位置正确, 请将SymbolIcon(${iconInfo})中baiduLabelOffset的值改写成:
|
|
9222
|
+
${JSON.stringify({ x, y })}
|
|
9195
9223
|
`));
|
|
9196
9224
|
}
|
|
9197
9225
|
}, 1);
|
|
@@ -9295,7 +9323,7 @@ class TalksLabelOverlay extends TalksOverlay {
|
|
|
9295
9323
|
});
|
|
9296
9324
|
}
|
|
9297
9325
|
setZIndex(zIndex) {
|
|
9298
|
-
this.setZIndex(zIndex);
|
|
9326
|
+
this.innerOverlay.setZIndex(zIndex);
|
|
9299
9327
|
}
|
|
9300
9328
|
}
|
|
9301
9329
|
|
|
@@ -9874,6 +9902,7 @@ class TalksMarker extends TalksOverlay {
|
|
|
9874
9902
|
};
|
|
9875
9903
|
const mapChanged = this.labelMapChangedListener = () => {
|
|
9876
9904
|
// 存在layer说明marker已经被添加到地图上, label也要添加进去
|
|
9905
|
+
// TODO: 2026/02/05 ipcjs 向talks地图中添加label非常耗时, 并且如果在点聚合中, 大部分label其实会被隐藏, 这里是一个可以优化的点
|
|
9877
9906
|
if (this.innerOverlay.getLayer()) {
|
|
9878
9907
|
this.map.addOverlay(label);
|
|
9879
9908
|
}
|
|
@@ -11385,6 +11414,10 @@ class TalksMap extends BaseMap {
|
|
|
11385
11414
|
setCenter(latlng) {
|
|
11386
11415
|
this.map.setCenter(latlng.toTalks(this.coordType));
|
|
11387
11416
|
}
|
|
11417
|
+
setZoom(zoom) {
|
|
11418
|
+
// tg-map中, setZoom的语义是直接改变zoom, 不播放动画
|
|
11419
|
+
this.map.setZoom(zoom, { animation: false });
|
|
11420
|
+
}
|
|
11388
11421
|
setMinZoom(zoom) {
|
|
11389
11422
|
this.map.setMinZoom(zoom);
|
|
11390
11423
|
}
|
package/dist/tg-map-core.mjs
CHANGED
|
@@ -7093,7 +7093,7 @@ function includesMethod(keys) {
|
|
|
7093
7093
|
/** 用于替代Vue2中的filter, 直接交给模板使用 */
|
|
7094
7094
|
Objects.toJsonSafely;
|
|
7095
7095
|
|
|
7096
|
-
// cspell: ignore bmaplib, markerclusterer, texticonoverlay
|
|
7096
|
+
// cspell: ignore bmaplib, markerclusterer, texticonoverlay, renderend, renderstart
|
|
7097
7097
|
const createDefaultStylesIndexCalculator = (_styles) => {
|
|
7098
7098
|
if (_styles?.[0]?.minMarkersLength == null) {
|
|
7099
7099
|
return undefined;
|
|
@@ -7346,30 +7346,57 @@ class TalksMarkerClusterer {
|
|
|
7346
7346
|
}
|
|
7347
7347
|
});
|
|
7348
7348
|
map.innerMap.addLayer(this.inner);
|
|
7349
|
-
|
|
7350
|
-
//
|
|
7351
|
-
|
|
7352
|
-
|
|
7353
|
-
|
|
7354
|
-
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
|
|
7358
|
-
|
|
7359
|
-
|
|
7349
|
+
this.inner.on('renderstart', () => {
|
|
7350
|
+
// renderstart在每次渲染时都会触发, renderend在动画时, 不会每次都触发
|
|
7351
|
+
// 渲染过程中, 才会重新计算getCurrentNeedRenderGeos(), 故需要等待渲染执行过之后, 再去执行checkMarkersVisibility
|
|
7352
|
+
this.isRenderStarted = true;
|
|
7353
|
+
});
|
|
7354
|
+
map.innerMap.on('zoomend', this.postCheckMarkersVisibility);
|
|
7355
|
+
this.postCheckMarkersVisibility();
|
|
7356
|
+
}
|
|
7357
|
+
checkMarkersVisibility = () => {
|
|
7358
|
+
// 检测marker在点聚合中的可见性改变, 然后发送事件通知marker点
|
|
7359
|
+
const visibleMarkerSet = new Set(this.inner.getRenderer()?.getCurrentNeedRenderGeos() ?? []);
|
|
7360
|
+
const markers = this.inner.getGeometries();
|
|
7361
|
+
for (const marker of markers) {
|
|
7362
|
+
const prev = marker.__visible_in_cluster ?? marker.isVisible();
|
|
7363
|
+
const curr = visibleMarkerSet.has(marker);
|
|
7364
|
+
if (prev !== curr) {
|
|
7365
|
+
marker.__visible_in_cluster = curr;
|
|
7366
|
+
marker.fire('visible-change-in-cluster', { visible: curr });
|
|
7360
7367
|
}
|
|
7361
|
-
}
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
|
|
7368
|
+
}
|
|
7369
|
+
};
|
|
7370
|
+
timeoutId;
|
|
7371
|
+
isRenderStarted = false;
|
|
7372
|
+
postCheckMarkersVisibility = () => {
|
|
7373
|
+
clearTimeout(this.timeoutId);
|
|
7374
|
+
if (!this.inner.getCount()) {
|
|
7375
|
+
// 没有marker点, 不需要检测
|
|
7376
|
+
return;
|
|
7377
|
+
}
|
|
7378
|
+
this.isRenderStarted = false;
|
|
7379
|
+
const waitRenderStarted = (times = 0) => {
|
|
7380
|
+
// 为了防止无限等待, 最多等3次
|
|
7381
|
+
if (this.isRenderStarted || times > 3) {
|
|
7382
|
+
this.checkMarkersVisibility();
|
|
7383
|
+
}
|
|
7384
|
+
else {
|
|
7385
|
+
this.timeoutId = setTimeout(() => waitRenderStarted(times + 1), 50);
|
|
7386
|
+
}
|
|
7387
|
+
};
|
|
7388
|
+
this.timeoutId = setTimeout(waitRenderStarted, 100);
|
|
7389
|
+
};
|
|
7365
7390
|
clearMarkers(removeFromMap = true) {
|
|
7366
7391
|
this.inner.clear();
|
|
7367
7392
|
if (removeFromMap) {
|
|
7368
7393
|
this.inner.remove();
|
|
7394
|
+
clearTimeout(this.timeoutId);
|
|
7369
7395
|
}
|
|
7370
7396
|
}
|
|
7371
7397
|
addMarker(marker) {
|
|
7372
7398
|
this.inner.addMarker(marker.innerOverlay);
|
|
7399
|
+
this.postCheckMarkersVisibility();
|
|
7373
7400
|
}
|
|
7374
7401
|
removeMarker(marker) {
|
|
7375
7402
|
this.inner.removeGeometry(marker.innerOverlay);
|
|
@@ -7377,6 +7404,7 @@ class TalksMarkerClusterer {
|
|
|
7377
7404
|
}
|
|
7378
7405
|
addMarkers(markers) {
|
|
7379
7406
|
this.inner.addMarker(markers.map(it => it.innerOverlay));
|
|
7407
|
+
this.postCheckMarkersVisibility();
|
|
7380
7408
|
}
|
|
7381
7409
|
removeMarkers(markers) {
|
|
7382
7410
|
this.inner.removeGeometry(markers.map(it => it.innerOverlay));
|
|
@@ -9162,9 +9190,9 @@ class BaiduLabelOverlay extends BaiduOverlay {
|
|
|
9162
9190
|
icon.__icon__.scale,
|
|
9163
9191
|
icon.__icon__.strokeWeight,
|
|
9164
9192
|
].map(it => it ?? '').join(',');
|
|
9165
|
-
console.warn('BaiduLabelOverlay.attachIcon', icon.__icon__, Strings.trimIndent(`
|
|
9166
|
-
为了保证Label的位置正确, 请将SymbolIcon(${iconInfo})中baiduLabelOffset的值改写成:
|
|
9167
|
-
${JSON.stringify({ x, y })}
|
|
9193
|
+
console.warn('BaiduLabelOverlay.attachIcon', icon.__icon__, Strings.trimIndent(`
|
|
9194
|
+
为了保证Label的位置正确, 请将SymbolIcon(${iconInfo})中baiduLabelOffset的值改写成:
|
|
9195
|
+
${JSON.stringify({ x, y })}
|
|
9168
9196
|
`));
|
|
9169
9197
|
}
|
|
9170
9198
|
}, 1);
|
|
@@ -9268,7 +9296,7 @@ class TalksLabelOverlay extends TalksOverlay {
|
|
|
9268
9296
|
});
|
|
9269
9297
|
}
|
|
9270
9298
|
setZIndex(zIndex) {
|
|
9271
|
-
this.setZIndex(zIndex);
|
|
9299
|
+
this.innerOverlay.setZIndex(zIndex);
|
|
9272
9300
|
}
|
|
9273
9301
|
}
|
|
9274
9302
|
|
|
@@ -9847,6 +9875,7 @@ class TalksMarker extends TalksOverlay {
|
|
|
9847
9875
|
};
|
|
9848
9876
|
const mapChanged = this.labelMapChangedListener = () => {
|
|
9849
9877
|
// 存在layer说明marker已经被添加到地图上, label也要添加进去
|
|
9878
|
+
// TODO: 2026/02/05 ipcjs 向talks地图中添加label非常耗时, 并且如果在点聚合中, 大部分label其实会被隐藏, 这里是一个可以优化的点
|
|
9850
9879
|
if (this.innerOverlay.getLayer()) {
|
|
9851
9880
|
this.map.addOverlay(label);
|
|
9852
9881
|
}
|
|
@@ -11358,6 +11387,10 @@ class TalksMap extends BaseMap {
|
|
|
11358
11387
|
setCenter(latlng) {
|
|
11359
11388
|
this.map.setCenter(latlng.toTalks(this.coordType));
|
|
11360
11389
|
}
|
|
11390
|
+
setZoom(zoom) {
|
|
11391
|
+
// tg-map中, setZoom的语义是直接改变zoom, 不播放动画
|
|
11392
|
+
this.map.setZoom(zoom, { animation: false });
|
|
11393
|
+
}
|
|
11361
11394
|
setMinZoom(zoom) {
|
|
11362
11395
|
this.map.setMinZoom(zoom);
|
|
11363
11396
|
}
|