如何将 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.

时会出错