如何将 google 地图多边形的坐标对从字符串转换为数组?
How to convert coordinate pair from string to array for google map polygon?
我有一串坐标对,如下所示:
var path = { lat: 41.51663913751271, lng: -72.42501842191292}q{ lat: 41.522808462596736, lng: -72.33163463285042}q{ lat: 41.44410551903285, lng: -72.31996165921761}q{ lat: 41.43484006513872, lng: -72.41540538480355}q{ lat: 41.48475492271096, lng: -72.36665355374886},
我需要让它看起来像这样:
var coordinates = [
{ lat: 25.774, lng: -80.19 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
{ lat: 25.774, lng: -80.19 },
];
- 我可以完全控制初始字符串,因此我可以更改格式、分隔符等。
我尝试过的:
var polyCoords = path.split('q');
结果不是我需要的:
["{ lat: 41.51663913751271, lng: -72.42501842191292}", "{ lat: 41.522808462596736, lng: -72.33163463285042}", "{ lat: 41.44410551903285, lng: -72.31996165921761}", "{ lat: 41.43484006513872, lng: -72.41540538480355}", "{ lat: 41.48475492271096, lng: -72.36665355374886}", ""]
我也试过JSON.parse(路径);但这显示语法错误。
此外,如果有帮助,这就是我目前将坐标捕获为字符串的方式:
polygon_boundary_coordinates += "{ lat: " + currentPolygon.getPath().getAt(i).lat() + ", lng: " + currentPolygon.getPath().getAt(i).lng() + "}q";
你有什么建议吗?
拆分后得到字符串化的数组JSON和一个多余的空字符串,你只需要再做两步,过滤掉空字符串,然后映射解析每个过滤后的元素
var polyCoords = path
.split('q')
.filter(Boolean)
.map(coord => JSON.parse(coord))
最后但同样重要的是,在上述之前,最重要的事情是使字符串化 JSON 的属性用引号 ""
括起来,以获得适当的 JSON.parse
polygon_boundary_coordinates += "{ \"lat\": " + currentPolygon.getPath().getAt(i).lat() + ", \"lng\": " + currentPolygon.getPath().getAt(i).lng() + "}q";
const splited = [
'{ "lat": 41.51663913751271, "lng": -72.42501842191292}',
'{ "lat": 41.522808462596736, "lng": -72.33163463285042}',
'{ "lat": 41.44410551903285, "lng": -72.31996165921761}',
'{ "lat": 41.43484006513872, "lng": -72.41540538480355}',
'{ "lat": 41.48475492271096, "lng": -72.36665355374886}',
"",
];
const coordinates = splited.filter(Boolean).map((coord) => JSON.parse(coord));
console.log(coordinates);
你可以这样做。
(部分内容取自here.
let polyCoords = path.replace(/,\s*$/,"").split("q").map(cur=>JSON.parse(cur.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"": ')))
我将把它分开并解释为什么需要每个部分。
path.replace(/,\s*$/,"")
这将从初始数据中删除尾随逗号。
.split("q")
拆分成一个字符串数组。
地图将对数组中的每个元素执行操作。
cur.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"": ')
这是必需的,因为初始字符串的键周围没有双引号,否则它不会解析。
注意:hbg123 的答案将有效,但前提是您可以在键周围加上引号。否则调用 JSON.parse.
时会出错
我有一串坐标对,如下所示:
var path = { lat: 41.51663913751271, lng: -72.42501842191292}q{ lat: 41.522808462596736, lng: -72.33163463285042}q{ lat: 41.44410551903285, lng: -72.31996165921761}q{ lat: 41.43484006513872, lng: -72.41540538480355}q{ lat: 41.48475492271096, lng: -72.36665355374886},
我需要让它看起来像这样:
var coordinates = [
{ lat: 25.774, lng: -80.19 },
{ lat: 18.466, lng: -66.118 },
{ lat: 32.321, lng: -64.757 },
{ lat: 25.774, lng: -80.19 },
];
- 我可以完全控制初始字符串,因此我可以更改格式、分隔符等。
我尝试过的:
var polyCoords = path.split('q');
结果不是我需要的:
["{ lat: 41.51663913751271, lng: -72.42501842191292}", "{ lat: 41.522808462596736, lng: -72.33163463285042}", "{ lat: 41.44410551903285, lng: -72.31996165921761}", "{ lat: 41.43484006513872, lng: -72.41540538480355}", "{ lat: 41.48475492271096, lng: -72.36665355374886}", ""]
我也试过JSON.parse(路径);但这显示语法错误。
此外,如果有帮助,这就是我目前将坐标捕获为字符串的方式:
polygon_boundary_coordinates += "{ lat: " + currentPolygon.getPath().getAt(i).lat() + ", lng: " + currentPolygon.getPath().getAt(i).lng() + "}q";
你有什么建议吗?
拆分后得到字符串化的数组JSON和一个多余的空字符串,你只需要再做两步,过滤掉空字符串,然后映射解析每个过滤后的元素
var polyCoords = path
.split('q')
.filter(Boolean)
.map(coord => JSON.parse(coord))
最后但同样重要的是,在上述之前,最重要的事情是使字符串化 JSON 的属性用引号 ""
括起来,以获得适当的 JSON.parse
polygon_boundary_coordinates += "{ \"lat\": " + currentPolygon.getPath().getAt(i).lat() + ", \"lng\": " + currentPolygon.getPath().getAt(i).lng() + "}q";
const splited = [
'{ "lat": 41.51663913751271, "lng": -72.42501842191292}',
'{ "lat": 41.522808462596736, "lng": -72.33163463285042}',
'{ "lat": 41.44410551903285, "lng": -72.31996165921761}',
'{ "lat": 41.43484006513872, "lng": -72.41540538480355}',
'{ "lat": 41.48475492271096, "lng": -72.36665355374886}',
"",
];
const coordinates = splited.filter(Boolean).map((coord) => JSON.parse(coord));
console.log(coordinates);
你可以这样做。 (部分内容取自here.
let polyCoords = path.replace(/,\s*$/,"").split("q").map(cur=>JSON.parse(cur.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"": ')))
我将把它分开并解释为什么需要每个部分。
path.replace(/,\s*$/,"")
这将从初始数据中删除尾随逗号。
.split("q")
拆分成一个字符串数组。
地图将对数组中的每个元素执行操作。
cur.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"": ')
这是必需的,因为初始字符串的键周围没有双引号,否则它不会解析。
注意:hbg123 的答案将有效,但前提是您可以在键周围加上引号。否则调用 JSON.parse.
时会出错