【问题标题】:How to convert coordinate pair from string to array for google map polygon?如何将坐标对从字符串转换为谷歌地图多边形的数组?
【发布时间】:2021-04-07 06:41:29
【问题描述】:

我有一串坐标对,如下所示:

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(path);但这显示了语法错误。

另外,如果有帮助,这就是我当前将坐标捕获为字符串的方式:

polygon_boundary_coordinates += "{ lat: " + currentPolygon.getPath().getAt(i).lat() + ", lng: " + currentPolygon.getPath().getAt(i).lng() + "}q";

你有什么建议吗?

【问题讨论】:

    标签: jquery arrays google-maps-api-3


    【解决方案1】:

    拆分后,结果是字符串化的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);

    【讨论】:

    • 非常感谢。我需要一段时间才能弄清楚这一切。我对 json.parse 不够熟悉。
    【解决方案2】:

    你可以做这样的事情。 (部分内容取自here.

    let polyCoords = path.replace(/,\s*$/,"").split("q").map(cur=>JSON.parse(cur.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')))
    

    我将把它分解并解释为什么需要每个部分。

    path.replace(/,\s*$/,"")

    这会从初始数据中删除尾随逗号。

    .split("q")

    拆分成一个字符串数组。

    地图将对数组中的每个元素执行操作。

    cur.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": ')

    这是必需的,因为初始字符串的键周围没有双引号,否则它不会解析。

    注意:hbg123 的答案将有效,但前提是您可以在键周围获得引号。否则调用 JSON.parse 时会报错。

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多