diff --git a/lib/app/map/_lib/managers/monitor.dart b/lib/app/map/_lib/managers/monitor.dart index 8e4c6eb5a..c9d29d2c1 100644 --- a/lib/app/map/_lib/managers/monitor.dart +++ b/lib/app/map/_lib/managers/monitor.dart @@ -127,6 +127,8 @@ class MonitorMapLayerManager extends MapLayerManager { Future setup() async { if (didSetup) return; + final colors = context.colors; + try { final sources = await controller.getSourceIds(); final layers = await controller.getLayerIds(); @@ -213,9 +215,96 @@ class MonitorMapLayerManager extends MapLayerManager { ], visibility: visible ? 'visible' : 'none', ); + final properties2 = SymbolLayerProperties( + textField: [ + Expressions.format, + [Expressions.get, 'id'], + { + 'text-font': [ + Expressions.literal, + ['Noto Sans TC Bold'], + ], + }, + '\n', + {}, + [ + Expressions.caseExpression, + [ + Expressions.all, + [Expressions.has, 'city'], + [Expressions.has, 'town'], + ], + [ + Expressions.concat, + [Expressions.get, 'city'], + ' ', + [Expressions.get, 'town'], + ], + '海外測站'.i18n, + ], + { + 'text-font': [ + Expressions.literal, + ['Noto Sans TC Bold'], + ], + }, + '\n', + {}, + [ + Expressions.caseExpression, + [ + Expressions.all, + [Expressions.has, 'i'], + [Expressions.has, 'pga'], + [Expressions.has, 'pgv'], + ], + [ + Expressions.concat, + [ + Expressions.concat, + '即時震度:'.i18n, + [Expressions.get, 'i'], + ], + '\n', + [ + Expressions.concat, + '地動加速度:'.i18n, + [Expressions.get, 'pga'], + 'gal', + ], + '\n', + [ + Expressions.concat, + '地動速度:'.i18n, + [Expressions.get, 'pgv'], + 'cm/s', + ], + ], + '無資料'.i18n, + ], + {}, + ], + textSize: 10, + textColor: colors.onSurfaceVariant.toHexStringRGB(), + textHaloColor: colors.outlineVariant.toHexStringRGB(), + textHaloWidth: 1, + textFont: ['Noto Sans TC Regular'], + textOffset: [0, 1], + textAnchor: 'top', + visibility: visible ? 'visible' : 'none', + ); await controller.addLayer(rtsSourceId, rtsLayerId, properties, belowLayerId: BaseMapLayerIds.userLocation); TalkerManager.instance.info('Added Layer "$rtsLayerId"'); + + await controller.addLayer( + rtsSourceId, + '$rtsLayerId-label', + properties2, + belowLayerId: BaseMapLayerIds.userLocation, + minzoom: 10, + ); + TalkerManager.instance.info('Added Layer "$rtsLayerId-label"'); } // 2. Intensity0 图层 @@ -448,6 +537,7 @@ class MonitorMapLayerManager extends MapLayerManager { final hasBox = GlobalProviders.data.rts?.box.isNotEmpty ?? false; await controller.setLayerVisibility(rtsLayerId, !hasBox); + await controller.setLayerVisibility('$rtsLayerId-label', !hasBox); await controller.setLayerVisibility(intensityLayerId, hasBox); await controller.setLayerVisibility(intensity0LayerId, hasBox); await controller.setLayerVisibility(boxLayerId, hasBox); @@ -533,6 +623,7 @@ class MonitorMapLayerManager extends MapLayerManager { // rts await controller.setLayerVisibility(rtsLayerId, false); + await controller.setLayerVisibility('$rtsLayerId-label', false); // intensity await controller.setLayerVisibility(intensityLayerId, false); @@ -569,6 +660,7 @@ class MonitorMapLayerManager extends MapLayerManager { final hasBox = GlobalProviders.data.rts?.box.isNotEmpty ?? false; await controller.setLayerVisibility(rtsLayerId, !hasBox); + await controller.setLayerVisibility('$rtsLayerId-label', !hasBox); await controller.setLayerVisibility(intensityLayerId, hasBox); await controller.setLayerVisibility(intensity0LayerId, hasBox); @@ -606,6 +698,8 @@ class MonitorMapLayerManager extends MapLayerManager { // rts await controller.removeLayer(rtsLayerId); TalkerManager.instance.info('Removed Layer "$rtsLayerId"'); + await controller.removeLayer('$rtsLayerId-label'); + TalkerManager.instance.info('Removed Layer "$rtsLayerId-label"'); await controller.removeSource(rtsSourceId); TalkerManager.instance.info('Removed Source "$rtsSourceId"'); diff --git a/lib/models/data.dart b/lib/models/data.dart index e043d11f4..faa52a188 100644 --- a/lib/models/data.dart +++ b/lib/models/data.dart @@ -287,6 +287,7 @@ class DpipDataModel extends _DpipDataModel { GeoJsonFeatureBuilder(GeoJsonFeatureType.Point) ..setGeometry(s.info.last.latlng.toGeoJsonCoordinates() as List) ..setId(int.parse(id)) + ..setProperty('id', id) ..setProperty('net', s.net) ..setProperty('code', s.info.last.code); @@ -302,6 +303,13 @@ class DpipDataModel extends _DpipDataModel { } } + final location = Global.location['${s.info.last.code}']; + if (location != null) { + feature + ..setProperty('city', location.city) + ..setProperty('town', location.town); + } + builder.addFeature(feature); } diff --git a/lib/widgets/map/map.dart b/lib/widgets/map/map.dart index 6c66456cf..2690b8dae 100644 --- a/lib/widgets/map/map.dart +++ b/lib/widgets/map/map.dart @@ -328,7 +328,7 @@ class DpipMapState extends State { final double adjustedZoomValue = adjustedZoom(widget.initialCameraPosition.zoom); return MapLibreMap( - minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 12), + minMaxZoomPreference: widget.minMaxZoomPreference ?? const MinMaxZoomPreference(4, 15), trackCameraPosition: true, initialCameraPosition: CameraPosition(target: widget.initialCameraPosition.target, zoom: adjustedZoomValue), styleString: styleAbsoluteFilePath!,