using CSV using Rasters using NighttimeLights using Plots using DataFrames using Dates capex = CSV.read("./DATA/completed_TPP_locations.csv", DataFrame) ### MONTHLY radiance_path = "/home/nighttimelights/VIIRS_MONTHLY/TILE3/rad/" cfobs_path = "/home/nighttimelights/VIIRS_MONTHLY/TILE3/cf/" dates = range(start = Date(2012,4), step = Month(1), length = length(readdir(radiance_path))) |> collect timestamps = NighttimeLights.yearmon.(dates) function agg_radiance(lat, long, R = 10, res = 15) raster1 = Raster(radiance_path * readdir(radiance_path)[1]) bounds, m = annular_ring(raster1, R, lat, long, res) radiances = [Raster(i, lazy = true)[bounds...] for i in radiance_path .* readdir(radiance_path)] series = RasterSeries(radiances, Ti(timestamps)) radiance_datacube = Rasters.combine(series, Ti) cfobs = [Raster(i, lazy = true)[bounds...] for i in cfobs_path .* readdir(cfobs_path)] series = RasterSeries(cfobs, Ti(timestamps)) cfobs_datacube = Rasters.combine(series, Ti) cleaned = clean_complete(radiance_datacube, cfobs_datacube) return [sum(skipmissing(cleaned[:,:,1,i] .* m)) for i in 1:length(readdir(cfobs_path))] end aggs = [] for i in capex.manually_corrected_lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance(lat, long, 10)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capex = leftjoin(capex, agg_df, on = :lat_long) CSV.write("../DATA/ten_projects_radiance_10km.csv", capex) ### ANNUAL radiance_path = "/home/nighttimelights/VIIRS_ANNUAL/v21_median/" dates = range(start = Date(2012), step = Year(1), length = length(readdir(radiance_path))) |> collect timestamps = year.(dates) function agg_radiance_annual(lat, long, R = 10, res = 15) raster1 = Raster(radiance_path * readdir(radiance_path)[1]) bounds, m = annular_ring(raster1, R, lat, long, res) radiances = [Raster(i, lazy = true)[bounds...] for i in radiance_path .* readdir(radiance_path)] series = RasterSeries(radiances, Ti(timestamps)) radiance_datacube = Rasters.combine(series, Ti) return [sum(skipmissing(Array(radiance_datacube[:,:,1,i] .* m))) for i in 1:length(readdir(radiance_path))] end ## 1 km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 1)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("./DATA/29_thermal_2015_2018_annual_radiance_1km.csv", capexnl) ## 2 km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 2)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("./DATA/29_thermal_2015_2018_annual_radiance_2km.csv", capexnl) ## 4 km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 4)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("./DATA/29_thermal_2015_2018_annual_radiance_4km.csv", capexnl) ## 8 km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 8)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("./DATA/29_thermal_2015_2018_annual_radiance_8km.csv", capexnl) ## 16 km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 16)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("./DATA/29_thermal_2015_2018_annual_radiance_16km.csv", capexnl) ## 10 km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 10)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("./DATA/29_thermal_2015_2018_annual_radiance_10km.csv", capexnl) ## 3km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 3)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("./DATA/29_thermal_2015_2018_annual_radiance_3km.csv", capexnl) ## 1km aggs = [] for i in capex.lat_long lat, long = tuple(parse.(Float64, split(i, ","))...) push!(aggs, agg_radiance_annual(lat, long, 1)) end agg_matrix = cat(aggs..., dims = 2)' agg_df = DataFrame(Array(agg_matrix), :auto) rename!(agg_df, Symbol.(dates)) agg_df.lat_long = capex.lat_long capexnl = leftjoin(capex, agg_df, on = :lat_long) CSV.write("../DATA/annual_radiance_1km.csv", capexnl)