Hola, estoy trabajando con un gran conjunto de datos geojson y estoy tratando de ver si puedo fusionar los valores de coordenadas de cada entrada en función de las entradas que comparten el mismo "User_ID".
Mi conjunto de datos se ve así:
{ "geometry":{ "type":"Point", "coordinates":[ -3.231658, 51.687026 ] }, "type":"Feature", "properties":{ "User_ID":1002848324 } }, { "geometry":{ "type":"Point", "coordinates":[ -3.231659, 51.687016 ] }, "type":"Feature", "properties":{ "User_ID":1002848324 } }Intenté fusionar las entradas usando el método que se muestra en la respuesta de mwarren, url: "https://stackoverflow.com/questions/29244116/merge-geojson-based-on-unique-id".
Sin embargo, esto viene con el pequeño problema de que "attr" se ve como un "Identificador inesperado" cuando intento ejecutar una prueba.
Mi prueba del código hasta ahora es la siguiente:
features.map(function(feature){ var matchedArray = features2.filter(function(feature2){ return feature2.User_ID === feature.User_ID; }); if(matchedArray && matchedArray[0]){ for(var attr in matchedArray[0].properties){ feature.properties[attr] = matchedArray[0].properties[attr]; } } });El resultado deseado debería ser algo como esto:
{ "geometry":{ "type":"Point", "coordinates":[ -3.231658, 51.687026 ], [ -3.231659, 51.687016 ] }, "type":"Feature", "properties":{ "User_ID":1002848324 }Cualquier ayuda será apreciada.
Del comentario anterior...
"El OP necesita agrupar/recopilar los datos no solo por los mismos valores de
User_IDsino también por el mismotypeY los mismos valoresUser_ID"
... y tal vez incluso por el mismo tipo de geometry.type . Una agrupación/recopilación basada solo en User_ID no es lo suficientemente explícita porque los elementos con los mismos valores de User_ID pueden presentar diferentes valores de type o incluso pueden diferir en sus valores de tipo de geometry.type .
Una tarea basada en reduce que utiliza un objeto collector que presenta un objeto como lookup y una matriz de result para los datos finales agregados resuelve la tarea del OP en un paso de iteración...
function collectSameGeoCategoryItems(collector, item) { const { lookup, result } = collector; const { properties: { User_ID }, type } = item; const groupKey = `${ type }_${ User_ID }`; let groupItem = lookup[groupKey]; if (groupItem) { // push coordinates copy into existing array of coordinate arrays. groupItem.geometry.coordinates.push([...item.geometry.coordinates]); } else { // create full copy of geo item in order // to not mutate the original reference. groupItem = lookup[groupKey] = { geometry: { type: item.geometry.type, coordinates: [ [...item.geometry.coordinates] ], }, type, properties: { User_ID }, }; result.push(groupItem); } return collector; } const sampleData = [{ geometry: { type: "Point", coordinates: [ -3.231658, 51.687026, ], }, type: "Feature", properties: { User_ID: 1002848324, }, }, { geometry: { type: "Point", coordinates: [ -3.231659, 51.687016, ], }, type: "Feature", properties: { User_ID: 1002848324, }, }, { geometry: { type: "Point", coordinates: [ -3.231658, 51.687026, ], }, type: "Foo", properties: { User_ID: 1002848324, }, }, { geometry: { type: "Point", coordinates: [ -3.231659, 51.687016, ], }, type: "Bar", properties: { User_ID: 1002848324, }, }, { geometry: { type: "Point", coordinates: [ -3.231658, 51.687026, ], }, type: "Foo", properties: { User_ID: 1000000000, }, }, { geometry: { type: "Point", coordinates: [ -3.231659, 51.687016, ], }, type: "Bar", properties: { User_ID: 1002848324, }, }]; console.log( 'aggregated `result` ...', sampleData.reduce(collectSameGeoCategoryItems, { lookup: {}, result: [] }).result ); console.log('unmutated sample data ... ', { sampleData }); console.log( 'aggregated `lookup`, not needed, just for demonstration purpose ...', sampleData.reduce(collectSameGeoCategoryItems, { lookup: {}, result: [] }).lookup ); .as-console-wrapper { min-height: 100%!important; top: 0; }Has deletreado var a "guerra", que debe ser 'var'. y si esto no es un error, especifique qué es la matriz 'características2'.