将GeogonJSON格式的JSON多边形坐标列表转换为Long / Lat数组

时间:2019-06-24 13:46:13

标签: javascript json geojson

我正在从REST API提取数据,这会生成数据集列表。其中一些数据集包含我要投影在地图上的坐标。为了投影坐标,我需要将JSON输出转换为GeoJSON。虽然对于大部分数据来说转换都很好。我很难处理包含x和y坐标的长数组。它是4个以上的点组合成多边形(第5个终点=缺少起点)。

如何将具有4个以上XY坐标的一个数组转换为正确的格式,同时添加最后一个与第一个点匹配的数组?

我曾考虑过将数组的每个点都切成新数组,但这对于20个点以上的多边形会导致过多的工作。

JSON示例:

"footprint": {
        "epsgId": 4326,
        "data": [
          [
            5.785569964298996,
            50.94215924789526,
            5.934953425435474,
            50.94154873163077,
            5.9341556116101595,
            50.87413533708443,
            5.784989651500041,
            50.87474468292546
          ]
        ],
      },

这是转换成GeoJSON后的样子。我自己写下了这个代码,但是我需要一个JavaScript代码才能在遍历结果时自动执行此操作。

    {
      "type": "Feature",
      "properties": {
        "name": "name"
        "id" : "id"
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [5.785569964298996, 50.94215924789526],
            [5.934953425435474, 50.94154873163077],
            [5.9341556116101595, 50.87413533708443],
            [5.784989651500041, 50.87474468292546],
            [5.785569964298996, 50.94215924789526]
          ]
        ]
      }
    }

1 个答案:

答案 0 :(得分:0)

我认为此功能将为您完成工作。

d = {"footprint": {
        "epsgId": 4326,
        "data": [
          [
            5.785569964298996,
            50.94215924789526,
            5.934953425435474,
            50.94154873163077,
            5.9341556116101595,
            50.87413533708443,
            5.784989651500041,
            50.87474468292546
          ]
        ],
      }
    }
console.log(d)

function convert(points)
{
  geojson = {
      "geometry": {
        "type": "Polygon",
        "coordinates": [
        ]
      }
  }
  var coordinates = new Array();
  for (var i = 0; i < points.length; i+=2) {
    coordinates.push([points[i],points[i+1]])
  }
  //closing the polygon
  coordinates.push([points[0],points[1]])
  // points need to be in zero index of coordinates array
  geojson.geometry.coordinates = new Array(coordinates);
  return geojson;
}

console.log(convert(d["footprint"]["data"][0]))