修复currentmarker显示
This commit is contained in:
@@ -640,11 +640,8 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
Future<void> _handleRefresh() async {
|
||||
// 防止重复刷新
|
||||
if (_isRefreshing) return;
|
||||
// 🔥 保存当前定位(刷新前先记录)
|
||||
final savedCurrentLatLng = _currentLatLng;
|
||||
final savedCurrentWgsLatLng = _currentWgsLatLng;
|
||||
final savedMapCenter = _mapCenter;
|
||||
|
||||
// 🔥 修复1:保存当前有效的地图中心和缩放级别(而非定位坐标)
|
||||
final savedZoom = _mapController.camera?.zoom ?? 17.0;
|
||||
setState(() {
|
||||
_isRefreshing = true; // 标记开始刷新
|
||||
});
|
||||
@@ -677,16 +674,17 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
_selectedPlotPath = null;
|
||||
|
||||
// 重置作业模式
|
||||
_currentRobotMode = RobotMode.point;
|
||||
_currentRobotMode = RobotMode.robot;
|
||||
_currentAreaMode = AreaMode.work;
|
||||
_currentWorkMode = WorkMode.bow;
|
||||
|
||||
// 重置参数
|
||||
_workDistance = 0.0;
|
||||
_angle = 0.0;
|
||||
_currentLatLng = savedCurrentLatLng;
|
||||
_currentWgsLatLng = savedCurrentWgsLatLng;
|
||||
_mapCenter = savedMapCenter ?? _currentLatLng ?? const LatLng(39.9042, 116.4074);
|
||||
// 🔥 修复2:优先恢复地图中心,而非定位坐标
|
||||
_currentLatLng = null;
|
||||
_currentWgsLatLng = null;
|
||||
_mapCenter = _getDefaultValidCenter(); // 仅用兜底坐标初始化地图中心
|
||||
});
|
||||
|
||||
// 3. 重新初始化定位
|
||||
@@ -694,6 +692,16 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
|
||||
// 4. 重置轨迹管理器
|
||||
_traceManager.reset();
|
||||
if (_isValidLatLng(_mapCenter.latitude, _mapCenter.longitude)) {
|
||||
_mapController.move(_mapCenter, savedZoom);
|
||||
} else {
|
||||
// 使用兜底的有效坐标(确保在高德瓦片覆盖范围内)
|
||||
final defaultCenter = _getDefaultValidCenter();
|
||||
_mapController.move(defaultCenter, 17.0);
|
||||
_currentLatLng = null;
|
||||
_currentWgsLatLng = null;
|
||||
_mapCenter = defaultCenter;
|
||||
}
|
||||
|
||||
// 5. 重新加载作业记录(保持数据最新)
|
||||
// final userId = context.read<AppUserCubit>().state.user?.userId ?? "";
|
||||
@@ -701,12 +709,7 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
// await context.read<DevicesCubit>().loadWorkRecords(userId);
|
||||
// }
|
||||
|
||||
if (savedCurrentLatLng != null) {
|
||||
_mapController.move(savedCurrentLatLng, _mapController.camera?.zoom ?? 17);
|
||||
} else {
|
||||
_mapController.move(const LatLng(39.9042, 116.4074), 17);
|
||||
}
|
||||
|
||||
_mapController.move(_getDefaultValidCenter(), savedZoom);
|
||||
// 刷新成功提示
|
||||
if (mounted) {
|
||||
ToastUtils.showSuccess(context, '页面已刷新完成');
|
||||
@@ -1169,19 +1172,32 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
);
|
||||
}
|
||||
|
||||
LatLng _getDefaultValidCenter() {
|
||||
return const LatLng(30.279651, 120.154871);
|
||||
}
|
||||
|
||||
Widget _buildMap(double lat, double lng, bool obfFlag, int headingStatus, String controlMode) {
|
||||
if (lat != 0 && lat != 0 && (lat != _currentLatLng?.latitude || lng != _currentLatLng?.longitude)) {
|
||||
_onDeviceData(lng, lat, obfFlag, headingStatus, controlMode);
|
||||
}
|
||||
final gcjPoint = wgs84ToGcj02(lat, lng);
|
||||
|
||||
final initCenter = bd09ToGcj02(
|
||||
'120.81992468426961', // 经度
|
||||
'32.04532826114155',
|
||||
);
|
||||
//final initCenter = bd09ToGcj02(
|
||||
// '120.81992468426961', // 经度
|
||||
// '32.04532826114155',
|
||||
//);
|
||||
|
||||
// 🔥 修复1:初始化坐标改为直接使用有效GCJ02坐标,避免BD09转换风险
|
||||
final initCenter = _getDefaultValidCenter();
|
||||
_currentWgsLatLng = LatLng(lat, lng);
|
||||
|
||||
_currentLatLng = gcjPoint; // ✅ 状态变量在setState内更新
|
||||
//_currentLatLng = gcjPoint; // ✅ 状态变量在setState内更新
|
||||
if (_isValidLatLng(gcjPoint.latitude, gcjPoint.longitude)) {
|
||||
_currentLatLng = gcjPoint;
|
||||
} else {
|
||||
_currentLatLng = null;
|
||||
}
|
||||
|
||||
return FlutterMap(
|
||||
mapController: _mapController,
|
||||
options: MapOptions(
|
||||
@@ -1195,17 +1211,22 @@ class _MapPageEnterpriseState extends State<MapPageEnterprise> {
|
||||
),
|
||||
children: [
|
||||
/// 高德瓦片(GCJ-02)
|
||||
Transform.scale(
|
||||
scale: 1.5, // 地图背景放大1.5倍(可调整:1.2/1.3/1.5)
|
||||
alignment: Alignment.center, // 以地图中心为缩放原点,避免偏移
|
||||
child: TileLayer(
|
||||
urlTemplate:
|
||||
'https://webrd02.is.autonavi.com/appmaptile'
|
||||
'?style=8&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1' // 高清瓦片保证放大后不模糊
|
||||
'&key=bbb1f0f20eed6bf679eddf2625630aba',
|
||||
tileProvider: NetworkTileProvider(headers: {'Referer': 'https://www.amap.com'}),
|
||||
maxZoom: 18,
|
||||
TileLayer(
|
||||
urlTemplate:
|
||||
"https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=2&style=7&key=bbb1f0f20eed6bf679eddf2625630aba",
|
||||
// urlTemplate:
|
||||
// 'https://webrd02.is.autonavi.com/appmaptile'
|
||||
// '?style=8&x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1'
|
||||
// '&key=bbb1f0f20eed6bf679eddf2625630aba',
|
||||
// 🔥 修复:适配高DPI(替代pixelRatio)
|
||||
// tileSize: 512, // 高清瓦片尺寸(默认256,改为512适配scale=2)
|
||||
tileProvider: NetworkTileProvider(
|
||||
// 自定义瓦片请求头(可选,提升兼容性)
|
||||
headers: {
|
||||
'Referer': 'https://www.amap.com', // 高德要求的Referer
|
||||
},
|
||||
),
|
||||
maxZoom: 18,
|
||||
),
|
||||
|
||||
// 绘制path折线(Line模式)
|
||||
|
||||
Reference in New Issue
Block a user