Преобразование списка координат полигона JSON в массивы Long / Lat в формате GeoJSON - PullRequest
0 голосов
/ 24 июня 2019

Я получаю данные из REST API, в результате чего получается список наборов данных. Некоторые из этих наборов данных содержат координаты, которые я хочу проецировать на карту. Чтобы спроецировать координаты, мне нужно преобразовать вывод JSON в GeoJSON. В то время как преобразование идет хорошо для большей части данных. Я борюсь с длинным массивом, содержащим координаты х и у. Это 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 голосов
/ 24 июня 2019

Я думаю, что эта функция сделает всю работу за вас.

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]))
...