将此处 API WKTShapeType Multipolygon 转换为 GeoJSON?

问题描述 投票:0回答:1

我可以访问如下数据源:

"Shape": {
   "_type": "WKTShapeType",
   "Value": "MULTIPOLYGON (((-128.9102 50.82492, -128.90881 50.82422, -128.90717 50.82318, -128.90566 50.82344, -128.90458 50.82304, -128.90401 50.82154, -128.90497 50.82093..."
}

我想将上面的内容转换为如下格式:

{
  "shape": [[{"lat": 39.65451, "lng": -75.78862}, {"lat": 39.65476, "lng": -75.78862}, etc...
}

我不确定两者的格式名称是什么(我相信前者是Multipolygon,后者是GeoJSON)?前者来自调用 Here API 的地理编码器端点。后者存储为 JSON 文件。

有什么在线工具可以帮助我进行转换吗?

geospatial polygon geojson here-api multipolygons
1个回答
0
投票

我最终创建了一个构建在 Wicket 库之上的自定义解析器。

import wicket from 'wicket/wicket';

const parser = (outerPolygon) => {
  const wkt = new wicket.Wkt();
  const parsePolygonData = (polygon) => {
    wkt.read(polygon);
    wkt.toJson();
    const polygons = wkt.components;
    for (let i = 0; i < polygons.length; i++) {
      for (let x = 0; x < polygons[i].length; x++) {
        if (wkt.type === 'multipolygon') {
          for (let y = 0; y < polygons[i][x].length; y++) {
            polygons[i][x][y].lat = polygons[i][x][y].y;
            delete polygons[i][x][y].y;
            polygons[i][x][y].lng = polygons[i][x][y].x;
            delete polygons[i][x][y].x;
          }
        } else {
          polygons[i][x].lat = polygons[i][x].y;
          delete polygons[i][x].y;
          polygons[i][x].lng = polygons[i][x].x;
          delete polygons[i][x].x;
        }
      }
      if (wkt.type === 'multipolygon') {
        polygons[i] = polygons[i][0];
      }
    }
    return polygons;
  };
  return parsePolygonData(outerPolygon);
};

Wicket 读取我通过此处端点响应中的

Shape.Value
收到的正文并将其 JSON 化。然后,我通过给每个值一个标签来重新排列纬度/经度。

最终结果如下所示:

[[{"lat": 39.65451, "lng": -75.78862}, {"lat": 39.65476, "lng": -75.78862}, etc...
© www.soinside.com 2019 - 2024. All rights reserved.