tg-map-core 4.1.7 → 4.2.0
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/src/map/event-target.d.ts +5 -0
- package/dist/src/map/map/baidu-map.d.ts +0 -3
- package/dist/src/map/map/google-map.d.ts +0 -3
- package/dist/src/map/map/here-map.d.ts +0 -3
- package/dist/src/map/map/map.d.ts +2 -2
- package/dist/src/map/map/overlay/circle.d.ts +7 -1
- package/dist/src/map/map/overlay/label.d.ts +2 -0
- package/dist/src/map/map/overlay/marker-label.d.ts +2 -0
- package/dist/src/map/map/overlay/marker.d.ts +2 -0
- package/dist/src/map/map/overlay/overlay.d.ts +13 -2
- package/dist/src/map/map/overlay/polygon.d.ts +2 -1
- package/dist/src/map/map/overlay/polyline.d.ts +2 -1
- package/dist/src/map/map/overlay/rectangle.d.ts +2 -0
- package/dist/src/map/map/overlay/shape.d.ts +15 -0
- package/dist/src/map/map/talks-map.d.ts +0 -5
- package/dist/src/utils/talks-layers.d.ts +2 -2
- package/dist/tg-map-core.cjs +147 -45
- package/dist/tg-map-core.mjs +147 -45
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/dist/tg-map-core.mjs
CHANGED
|
@@ -1529,6 +1529,14 @@ class TalksEventTargetDelegate extends AbstractEventTargetDelegate {
|
|
|
1529
1529
|
'center-changed': 'movestart moving moveend zoomend',
|
|
1530
1530
|
'zoom-changed': 'zoomend',
|
|
1531
1531
|
});
|
|
1532
|
+
eventTypeMap;
|
|
1533
|
+
/**
|
|
1534
|
+
* @param eventTypeMap 额外的事件类型映射
|
|
1535
|
+
*/
|
|
1536
|
+
constructor(inner, coordTypeSupplier, eventTypeMap) {
|
|
1537
|
+
super(inner, coordTypeSupplier);
|
|
1538
|
+
this.eventTypeMap = { ...TalksEventTargetDelegate.EVENT_TYPE_MAP, ...eventTypeMap };
|
|
1539
|
+
}
|
|
1532
1540
|
addEventListener(type, listener) {
|
|
1533
1541
|
const key = generateEventKey(type, listener);
|
|
1534
1542
|
if (this.eventMap.has(key)) {
|
|
@@ -1546,14 +1554,14 @@ class TalksEventTargetDelegate extends AbstractEventTargetDelegate {
|
|
|
1546
1554
|
}
|
|
1547
1555
|
listener.call(this.target, ev);
|
|
1548
1556
|
};
|
|
1549
|
-
this.inner.on(
|
|
1557
|
+
this.inner.on(this.eventTypeMap[type] ?? type, actualListener);
|
|
1550
1558
|
this.eventMap.set(key, actualListener);
|
|
1551
1559
|
}
|
|
1552
1560
|
removeEventListener(type, listener) {
|
|
1553
1561
|
const key = generateEventKey(type, listener);
|
|
1554
1562
|
const actualListener = this.eventMap.get(key);
|
|
1555
1563
|
if (actualListener) {
|
|
1556
|
-
this.inner.off(
|
|
1564
|
+
this.inner.off(this.eventTypeMap[type] ?? type, actualListener);
|
|
1557
1565
|
this.eventMap.delete(key);
|
|
1558
1566
|
}
|
|
1559
1567
|
else {
|
|
@@ -7629,6 +7637,12 @@ class BaseMap {
|
|
|
7629
7637
|
removeOverlayMapType(mapType) {
|
|
7630
7638
|
this.removeLayer(mapType);
|
|
7631
7639
|
}
|
|
7640
|
+
addOverlay(overlay) {
|
|
7641
|
+
overlay.addTo(this);
|
|
7642
|
+
}
|
|
7643
|
+
removeOverlay(overlay) {
|
|
7644
|
+
overlay.remove();
|
|
7645
|
+
}
|
|
7632
7646
|
addControl(control) {
|
|
7633
7647
|
control.addTo(this);
|
|
7634
7648
|
}
|
|
@@ -7665,9 +7679,6 @@ class Overlay {
|
|
|
7665
7679
|
removeEventListener(type, listener) {
|
|
7666
7680
|
this.delegate.removeEventListener(type, listener);
|
|
7667
7681
|
}
|
|
7668
|
-
remove() {
|
|
7669
|
-
this.map.removeOverlay(this);
|
|
7670
|
-
}
|
|
7671
7682
|
}
|
|
7672
7683
|
class GoogleOverlay extends Overlay {
|
|
7673
7684
|
map;
|
|
@@ -7678,6 +7689,13 @@ class GoogleOverlay extends Overlay {
|
|
|
7678
7689
|
createDelegate() {
|
|
7679
7690
|
return new GoogleEventTargetDelegate(this.innerOverlay, this.map);
|
|
7680
7691
|
}
|
|
7692
|
+
addTo(map) {
|
|
7693
|
+
this.map = map;
|
|
7694
|
+
this.innerOverlay.setMap(map.innerMap);
|
|
7695
|
+
}
|
|
7696
|
+
remove() {
|
|
7697
|
+
this.innerOverlay.setMap(null);
|
|
7698
|
+
}
|
|
7681
7699
|
isVisible() {
|
|
7682
7700
|
return this.innerOverlay.getVisible();
|
|
7683
7701
|
}
|
|
@@ -7694,6 +7712,13 @@ class BaiduOverlay extends Overlay {
|
|
|
7694
7712
|
createDelegate() {
|
|
7695
7713
|
return new BaiduEventTargetDelegate(this.innerOverlay, this.map);
|
|
7696
7714
|
}
|
|
7715
|
+
addTo(map) {
|
|
7716
|
+
this.map = map;
|
|
7717
|
+
this.map.innerMap.addOverlay(this.innerOverlay);
|
|
7718
|
+
}
|
|
7719
|
+
remove() {
|
|
7720
|
+
this.map.innerMap.removeOverlay(this.innerOverlay);
|
|
7721
|
+
}
|
|
7697
7722
|
/** 仅限内部使用; 设为private时, 生成的d.ts文件中, 方法返回值会变成any, 故改成了public */
|
|
7698
7723
|
get overlay() {
|
|
7699
7724
|
// 这几个属性被声明成可选的, 这里将其强转成必选
|
|
@@ -7803,11 +7828,43 @@ class GoogleShape extends GoogleOverlay {
|
|
|
7803
7828
|
}
|
|
7804
7829
|
}
|
|
7805
7830
|
class TalksShape extends TalksOverlay {
|
|
7831
|
+
addTo(map) {
|
|
7832
|
+
this.map = map;
|
|
7833
|
+
this.map.overlayLayer.addGeometry(this.innerOverlay);
|
|
7834
|
+
// 添加到地图中之后, startEdit()才有效
|
|
7835
|
+
if (this.isEditable() && !this.innerOverlay.isEditing()) {
|
|
7836
|
+
this.innerOverlay.startEdit();
|
|
7837
|
+
}
|
|
7838
|
+
}
|
|
7839
|
+
remove() {
|
|
7840
|
+
this.map.overlayLayer.removeGeometry(this.innerOverlay);
|
|
7841
|
+
}
|
|
7842
|
+
/**
|
|
7843
|
+
* ## 编辑状态的映射
|
|
7844
|
+
* tg-map的editable, 直接表示是否处于编辑状态
|
|
7845
|
+
* talks的editable, 只是标记overlay是否可以编辑(默认为true), 要进入编辑状态(isEditing), 还需要执行startEdit()
|
|
7846
|
+
* 也就是说我们需要想办法把talks的四个状态, 映射为tg-map的两个状态
|
|
7847
|
+
*
|
|
7848
|
+
* 我们的做法是, 用editable保存isEditing期望的值, 保证editable为true时isEditing也会为true, 为false时isEditing也会为false
|
|
7849
|
+
* 这样就可以和tg-map的editable的语义简单对应上了
|
|
7850
|
+
*
|
|
7851
|
+
* @see addTo
|
|
7852
|
+
* @see setEditable
|
|
7853
|
+
*/
|
|
7806
7854
|
isEditable() {
|
|
7807
|
-
return this.innerOverlay.config().editable ??
|
|
7855
|
+
return this.innerOverlay.config().editable ?? false;
|
|
7808
7856
|
}
|
|
7809
7857
|
setEditable(editable) {
|
|
7858
|
+
// 同步设置editable和isEditing
|
|
7859
|
+
// TODO: 2026/01/23 ipcjs 切换编辑状态时, 控制台会报重复注册事件警告, 已提PR: https://github.com/maptalks/maptalks.js/pull/2796
|
|
7810
7860
|
this.innerOverlay.config({ editable: editable });
|
|
7861
|
+
const isEditing = this.innerOverlay.isEditing();
|
|
7862
|
+
if (editable) {
|
|
7863
|
+
!isEditing && this.innerOverlay.startEdit();
|
|
7864
|
+
}
|
|
7865
|
+
else {
|
|
7866
|
+
isEditing && this.innerOverlay.endEdit();
|
|
7867
|
+
}
|
|
7811
7868
|
}
|
|
7812
7869
|
setStrokeColor(color) {
|
|
7813
7870
|
this.innerOverlay.updateSymbol({ lineColor: color });
|
|
@@ -7977,6 +8034,41 @@ class TalksCircle extends TalksShape {
|
|
|
7977
8034
|
});
|
|
7978
8035
|
return new TalksCircle(inner, coord, this);
|
|
7979
8036
|
}
|
|
8037
|
+
prevCenter;
|
|
8038
|
+
prevRadius;
|
|
8039
|
+
eventHubDelegate;
|
|
8040
|
+
createDelegate() {
|
|
8041
|
+
return (this.eventHubDelegate = new EventHubEventTargetDelegate(super.createDelegate(), {
|
|
8042
|
+
types: ['radius-changed', 'center-changed'],
|
|
8043
|
+
onListen: (type) => {
|
|
8044
|
+
if (type === 'radius-changed') {
|
|
8045
|
+
this.prevRadius = this.innerOverlay.getRadius();
|
|
8046
|
+
this.innerOverlay.on('editrecord', this.onRadiusChanged);
|
|
8047
|
+
}
|
|
8048
|
+
else {
|
|
8049
|
+
this.prevCenter = this.innerOverlay.getCoordinates();
|
|
8050
|
+
this.innerOverlay.on('editrecord', this.onCenterChanged);
|
|
8051
|
+
}
|
|
8052
|
+
},
|
|
8053
|
+
onCancel: (type) => {
|
|
8054
|
+
this.innerOverlay.off('editrecord', type === 'radius-changed' ? this.onRadiusChanged : this.onCenterChanged);
|
|
8055
|
+
},
|
|
8056
|
+
}));
|
|
8057
|
+
}
|
|
8058
|
+
onRadiusChanged = () => {
|
|
8059
|
+
const radius = this.innerOverlay.getRadius();
|
|
8060
|
+
if (this.prevRadius !== radius) {
|
|
8061
|
+
this.eventHubDelegate?.notify({ type: 'radius-changed', target: this });
|
|
8062
|
+
this.prevRadius = radius;
|
|
8063
|
+
}
|
|
8064
|
+
};
|
|
8065
|
+
onCenterChanged = () => {
|
|
8066
|
+
const center = this.innerOverlay.getCoordinates();
|
|
8067
|
+
if (this.prevCenter !== center && !this.prevCenter?.equals(center)) {
|
|
8068
|
+
this.eventHubDelegate?.notify({ type: 'center-changed', target: this });
|
|
8069
|
+
this.prevCenter = center;
|
|
8070
|
+
}
|
|
8071
|
+
};
|
|
7980
8072
|
setCenter(center) {
|
|
7981
8073
|
this.coordType = this.map.coordType;
|
|
7982
8074
|
this.innerOverlay.setCoordinates(center.toTalks(this.coordType));
|
|
@@ -9121,6 +9213,13 @@ class TalksLabelOverlay extends TalksOverlay {
|
|
|
9121
9213
|
});
|
|
9122
9214
|
return new TalksLabelOverlay(label, coord, this);
|
|
9123
9215
|
}
|
|
9216
|
+
addTo(map) {
|
|
9217
|
+
this.map = map;
|
|
9218
|
+
this.innerOverlay.addTo(map.innerMap);
|
|
9219
|
+
}
|
|
9220
|
+
remove() {
|
|
9221
|
+
this.innerOverlay.remove();
|
|
9222
|
+
}
|
|
9124
9223
|
setContent(content) {
|
|
9125
9224
|
this.innerOverlay.setContent(content);
|
|
9126
9225
|
}
|
|
@@ -9316,8 +9415,8 @@ const MarkerLabel = {
|
|
|
9316
9415
|
},
|
|
9317
9416
|
toGoogle: (label) => label,
|
|
9318
9417
|
toTalks: (label, options) => {
|
|
9319
|
-
if (process.env.NODE_ENV !== 'production' && label.className) {
|
|
9320
|
-
console.warn('talks的MarkerLabel不支持设置className', label);
|
|
9418
|
+
if (process.env.NODE_ENV !== 'production' && label.className && !label.talksStyle) {
|
|
9419
|
+
console.warn('talks的MarkerLabel不支持设置className, 请为它设置talksStyle, 以实现类似的显示效果', label);
|
|
9321
9420
|
}
|
|
9322
9421
|
return {
|
|
9323
9422
|
properties: {
|
|
@@ -9332,6 +9431,7 @@ const MarkerLabel = {
|
|
|
9332
9431
|
textWeight: label.fontWeight,
|
|
9333
9432
|
textFaceName: label.fontFamily ?? 'Roboto, Arial, sans-serif',
|
|
9334
9433
|
...options,
|
|
9434
|
+
...label.talksStyle,
|
|
9335
9435
|
},
|
|
9336
9436
|
};
|
|
9337
9437
|
},
|
|
@@ -9638,6 +9738,13 @@ class TalksMarker extends TalksOverlay {
|
|
|
9638
9738
|
super(innerOverlay, coordType, map);
|
|
9639
9739
|
this.state = state;
|
|
9640
9740
|
}
|
|
9741
|
+
addTo(map) {
|
|
9742
|
+
this.map = map;
|
|
9743
|
+
this.map.markerLayer.addGeometry(this.innerOverlay);
|
|
9744
|
+
}
|
|
9745
|
+
remove() {
|
|
9746
|
+
this.map.markerLayer.removeGeometry(this.innerOverlay);
|
|
9747
|
+
}
|
|
9641
9748
|
getPosition() {
|
|
9642
9749
|
return LatLng.fromTalks(this.innerOverlay.getCoordinates(), this.coordType);
|
|
9643
9750
|
}
|
|
@@ -9906,6 +10013,12 @@ class TalksPolyline extends TalksShape {
|
|
|
9906
10013
|
});
|
|
9907
10014
|
return new TalksPolyline(inner, coordType, this);
|
|
9908
10015
|
}
|
|
10016
|
+
createDelegate() {
|
|
10017
|
+
return new TalksEventTargetDelegate(this.innerOverlay, this.map, {
|
|
10018
|
+
// https://maptalks.org/maptalks.js/api/1.x/Geometry.html#event:editrecord
|
|
10019
|
+
'path-edited': 'editrecord',
|
|
10020
|
+
});
|
|
10021
|
+
}
|
|
9909
10022
|
getPath() {
|
|
9910
10023
|
return this.innerOverlay.getCoordinates().map(it => LatLng.fromTalks(it, this.coordType));
|
|
9911
10024
|
}
|
|
@@ -10024,6 +10137,12 @@ class TalksPolygon extends TalksShape {
|
|
|
10024
10137
|
});
|
|
10025
10138
|
return new TalksPolygon(inner, coord, this);
|
|
10026
10139
|
}
|
|
10140
|
+
createDelegate() {
|
|
10141
|
+
return new TalksEventTargetDelegate(this.innerOverlay, this.map, {
|
|
10142
|
+
// https://maptalks.org/maptalks.js/api/1.x/Geometry.html#event:editrecord
|
|
10143
|
+
'paths-edited': 'editrecord',
|
|
10144
|
+
});
|
|
10145
|
+
}
|
|
10027
10146
|
getPaths() {
|
|
10028
10147
|
return this.innerOverlay.getCoordinates()
|
|
10029
10148
|
.map(path => path.map(it => LatLng.fromTalks(it, this.coordType)));
|
|
@@ -10189,6 +10308,12 @@ class TalksRectangle extends TalksShape {
|
|
|
10189
10308
|
height: computeDistanceBetween(nw, bounds.sw),
|
|
10190
10309
|
};
|
|
10191
10310
|
}
|
|
10311
|
+
createDelegate() {
|
|
10312
|
+
return new TalksEventTargetDelegate(this.innerOverlay, this.map, {
|
|
10313
|
+
// https://maptalks.org/maptalks.js/api/1.x/Geometry.html#event:editrecord
|
|
10314
|
+
'bounds-changed': 'editrecord',
|
|
10315
|
+
});
|
|
10316
|
+
}
|
|
10192
10317
|
getBounds() {
|
|
10193
10318
|
return LatLngBounds.fromTalks(this.innerOverlay.getExtent(), this.coordType);
|
|
10194
10319
|
}
|
|
@@ -10391,12 +10516,6 @@ class BaiduMap extends BaseMap {
|
|
|
10391
10516
|
removeElementOverlay(overlay) {
|
|
10392
10517
|
this.map.removeOverlay(overlay.asBaidu());
|
|
10393
10518
|
}
|
|
10394
|
-
addOverlay(overlay) {
|
|
10395
|
-
this.map.addOverlay(overlay.innerOverlay);
|
|
10396
|
-
}
|
|
10397
|
-
removeOverlay(overlay) {
|
|
10398
|
-
this.map.removeOverlay(overlay.innerOverlay);
|
|
10399
|
-
}
|
|
10400
10519
|
addCustomControl(control) {
|
|
10401
10520
|
if (!control.inner) {
|
|
10402
10521
|
const BaiduControl = class extends BMap.Control {
|
|
@@ -10617,12 +10736,6 @@ class GoogleMap extends BaseMap {
|
|
|
10617
10736
|
removeElementOverlay(overlay) {
|
|
10618
10737
|
overlay.asGoogle().setMap(null);
|
|
10619
10738
|
}
|
|
10620
|
-
addOverlay(overlay) {
|
|
10621
|
-
overlay.innerOverlay.setMap(this.map);
|
|
10622
|
-
}
|
|
10623
|
-
removeOverlay(overlay) {
|
|
10624
|
-
overlay.innerOverlay.setMap(null);
|
|
10625
|
-
}
|
|
10626
10739
|
addCustomControl(control) {
|
|
10627
10740
|
if (!control.inner) {
|
|
10628
10741
|
control.inner = control.onCreateElement();
|
|
@@ -10771,12 +10884,6 @@ class HereMap extends BaseMap {
|
|
|
10771
10884
|
removeElementOverlay(overlay) {
|
|
10772
10885
|
throw new Error('Method not implemented.');
|
|
10773
10886
|
}
|
|
10774
|
-
addOverlay(overlay) {
|
|
10775
|
-
throw new Error('Method not implemented.');
|
|
10776
|
-
}
|
|
10777
|
-
removeOverlay(overlay) {
|
|
10778
|
-
throw new Error('Method not implemented.');
|
|
10779
|
-
}
|
|
10780
10887
|
createMarker(options) {
|
|
10781
10888
|
throw new Error('Method not implemented.');
|
|
10782
10889
|
}
|
|
@@ -10858,7 +10965,8 @@ const quadKey = (z, x, y) => {
|
|
|
10858
10965
|
};
|
|
10859
10966
|
const talksBaseLayerIds = [
|
|
10860
10967
|
'osm',
|
|
10861
|
-
'osm-
|
|
10968
|
+
'osm-light',
|
|
10969
|
+
'osm-dark',
|
|
10862
10970
|
'google',
|
|
10863
10971
|
'baidu',
|
|
10864
10972
|
'baidu-detail',
|
|
@@ -10874,7 +10982,8 @@ function talksBaseLayerIdToCoordType(layerId) {
|
|
|
10874
10982
|
case 'baidu':
|
|
10875
10983
|
case 'baidu-detail':
|
|
10876
10984
|
return CoordType.bd09;
|
|
10877
|
-
case 'osm-
|
|
10985
|
+
case 'osm-light':
|
|
10986
|
+
case 'osm-dark':
|
|
10878
10987
|
case 'osm':
|
|
10879
10988
|
case 'yandex':
|
|
10880
10989
|
return CoordType.wgs84;
|
|
@@ -10991,13 +11100,20 @@ function createTalksBaseLayer(layerId, { id = layerId, visible = true, } = {}) {
|
|
|
10991
11100
|
subdomains: ['a', 'b', 'c'],
|
|
10992
11101
|
attribution: '© <a target="_blank" href="http://www.osm.org/copyright">OSM</a>',
|
|
10993
11102
|
});
|
|
10994
|
-
case 'osm-
|
|
11103
|
+
case 'osm-light':
|
|
10995
11104
|
return new maptalks.TileLayer(id, {
|
|
10996
11105
|
visible,
|
|
10997
11106
|
urlTemplate: 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
|
|
10998
11107
|
subdomains: ['a', 'b', 'c', 'd'],
|
|
10999
11108
|
attribution: '© <a target="_blank" href="http://www.osm.org/copyright">OSM</a> contributors, © <a target="_blank" href="https://carto.com/attributions">CARTO</a>',
|
|
11000
11109
|
});
|
|
11110
|
+
case 'osm-dark':
|
|
11111
|
+
return new maptalks.TileLayer(id, {
|
|
11112
|
+
visible,
|
|
11113
|
+
urlTemplate: 'http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png',
|
|
11114
|
+
subdomains: ['a', 'b', 'c', 'd'],
|
|
11115
|
+
attribution: '© <a target="_blank" href="http://www.osm.org/copyright">OSM</a> contributors, © <a target="_blank" href="https://carto.com/attributions">CARTO</a>',
|
|
11116
|
+
});
|
|
11001
11117
|
}
|
|
11002
11118
|
}
|
|
11003
11119
|
|
|
@@ -11007,7 +11123,9 @@ class TalksMap extends BaseMap {
|
|
|
11007
11123
|
map;
|
|
11008
11124
|
/** @internal */
|
|
11009
11125
|
currentBaseLayerId;
|
|
11126
|
+
/** @internal */
|
|
11010
11127
|
markerLayer;
|
|
11128
|
+
/** @internal */
|
|
11011
11129
|
overlayLayer;
|
|
11012
11130
|
constructor(element, mapOptions, baseLayoutIds) {
|
|
11013
11131
|
super(element);
|
|
@@ -11153,22 +11271,6 @@ class TalksMap extends BaseMap {
|
|
|
11153
11271
|
removeElementOverlay(overlay) {
|
|
11154
11272
|
// TODO: 2026/01/05 ipcjs 下一版再实现该功能
|
|
11155
11273
|
}
|
|
11156
|
-
addOverlay(overlay) {
|
|
11157
|
-
if (overlay.innerOverlay instanceof maptalks.ui.UIComponent) {
|
|
11158
|
-
overlay.innerOverlay.addTo(this.map);
|
|
11159
|
-
return;
|
|
11160
|
-
}
|
|
11161
|
-
const layer = overlay instanceof TalksMarker ? this.markerLayer : this.overlayLayer;
|
|
11162
|
-
layer.addGeometry(overlay.innerOverlay);
|
|
11163
|
-
}
|
|
11164
|
-
removeOverlay(overlay) {
|
|
11165
|
-
if (overlay.innerOverlay instanceof maptalks.ui.UIComponent) {
|
|
11166
|
-
overlay.innerOverlay.remove();
|
|
11167
|
-
return;
|
|
11168
|
-
}
|
|
11169
|
-
const layer = overlay instanceof TalksMarker ? this.markerLayer : this.overlayLayer;
|
|
11170
|
-
layer.removeGeometry(overlay.innerOverlay);
|
|
11171
|
-
}
|
|
11172
11274
|
createMarker = TalksMarker.create;
|
|
11173
11275
|
createMarkerClusterer(options) {
|
|
11174
11276
|
return new TalksMarkerClusterer(this, options);
|