#!/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[ ]: