192 lines
4.1 KiB
Python
192 lines
4.1 KiB
Python
#!/usr/bin/env python
|
|
# coding: utf-8
|
|
|
|
# In[1]:
|
|
|
|
|
|
get_ipython().run_cell_magic('time', '', '%matplotlib inline\n\nimport importlib\nimport new_import_ODC \n\nimportlib.reload(new_import_ODC)\n\nfrom new_import_ODC import *\n')
|
|
|
|
|
|
# In[2]:
|
|
|
|
|
|
get_ipython().run_cell_magic('time', '', '# Dask gateway\ncluster, client = notebook_utils.initialize_dask(use_gateway=True, workers=(1,4))\ndc = datacube.Datacube()\n\n# Configure s3 access\nconfigure_s3_access(aws_unsigned=False, requester_pays=True, client=client)\n\nclient\n')
|
|
|
|
|
|
# In[3]:
|
|
|
|
|
|
## cấu hình thời gian lấy ảnh và tọa độ
|
|
date_range = ('2022-09-01', '2023-10-01')
|
|
longtitude_range = (105.86575, 105.94120)
|
|
latitude_range = (9.65070, 9.69850)
|
|
|
|
|
|
# In[4]:
|
|
|
|
|
|
## truy vấn ảnh vệ tinh sen2
|
|
data = load_data(dc, date_range, longtitude_range, latitude_range)
|
|
notebook_utils.heading(notebook_utils.xarray_object_size(data))
|
|
display(data)
|
|
|
|
|
|
# In[5]:
|
|
|
|
|
|
get_ipython().run_cell_magic('time', '', '# Tiến hành loại bỏ các vị trí bị mây ảnh hưởng\nresult = mask_clean(data)\nprogress(result)\n')
|
|
|
|
|
|
# In[6]:
|
|
|
|
|
|
# Tiến hành tính toán NDVI
|
|
ds1 = calculate_indices(result, index='NDVI', satellite_mission='s2')
|
|
ndvi = ds1["NDVI"]
|
|
display(ndvi)
|
|
|
|
|
|
# In[7]:
|
|
|
|
|
|
## ảnh NDVI chưa điền mây (fill nan)
|
|
plt.imshow(ndvi.isel(time=50))
|
|
|
|
|
|
# In[8]:
|
|
|
|
|
|
# đặt thời gian các mùa
|
|
time_split = [slice('2022-09-01', '2023-01-01'),
|
|
slice('2023-01-01', '2023-05-01'),
|
|
slice('2023-05-01', '2023-07-01'),
|
|
slice('2023-07-01', '2023-10-01')]
|
|
|
|
# Điền mây ở các vị trí mang giá trị nan (fill nan)
|
|
fill_nan_ndvi = fill_nan(ndvi, time_split)
|
|
|
|
# In kết quả ảnh ndvi đã điền mây (đã fill nan)
|
|
plt.imshow(fill_nan_ndvi.isel(time=50))
|
|
|
|
|
|
# In[9]:
|
|
|
|
|
|
get_ipython().run_cell_magic('time', '', "## tính ndvi theo tháng\naverage_ndvi = fill_nan_ndvi.resample(time='1M').mean().persist()\nprogress(average_ndvi)\n")
|
|
|
|
|
|
# In[10]:
|
|
|
|
|
|
# compute average_ndvi
|
|
average_ndvi = average_ndvi.compute()
|
|
|
|
|
|
# In[11]:
|
|
|
|
|
|
# load dữ liệu sen1
|
|
coordinates = (longtitude_range, latitude_range)
|
|
dsvh, dsvv = load_data_sen1(dc, date_range, coordinates)
|
|
average_vv = calculate_average(dsvv, time_pattern='1M')
|
|
average_vh = calculate_average(dsvh, time_pattern='1M')
|
|
|
|
|
|
# In[12]:
|
|
|
|
|
|
# load model RF
|
|
loaded_model = joblib.load(os.path.join("model_train", "model_odc.joblib"))
|
|
|
|
# dự đoán
|
|
data_array = predict(loaded_model, data.rio.crs, average_ndvi, average_vh, average_vv)
|
|
|
|
|
|
# In[13]:
|
|
|
|
|
|
# cấu hình màu cho các loại đất
|
|
colors = [
|
|
"#abcee9",
|
|
"#ffef44",
|
|
"#c4ff9e",
|
|
"#ffd6a8",
|
|
"#93ddda",
|
|
"#1aeef7",
|
|
"#ffa7f2",
|
|
"#33ee33"
|
|
]
|
|
labels = [
|
|
"Lúa tôm",
|
|
"Lúa",
|
|
"CHN",
|
|
"CLN",
|
|
"TS",
|
|
"Sông",
|
|
"Đất xây dựng",
|
|
"Rừng"
|
|
]
|
|
# hiển thị phân loại sử dụng đất
|
|
cmap = ListedColormap(colors)
|
|
img = data_array.plot(cmap=cmap, add_colorbar=False)
|
|
cbar = plt.colorbar(img)
|
|
cbar.ax.set_yticklabels(labels)
|
|
plt.title("Phân loại sử dụng đất")
|
|
plt.axis('off')
|
|
plt.show()
|
|
|
|
|
|
# In[14]:
|
|
|
|
|
|
## cấu hình shapefile ranh giới thuận hòa và vh vv file
|
|
thuanhoa_path = "ThuanHoa/region/ST_ThuanHoa_Boundaryofficially.shp"
|
|
|
|
# cắt theo ranh giới xã thuận hòa
|
|
region_result = cut_according_shp(thuanhoa_path, average_ndvi, data_array)
|
|
|
|
|
|
# In[15]:
|
|
|
|
|
|
# hiển thị kết quả phân loại sử dụng đất
|
|
colorval = list(range(len(colors)))
|
|
options = {
|
|
'title': 'Phân loại sử dụng đất',
|
|
'cmap': colors,
|
|
'clim': (0, 8),
|
|
'aspect': 'equal',
|
|
'colorbar_opts': {
|
|
'major_label_overrides': dict(zip(colorval, labels)),
|
|
'major_label_text_align': 'left',
|
|
'ticker': FixedTicker(ticks=colorval),
|
|
},
|
|
}
|
|
|
|
region_result.hvplot(
|
|
rasterize = True, # Use Datashader, particularly useful for dask arrays
|
|
aggregator = reductions.mode(), # Datashader selects mode value, requires 'hv.Image'
|
|
).options(opts.Image(**options))
|
|
|
|
|
|
# In[16]:
|
|
|
|
|
|
# Lưu lại kết quả
|
|
region_result.rio.to_raster("KetQuaPhanLoaiDatODC.tif")
|
|
|
|
|
|
# In[17]:
|
|
|
|
|
|
# đóng client, cluster
|
|
client.close()
|
|
cluster.close()
|
|
|
|
|
|
# In[ ]:
|
|
|
|
|
|
|
|
|