import { FeatureCollection, Feature } from 'geojson'; import { DistrictCrimeData } from '../_components/map/layers/district-layer'; /** * Transforms district GeoJSON data with crime statistics */ export function transformDistrictGeoJSON( baseGeoJSON: FeatureCollection, crimeData: DistrictCrimeData[] = [] ): FeatureCollection { // Create a typed GeoJSON object const typedGeoJson = { ...baseGeoJSON, type: 'FeatureCollection' as const, } as FeatureCollection; // If no crime data, return the base GeoJSON if (!crimeData.length) { return typedGeoJson; } // Transform features with crime data return { ...typedGeoJson, features: typedGeoJson.features.map((feature) => { const districtId = feature.properties?.kode_kec; const matchingData = crimeData.find((d) => d.district_id === districtId); if (matchingData) { return { ...feature, properties: { ...feature.properties, number_of_unemployed: matchingData.demographics.map( (demo) => demo.number_of_unemployed ), population: matchingData.demographics.map( (demo) => demo.population ), population_density: matchingData.demographics.map( (demo) => demo.population_density ), number_of_crime: matchingData.number_of_crime, score: matchingData.score, level: matchingData.level, address: matchingData.geographics.map((geo) => geo.address), land_area: matchingData.geographics.map((geo) => geo.land_area), latitude: matchingData.incidents.map( (incident) => incident.latitude ), longitude: matchingData.incidents.map( (incident) => incident.latitude ), }, }; } return feature; }), }; }