Add files via upload
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import rasterio
|
||||
import numpy as np
|
||||
from scipy.stats import pearsonr
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
def read_raster_data(raster_path, target_width, target_height):
|
||||
with rasterio.open(raster_path) as raster:
|
||||
data = raster.read(1, masked=True) # Reads the first band
|
||||
if data.shape != (target_height, target_width):
|
||||
data = data[:target_height, :target_width]
|
||||
if raster.nodata is not None:
|
||||
data = data.filled(np.nan) # Fill masked values with NaN
|
||||
return data
|
||||
|
||||
def flatten_data(data):
|
||||
return data.flatten()
|
||||
|
||||
def calculate_correlation(data1, data2):
|
||||
mask = ~np.isnan(data1) & ~np.isnan(data2)
|
||||
|
||||
filtered_data1 = data1[mask]
|
||||
filtered_data2 = data2[mask]
|
||||
|
||||
correlation, _ = pearsonr(filtered_data1, filtered_data2)
|
||||
return correlation, filtered_data1, filtered_data2 # Return the filtered data for plotting
|
||||
|
||||
def plot_correlation(data1, data2, correlation, file_path):
|
||||
plt.scatter(data1, data2, alpha=0.5)
|
||||
plt.xlim(0,7)
|
||||
#plt.title(f'Correlation: {correlation:.2f}')
|
||||
plt.xlabel('Raster 1 Values')
|
||||
plt.ylabel('Raster 2 Values')
|
||||
plt.savefig(file_path, dpi=300)
|
||||
plt.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raster_path1 = 'friction surface.tif'
|
||||
raster_path2 = 'ghsl.tif'
|
||||
save_path = 'plot.png'
|
||||
|
||||
# Common dimensions
|
||||
target_width = 275 # Choose based on your requirements
|
||||
target_height = 254
|
||||
|
||||
data1 = flatten_data(read_raster_data(raster_path1, target_width, target_height))
|
||||
data2 = flatten_data(read_raster_data(raster_path2, target_width, target_height))
|
||||
|
||||
correlation, filtered_data1, filtered_data2 = calculate_correlation(data1, data2)
|
||||
plot_correlation(filtered_data1, filtered_data2, correlation, save_path)
|
||||
|
||||
Reference in New Issue
Block a user