tg-map-core 4.1.8 → 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 +8 -2
- package/dist/src/map/map/overlay/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 +144 -43
- package/dist/tg-map-core.mjs +144 -43
- 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
|
}
|
|
@@ -9639,6 +9738,13 @@ class TalksMarker extends TalksOverlay {
|
|
|
9639
9738
|
super(innerOverlay, coordType, map);
|
|
9640
9739
|
this.state = state;
|
|
9641
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
|
+
}
|
|
9642
9748
|
getPosition() {
|
|
9643
9749
|
return LatLng.fromTalks(this.innerOverlay.getCoordinates(), this.coordType);
|
|
9644
9750
|
}
|
|
@@ -9907,6 +10013,12 @@ class TalksPolyline extends TalksShape {
|
|
|
9907
10013
|
});
|
|
9908
10014
|
return new TalksPolyline(inner, coordType, this);
|
|
9909
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
|
+
}
|
|
9910
10022
|
getPath() {
|
|
9911
10023
|
return this.innerOverlay.getCoordinates().map(it => LatLng.fromTalks(it, this.coordType));
|
|
9912
10024
|
}
|
|
@@ -10025,6 +10137,12 @@ class TalksPolygon extends TalksShape {
|
|
|
10025
10137
|
});
|
|
10026
10138
|
return new TalksPolygon(inner, coord, this);
|
|
10027
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
|
+
}
|
|
10028
10146
|
getPaths() {
|
|
10029
10147
|
return this.innerOverlay.getCoordinates()
|
|
10030
10148
|
.map(path => path.map(it => LatLng.fromTalks(it, this.coordType)));
|
|
@@ -10190,6 +10308,12 @@ class TalksRectangle extends TalksShape {
|
|
|
10190
10308
|
height: computeDistanceBetween(nw, bounds.sw),
|
|
10191
10309
|
};
|
|
10192
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
|
+
}
|
|
10193
10317
|
getBounds() {
|
|
10194
10318
|
return LatLngBounds.fromTalks(this.innerOverlay.getExtent(), this.coordType);
|
|
10195
10319
|
}
|
|
@@ -10392,12 +10516,6 @@ class BaiduMap extends BaseMap {
|
|
|
10392
10516
|
removeElementOverlay(overlay) {
|
|
10393
10517
|
this.map.removeOverlay(overlay.asBaidu());
|
|
10394
10518
|
}
|
|
10395
|
-
addOverlay(overlay) {
|
|
10396
|
-
this.map.addOverlay(overlay.innerOverlay);
|
|
10397
|
-
}
|
|
10398
|
-
removeOverlay(overlay) {
|
|
10399
|
-
this.map.removeOverlay(overlay.innerOverlay);
|
|
10400
|
-
}
|
|
10401
10519
|
addCustomControl(control) {
|
|
10402
10520
|
if (!control.inner) {
|
|
10403
10521
|
const BaiduControl = class extends BMap.Control {
|
|
@@ -10618,12 +10736,6 @@ class GoogleMap extends BaseMap {
|
|
|
10618
10736
|
removeElementOverlay(overlay) {
|
|
10619
10737
|
overlay.asGoogle().setMap(null);
|
|
10620
10738
|
}
|
|
10621
|
-
addOverlay(overlay) {
|
|
10622
|
-
overlay.innerOverlay.setMap(this.map);
|
|
10623
|
-
}
|
|
10624
|
-
removeOverlay(overlay) {
|
|
10625
|
-
overlay.innerOverlay.setMap(null);
|
|
10626
|
-
}
|
|
10627
10739
|
addCustomControl(control) {
|
|
10628
10740
|
if (!control.inner) {
|
|
10629
10741
|
control.inner = control.onCreateElement();
|
|
@@ -10772,12 +10884,6 @@ class HereMap extends BaseMap {
|
|
|
10772
10884
|
removeElementOverlay(overlay) {
|
|
10773
10885
|
throw new Error('Method not implemented.');
|
|
10774
10886
|
}
|
|
10775
|
-
addOverlay(overlay) {
|
|
10776
|
-
throw new Error('Method not implemented.');
|
|
10777
|
-
}
|
|
10778
|
-
removeOverlay(overlay) {
|
|
10779
|
-
throw new Error('Method not implemented.');
|
|
10780
|
-
}
|
|
10781
10887
|
createMarker(options) {
|
|
10782
10888
|
throw new Error('Method not implemented.');
|
|
10783
10889
|
}
|
|
@@ -10859,7 +10965,8 @@ const quadKey = (z, x, y) => {
|
|
|
10859
10965
|
};
|
|
10860
10966
|
const talksBaseLayerIds = [
|
|
10861
10967
|
'osm',
|
|
10862
|
-
'osm-
|
|
10968
|
+
'osm-light',
|
|
10969
|
+
'osm-dark',
|
|
10863
10970
|
'google',
|
|
10864
10971
|
'baidu',
|
|
10865
10972
|
'baidu-detail',
|
|
@@ -10875,7 +10982,8 @@ function talksBaseLayerIdToCoordType(layerId) {
|
|
|
10875
10982
|
case 'baidu':
|
|
10876
10983
|
case 'baidu-detail':
|
|
10877
10984
|
return CoordType.bd09;
|
|
10878
|
-
case 'osm-
|
|
10985
|
+
case 'osm-light':
|
|
10986
|
+
case 'osm-dark':
|
|
10879
10987
|
case 'osm':
|
|
10880
10988
|
case 'yandex':
|
|
10881
10989
|
return CoordType.wgs84;
|
|
@@ -10992,13 +11100,20 @@ function createTalksBaseLayer(layerId, { id = layerId, visible = true, } = {}) {
|
|
|
10992
11100
|
subdomains: ['a', 'b', 'c'],
|
|
10993
11101
|
attribution: '© <a target="_blank" href="http://www.osm.org/copyright">OSM</a>',
|
|
10994
11102
|
});
|
|
10995
|
-
case 'osm-
|
|
11103
|
+
case 'osm-light':
|
|
10996
11104
|
return new maptalks.TileLayer(id, {
|
|
10997
11105
|
visible,
|
|
10998
11106
|
urlTemplate: 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',
|
|
10999
11107
|
subdomains: ['a', 'b', 'c', 'd'],
|
|
11000
11108
|
attribution: '© <a target="_blank" href="http://www.osm.org/copyright">OSM</a> contributors, © <a target="_blank" href="https://carto.com/attributions">CARTO</a>',
|
|
11001
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
|
+
});
|
|
11002
11117
|
}
|
|
11003
11118
|
}
|
|
11004
11119
|
|
|
@@ -11008,7 +11123,9 @@ class TalksMap extends BaseMap {
|
|
|
11008
11123
|
map;
|
|
11009
11124
|
/** @internal */
|
|
11010
11125
|
currentBaseLayerId;
|
|
11126
|
+
/** @internal */
|
|
11011
11127
|
markerLayer;
|
|
11128
|
+
/** @internal */
|
|
11012
11129
|
overlayLayer;
|
|
11013
11130
|
constructor(element, mapOptions, baseLayoutIds) {
|
|
11014
11131
|
super(element);
|
|
@@ -11154,22 +11271,6 @@ class TalksMap extends BaseMap {
|
|
|
11154
11271
|
removeElementOverlay(overlay) {
|
|
11155
11272
|
// TODO: 2026/01/05 ipcjs 下一版再实现该功能
|
|
11156
11273
|
}
|
|
11157
|
-
addOverlay(overlay) {
|
|
11158
|
-
if (overlay.innerOverlay instanceof maptalks.ui.UIComponent) {
|
|
11159
|
-
overlay.innerOverlay.addTo(this.map);
|
|
11160
|
-
return;
|
|
11161
|
-
}
|
|
11162
|
-
const layer = overlay instanceof TalksMarker ? this.markerLayer : this.overlayLayer;
|
|
11163
|
-
layer.addGeometry(overlay.innerOverlay);
|
|
11164
|
-
}
|
|
11165
|
-
removeOverlay(overlay) {
|
|
11166
|
-
if (overlay.innerOverlay instanceof maptalks.ui.UIComponent) {
|
|
11167
|
-
overlay.innerOverlay.remove();
|
|
11168
|
-
return;
|
|
11169
|
-
}
|
|
11170
|
-
const layer = overlay instanceof TalksMarker ? this.markerLayer : this.overlayLayer;
|
|
11171
|
-
layer.removeGeometry(overlay.innerOverlay);
|
|
11172
|
-
}
|
|
11173
11274
|
createMarker = TalksMarker.create;
|
|
11174
11275
|
createMarkerClusterer(options) {
|
|
11175
11276
|
return new TalksMarkerClusterer(this, options);
|