将长坐标字符串解析为纬度和经度 Flutter
Parse long String of coords into lat & longs Flutter
我在 Json
的 API 电话中收到 String
的经纬度和经度
"lineStrings": [
"[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057],[-0.267972,51.494627],[-0.254555,51.495148],[-0.245704,51.494917],[-0.235881,51.494122],[-0.22362,51.4923],[-0.213427,51.490311],[-0.206636,51.490459],[-0.193378,51.492063],[-0.182658,51.494316],[-0.174138,51.494094],[-0.156377,51.49227],[-0.143102,51.496359],[-0.133608,51.499544],[-0.124861,51.50132],[-0.122666,51.507058],[-0.11426,51.511006],[-0.103659,51.511581],[-0.094009,51.512117],[-0.090432,51.51151],[-0.085969,51.5107],[-0.076546,51.509971],[-0.072384,51.515037],[-0.059971,51.519518],[-0.046596,51.521858],[-0.03364,51.525122],[-0.025128,51.52694],[-0.011538,51.524839],[0.005055,51.528136],[0.017451,51.531341],[0.035263,51.53534],[0.051186,51.538948],[0.081053,51.539321],[0.10153,51.538372],[0.127016,51.540331],[0.147527,51.541639],[0.166017,51.544096],[0.19864,51.549775],[0.219116,51.554093],[0.235809,51.55856],[0.250882,51.559063]]]"]
与我习惯的调用不同,它们不是作为我可以迭代的单独的纬度和经度值,它 returns 作为一个长字符串块。
我可能不正确,但我不相信我可以解析它,因为没有 lat
& long
class 可以迭代,只有 lineStrings
是一个长块。我要解析的 Quicktype.io class 在迭代
时将我带到 .linestrings
我想将它们分成坐标对,我可以从每个坐标对中获取纬度和经度。
我试过```拆分````但是由于双打和双打之间的逗号我无法让它工作。我也试过删除特殊字符,但无法保持格式。
欢迎提出任何建议。
最终目标是能够执行如下操作
for (var x in coordinates){
GeoCoordinates y = GeoCoordinates(x.latitude, x.longitude);
}
谢谢
您将不得不进行一些手动拆分:
void main() {
'[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057]]]'
.split('],[')
.forEach((p) => print(p.replaceAll('[', '').replaceAll(']', '')));
}
打印:
-0.301457,51.515017
-0.288265,51.51014
-0.280462,51.503057
您可以在 ,
上进一步拆分并解析为一对双打。
或者您可以添加一个 LatLong
class 来保存货币对:
void main() {
final latLongs =
'[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057]]]'
.split('],[')
.map((p) => LatLong.fromString(
p.replaceAll('[', '').replaceAll(']', ''),
));
print(latLongs);
}
class LatLong {
LatLong(this.lat, this.long);
factory LatLong.fromString(String pair) {
final parts = pair.split(',');
return LatLong(double.parse(parts[0]), double.parse(parts[1]));
}
double lat;
double long;
}
var json = {"lineStrings": [
"[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057],[-0.267972,51.494627],[-0.254555,51.495148],[-0.245704,51.494917],[-0.235881,51.494122],[-0.22362,51.4923],[-0.213427,51.490311],[-0.206636,51.490459],[-0.193378,51.492063],[-0.182658,51.494316],[-0.174138,51.494094],[-0.156377,51.49227],[-0.143102,51.496359],[-0.133608,51.499544],[-0.124861,51.50132],[-0.122666,51.507058],[-0.11426,51.511006],[-0.103659,51.511581],[-0.094009,51.512117],[-0.090432,51.51151],[-0.085969,51.5107],[-0.076546,51.509971],[-0.072384,51.515037],[-0.059971,51.519518],[-0.046596,51.521858],[-0.03364,51.525122],[-0.025128,51.52694],[-0.011538,51.524839],[0.005055,51.528136],[0.017451,51.531341],[0.035263,51.53534],[0.051186,51.538948],[0.081053,51.539321],[0.10153,51.538372],[0.127016,51.540331],[0.147527,51.541639],[0.166017,51.544096],[0.19864,51.549775],[0.219116,51.554093],[0.235809,51.55856],[0.250882,51.559063]]]"
]
};
List<dynamic> jsonList = json["lineStrings"]!
.first
.replaceAll("[", "")
.replaceAll("]", "")
.split(",");
List<Coordinates> result = [];
for (var i = 0; i < jsonList.length / 2; i++) {
result.add(Coordinates(
lat: double.parse(jsonList[i]),
long: double.parse(jsonList[i + 1])));
}
result.forEach((element) {
print("Lat" + element.lat.toString());
print("Long" + element.long.toString());
print("*************************");
});
class Coordinates {
double lat;
double long;
Coordinates({
required this.lat,
required this.long,
});
}
颤振:Lat-0.301457
颤振:Long51.515017
颤振:************************
扑动:Lat51.515017
扑动:Long-0.288265
颤振:************************
颤振:Lat-0.288265
扑动:Long51.51014
颤振:************************
我在 Json
的 API 电话中收到String
的经纬度和经度
"lineStrings": [
"[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057],[-0.267972,51.494627],[-0.254555,51.495148],[-0.245704,51.494917],[-0.235881,51.494122],[-0.22362,51.4923],[-0.213427,51.490311],[-0.206636,51.490459],[-0.193378,51.492063],[-0.182658,51.494316],[-0.174138,51.494094],[-0.156377,51.49227],[-0.143102,51.496359],[-0.133608,51.499544],[-0.124861,51.50132],[-0.122666,51.507058],[-0.11426,51.511006],[-0.103659,51.511581],[-0.094009,51.512117],[-0.090432,51.51151],[-0.085969,51.5107],[-0.076546,51.509971],[-0.072384,51.515037],[-0.059971,51.519518],[-0.046596,51.521858],[-0.03364,51.525122],[-0.025128,51.52694],[-0.011538,51.524839],[0.005055,51.528136],[0.017451,51.531341],[0.035263,51.53534],[0.051186,51.538948],[0.081053,51.539321],[0.10153,51.538372],[0.127016,51.540331],[0.147527,51.541639],[0.166017,51.544096],[0.19864,51.549775],[0.219116,51.554093],[0.235809,51.55856],[0.250882,51.559063]]]"]
与我习惯的调用不同,它们不是作为我可以迭代的单独的纬度和经度值,它 returns 作为一个长字符串块。
我可能不正确,但我不相信我可以解析它,因为没有 lat
& long
class 可以迭代,只有 lineStrings
是一个长块。我要解析的 Quicktype.io class 在迭代
.linestrings
我想将它们分成坐标对,我可以从每个坐标对中获取纬度和经度。
我试过```拆分````但是由于双打和双打之间的逗号我无法让它工作。我也试过删除特殊字符,但无法保持格式。
欢迎提出任何建议。
最终目标是能够执行如下操作
for (var x in coordinates){
GeoCoordinates y = GeoCoordinates(x.latitude, x.longitude);
}
谢谢
您将不得不进行一些手动拆分:
void main() {
'[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057]]]'
.split('],[')
.forEach((p) => print(p.replaceAll('[', '').replaceAll(']', '')));
}
打印:
-0.301457,51.515017
-0.288265,51.51014
-0.280462,51.503057
您可以在 ,
上进一步拆分并解析为一对双打。
或者您可以添加一个 LatLong
class 来保存货币对:
void main() {
final latLongs =
'[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057]]]'
.split('],[')
.map((p) => LatLong.fromString(
p.replaceAll('[', '').replaceAll(']', ''),
));
print(latLongs);
}
class LatLong {
LatLong(this.lat, this.long);
factory LatLong.fromString(String pair) {
final parts = pair.split(',');
return LatLong(double.parse(parts[0]), double.parse(parts[1]));
}
double lat;
double long;
}
var json = {"lineStrings": [
"[[[-0.301457,51.515017],[-0.288265,51.51014],[-0.280462,51.503057],[-0.267972,51.494627],[-0.254555,51.495148],[-0.245704,51.494917],[-0.235881,51.494122],[-0.22362,51.4923],[-0.213427,51.490311],[-0.206636,51.490459],[-0.193378,51.492063],[-0.182658,51.494316],[-0.174138,51.494094],[-0.156377,51.49227],[-0.143102,51.496359],[-0.133608,51.499544],[-0.124861,51.50132],[-0.122666,51.507058],[-0.11426,51.511006],[-0.103659,51.511581],[-0.094009,51.512117],[-0.090432,51.51151],[-0.085969,51.5107],[-0.076546,51.509971],[-0.072384,51.515037],[-0.059971,51.519518],[-0.046596,51.521858],[-0.03364,51.525122],[-0.025128,51.52694],[-0.011538,51.524839],[0.005055,51.528136],[0.017451,51.531341],[0.035263,51.53534],[0.051186,51.538948],[0.081053,51.539321],[0.10153,51.538372],[0.127016,51.540331],[0.147527,51.541639],[0.166017,51.544096],[0.19864,51.549775],[0.219116,51.554093],[0.235809,51.55856],[0.250882,51.559063]]]"
]
};
List<dynamic> jsonList = json["lineStrings"]!
.first
.replaceAll("[", "")
.replaceAll("]", "")
.split(",");
List<Coordinates> result = [];
for (var i = 0; i < jsonList.length / 2; i++) {
result.add(Coordinates(
lat: double.parse(jsonList[i]),
long: double.parse(jsonList[i + 1])));
}
result.forEach((element) {
print("Lat" + element.lat.toString());
print("Long" + element.long.toString());
print("*************************");
});
class Coordinates {
double lat;
double long;
Coordinates({
required this.lat,
required this.long,
});
}
颤振:Lat-0.301457
颤振:Long51.515017
颤振:************************
扑动:Lat51.515017
扑动:Long-0.288265
颤振:************************
颤振:Lat-0.288265
扑动:Long51.51014
颤振:************************