Flutter如何将字符串转换为LatLng列表用于Google Maps多边形
解决Flutter中字符串转LatLng列表的问题
要把数据库返回的格式字符串转换成可用的LatLng列表,按以下步骤操作:
修正字符串格式
数据库返回的字符串外层是大括号{},而JSON数组标准格式用方括号[],先替换首尾的大括号:var coord = "{[48.885278, 2.349523], [48.885471,2.349528], [48.888300,2.349597]}"; // 替换首尾大括号为方括号,转为合法JSON数组格式 String jsonStr = coord.replaceFirst('{', '[').replaceFirst('}', ']');解析JSON为二维数值列表
借助dart:convert的jsonDecode方法,把处理后的字符串解析成二维动态列表:import 'dart:convert'; // 解析JSON字符串 List<List<dynamic>> rawCoords = jsonDecode(jsonStr);转换为LatLng列表
遍历解析后的二维列表,将每个子列表的两个数值分别作为纬度、经度,创建LatLng对象并收集为列表:import 'package:google_maps_flutter/google_maps_flutter.dart'; List<LatLng> polygonCoords = rawCoords.map((coord) { return LatLng(coord[0] as double, coord[1] as double); }).toList();
完整代码示例(含异常处理)
为避免解析失败导致崩溃,建议添加异常捕获:
import 'dart:convert'; import 'package:google_maps_flutter/google_maps_flutter.dart'; List<LatLng> convertToLatLngList(String coordStr) { try { // 修正字符串格式 String jsonStr = coordStr.replaceFirst('{', '[').replaceFirst('}', ']'); // 解析JSON List<List<dynamic>> rawCoords = jsonDecode(jsonStr); // 转换为LatLng列表 return rawCoords.map((coord) { return LatLng(coord[0] as double, coord[1] as double); }).toList(); } catch (e) { // 解析失败时返回空列表或自定义错误处理 print('坐标解析失败:$e'); return []; } } // 使用示例 void main() { var coord = "{[48.885278, 2.349523], [48.885471,2.349528], [48.888300,2.349597]}"; List<LatLng> polygon1 = convertToLatLngList(coord); // polygon1可直接用于Google Maps绘制多边形 }
内容的提问来源于stack exchange,提问作者Pierre jean
相关产品推荐
相关产品推荐

