Объединить дополнительные данные во вложенный объект свойств Geo JSON (или JSON) - PullRequest
0 голосов
/ 10 апреля 2020

Так что я использую Plotly с choropleth Mapbox. Мне нужно «склеить» некоторые сторонние данные на объекте свойств в массиве «функций» Geo JSON. Например:

let myData = [
                        {
                            "id": 2,
                            "newValue": 40
                        },
                        {
                            "id": 1,
                            "newValue": 80
                        }
                    ];

А данные Geo JSON выглядят так:

let geoData = {
                "type": "FeatureCollection",
                "features": [
                     {
                       "type": "Feature",
                       "properties": {
                           "id": 1,
                            "name": "my name one"
                        },
                        "geometry": {
                            "type": "Polygon",
                            "coordinates": [
                                           long list of co-ordinates
                                        [
                                }
                            },
               {
                 "type": "Feature",
                 "properties": {
                     "id": 2,
                     "name": "my name two"
                     },
                    "geometry": {
                    "type": "Polygon",
                    "coordinates": [
                                        long list of co-ordinates
                                        [
                                }
                            }

ожидаемый новый объект Geo JSON будет выглядеть следующим образом:

let geoData = {
                "type": "FeatureCollection",
                "features": [
                     {
                       "type": "Feature",
                       "properties": {
                           "id": 1,
                            "name": "my name one",
                            "newValue":80
                        },
                        "geometry": {
                            "type": "Polygon",
                            "coordinates": [
                                           long list of co-ordinates
                                        [
                                }
                            },
               {
                  "type": "Feature",
                  "properties": {
                      "id": 2,
                      "name": "my name two",
                      "newValue": 40
                  },
                  "geometry": {
                  "type": "Polygon",
                  "coordinates": [
                                      long list of co-ordinates
                                        [
                                }
                            }

формула, которую я до сих пор придумал, объединяет значения в нужную особенность путем сопоставления идентификатора, но добавляет значения в «root» объекта, а не в свойствах, см. Функцию ниже:

let geoDataFeatures = geoData.features;

const mergeById = (a1, a2) =>

    a1.map(itm => (

     { ...a2.find( (item) => ( item.objectid === itm.properties.objectid) && item ), ...itm }
     )
);

console.log('merged data',mergeById(geoDataFeatures, googData));

Так может ли кто-нибудь увидеть, как мне нужно изменить карту, чтобы новые данные были объединены в объект свойств ТОЛЬКО?

Большое спасибо;)

...