raster-dl/test/test.ipynb
Guillaume RYCKELYNCK 68d9b2dd53 version 20230116
2023-01-16 15:12:03 +01:00

256 lines
38 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import geopandas as gpd\n",
"\n",
"level = 'communes'\n",
"search = 'hag'\n",
"\n",
"gdf_communes = gpd.read_file(\"../data/raster-dl.gpkg\", layer=level)\n",
"communes = gdf_communes[gdf_communes['nom_com'].str.lower().str.contains(search)]\n",
"communes[['nom_com', 'insee_com']]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"code = '67186'\n",
"buffer = 500\n",
"\n",
"commune = gdf_communes[gdf_communes['insee_com'] == code]\n",
"commune = commune[['geometry', 'insee_com', 'nom_com']]\n",
"commune['geometry']= commune.buffer(buffer)\n",
"\n",
"commune[['nom_com', 'insee_com']]\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"commune.plot(cmap='Greens', edgecolor='black', alpha=0.5)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gdf_dalles = gpd.read_file(\"../data/raster-dl.gpkg\", layer='dalles_ortho_67')\n",
"dalles = gdf_dalles[['geometry', 'FILE_IMG']]\n",
"\n",
"dalles_seleted = gpd.sjoin(dalles, commune, how='inner', predicate='intersects')\n",
"# dalles_seleted.plot(cmap='Greens', edgecolor='black', alpha=0.5)\n",
"\n",
"# a.head(2)\n",
"nb_dalles = len(dalles_seleted)\n",
"print('Nombre de dalles:', nb_dalles)\n",
"\n",
"dalles_seleted[['FILE_IMG', 'insee_com']]\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\n",
"# a.explore(\"FILE_IMG\", cmap=[\"red\"], popup=True, tooltip=\"FILE_IMG\", legend=False, width=600, height=400, tiles=\"Stamen Terrain\")._repr_html_()\n",
"dalles_seleted.explore(\"FILE_IMG\", cmap=[\"red\"], popup=True, tooltip=\"FILE_IMG\", legend=False, width=800, height=400, tiles=\"Stamen Terrain\")"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" code name date_premi date_derni date_fin_c prolongati \\\n",
"0 5 BALLONS des VOSGES None 2012-05-02 2024-05-04 None \n",
"1 24 LORRAINE 27-01-2015 2015-01-27 2027-01-29 None \n",
"2 30 MONTAGNE de REIMS 29-06-1976 2009-05-04 2021-04-18 None \n",
"3 48 VOSGES du NORD None 2014-03-14 2026-03-17 None \n",
"4 2 ARDENNES 21-12-2011 2011-12-21 2023-12-21 None \n",
"5 14 FORET d'ORIENT None 2010-06-11 2021-04-02 None \n",
"\n",
" date_maj_d geometry \\\n",
"0 2012-10-16 MULTIPOLYGON (((6.60510 47.65818, 6.60542 47.6... \n",
"1 2015-02-05 MULTIPOLYGON (((6.76278 48.65561, 6.76252 48.6... \n",
"2 2012-09-01 MULTIPOLYGON (((4.19553 49.14664, 4.19574 49.1... \n",
"3 2014-08-27 MULTIPOLYGON (((7.24248 48.75571, 7.24285 48.7... \n",
"4 2012-10-18 MULTIPOLYGON (((4.23179 49.73104, 4.22936 49.7... \n",
"5 2012-09-11 MULTIPOLYGON (((4.32271 48.20992, 4.32311 48.2... \n",
"\n",
" validity \n",
"0 Valid Geometry \n",
"1 Valid Geometry \n",
"2 Valid Geometry \n",
"3 Valid Geometry \n",
"4 Valid Geometry \n",
"5 Valid Geometry \n"
]
}
],
"source": [
"import geopandas as gpd\n",
"from shapely.validation import explain_validity\n",
"\n",
"# absolute_path_to_file = 'P:/Test/qgis_test/lines_test.shp'\n",
"layer = gpd.read_file(\"../data/raster-dl.gpkg\", layer='pnr')\n",
"# shp = gpd.read_file(absolute_path_to_file)\n",
"\n",
"layer['validity'] = layer.apply(lambda row: explain_validity(row.geometry), axis=1)\n",
"\n",
"print(layer)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" code name date_premi date_derni date_fin_c prolongati \\\n",
"0 5 BALLONS des VOSGES None 2012-05-02 2024-05-04 None \n",
"1 24 LORRAINE 27-01-2015 2015-01-27 2027-01-29 None \n",
"2 30 MONTAGNE de REIMS 29-06-1976 2009-05-04 2021-04-18 None \n",
"3 48 VOSGES du NORD None 2014-03-14 2026-03-17 None \n",
"4 2 ARDENNES 21-12-2011 2011-12-21 2023-12-21 None \n",
"5 14 FORET d'ORIENT None 2010-06-11 2021-04-02 None \n",
"\n",
" date_maj_d geometry \n",
"0 2012-10-16 MULTIPOLYGON (((6.60510 47.65818, 6.60542 47.6... \n",
"1 2015-02-05 MULTIPOLYGON (((6.76278 48.65561, 6.76252 48.6... \n",
"2 2012-09-01 MULTIPOLYGON (((4.19553 49.14664, 4.19574 49.1... \n",
"3 2014-08-27 MULTIPOLYGON (((7.24248 48.75571, 7.24285 48.7... \n",
"4 2012-10-18 MULTIPOLYGON (((4.23179 49.73104, 4.22936 49.7... \n",
"5 2012-09-11 MULTIPOLYGON (((4.32271 48.20992, 4.32311 48.2... \n"
]
}
],
"source": [
"import geopandas as gpd\n",
"from shapely.validation import make_valid\n",
"\n",
"layer = gpd.read_file(\"../data/raster-dl.gpkg\", layer='pnr')\n",
"\n",
"layer.geometry = layer.apply(lambda row: make_valid(row.geometry) if not row.geometry.is_valid else row.geometry, axis=1)\n",
"\n",
"layer.to_file(\"../data/raster-dl.gpkg\", layer='pnr2', driver=\"GPKG\")\n",
"\n",
"print(layer)"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 600x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import geopandas as gpd\n",
"from shapely.validation import make_valid\n",
"\n",
"gdf_level = gpd.read_file(\"../data/raster-dl.gpkg\", layer='pnr')\n",
"level_feature = gdf_level[gdf_level['code'] == 48]\n",
"level_feature = level_feature[['geometry', 'code', 'name']]\n",
" \n",
"# if bbox:\n",
"# bbox_feature = get_bbox(level_feature, buffer)\n",
"# extent = bbox_feature \n",
"# else:\n",
"# level_feature['geometry']= level_feature.buffer(int(buffer))\n",
"# bbox_feature = get_bbox(level_feature)\n",
"# extent = level_feature\n",
"extent = level_feature\n",
"# extent.plot(cmap='Greens',edgecolor='black', alpha=0.5)\n",
"# print(extent)\n",
"\n",
"gdf_products = gpd.read_file(\"../data/raster-dl.gpkg\", layer='products')\n",
"# products_seleted = gpd.overlay(gdf_products, extent, how='difference')\n",
"# products_seleted = gpd.overlay(extent, gdf_products, how='intersection')\n",
"products_seleted = gpd.sjoin(gdf_products, extent, how='inner', predicate='intersects')\n",
"# products_seleted = gpd.sjoin(extent, gdf_products, how='right', predicate='contains')\n",
"# products_seleted = gpd.sjoin(extent, gdf_products, how='right', predicate='within')\n",
"# products_seleted = gpd.sjoin(extent, gdf_products, how='right', predicate='touches')\n",
"# products_seleted = gpd.sjoin(extent, gdf_products, how='right', predicate='crosses')\n",
"# products_seleted = gpd.sjoin(extent, gdf_products, how='right', predicate='overlaps')\n",
"# products_seleted['code'] = products_seleted['code_left']\n",
"# products_seleted = products_seleted[['code', 'data_extent', 'data_product', 'data_date', 'data_resolution', 'data_compression', 'data_type', 'metadata_url', 'data_directory', 'data_url', 'layer_tiles', 'parent']]\n",
"# products_seleted = products_seleted[products_seleted['code_right'] == 48]\n",
"\n",
"# products_seleted.head(50)\n",
"\n",
"# products_seleted.plot(cmap='Greens', alpha=0.5)\n",
"# Generate plot map\n",
"fig = plt.figure(figsize=(6, 6))\n",
"spec = fig.add_gridspec(ncols=1, nrows=1)\n",
"plot_map = fig.add_subplot(spec[0, 0])\n",
"# fig.suptitle('Selection des produits sur {extent}'.format(extent=extent.iloc[0]['name']))\n",
"extent.plot(facecolor='None', edgecolor='blue', alpha=0.5, ax=plot_map)\n",
"products_seleted.plot(facecolor='None', edgecolor='red', alpha=0.5, ax=plot_map)\n",
"plt.axis('off')\n",
"# plt.savefig('./web/products.png')\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.6"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "adac29f101240a8cac2f47e47a2d9747c19dcb5e071fdfcf39523cae4909c500"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}