如何在Flutter/Dart中从大字符串提取N、E坐标数据
在Flutter/Dart中提取定位数据的N、E数值方案
完全可以实现,核心思路是利用正则表达式精准匹配每组数据中的N(纬度)和E(经度)数值,再将解析后的数值存入对应列表。
实现步骤
- 编写正则表达式:匹配格式为
N:数值和E:数值的组合,确保能捕获每组的纬度和经度字符串。 - 遍历所有匹配结果:将捕获到的字符串转换为
double类型,分别存入nList和eList。
代码示例
void main() { // 你的定位数据大字符串 String locationRawData = """2023/03/11 11:14:30 N:21.234985 E:72.858528 4 km/h 275.15 -0.50 9 x:+0.000 y:+0.000 z:+0.000 2023/03/11 11:14:30 N:21.234987 E:72.858437 4 km/h 275.15 -8.90 9 x:+0.000 y:+0.000 z:+0.000 2023/03/11 11:14:32 N:21.234989 E:72.858452 0 km/h 270.92 -6.90 9 x:+0.000 y:+0.000 z:+0.000 2023/03/11 11:14:33 N:21.234995 E:72.858482 0 km/h 269.48 -3.60 9 x:+0.000 y:+0.000 z:+0.000 2023/03/11 11:14:34 N:21.234997 E:72.858505 0 km/h 275.53 -1.20 9 x:+0.000 y:+0.000 z:+0.000 2023/03/11 11:14:35 N:21.234999 E:72.858521 0 km/h 276.25 0.50 9 x:+0.000 y:+0.000 z:+0.000"""; List<double> nList = []; List<double> eList = []; // 正则规则:匹配N:和E:后的数值,支持正负号(如果有需要) RegExp coordRegex = RegExp(r'N:([-+]?\d+\.\d+)\s+E:([-+]?\d+\.\d+)'); Iterable<Match> matches = coordRegex.allMatches(locationRawData); for (Match match in matches) { // 提取并解析纬度数值 String? nValueStr = match.group(1); if (nValueStr != null) { nList.add(double.parse(nValueStr)); } // 提取并解析经度数值 String? eValueStr = match.group(2); if (eValueStr != null) { eList.add(double.parse(eValueStr)); } } // 验证结果 print("纬度列表(N): $nList"); print("经度列表(E): $eList"); }
补充说明
- 正则表达式中的
[-+]?是可选的,如果你确定数据里没有负号,可以去掉,简化为r'N:(\d+\.\d+)\s+E:(\d+\.\d+)'。 - 如果你的定位数据是从文件读取的,只需将
locationRawData替换为文件读取的字符串即可。
内容的提问来源于stack exchange,提问作者Dhruvil Patel
相关产品推荐
相关产品推荐

