In [ ]:
Copied!
# %pip install geoai-py
# %pip install geoai-py
Import package¶
In [ ]:
Copied!
import geoai
import geoai
Download sample data¶
In [ ]:
Copied!
naip_url = (
"https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_train.tif"
)
masks_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_building_masks.tif"
naip_url = (
"https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_train.tif"
)
masks_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/naip_building_masks.tif"
In [ ]:
Copied!
masks_path = geoai.download_file(masks_url)
naip_path = geoai.download_file(naip_url)
masks_path = geoai.download_file(masks_url)
naip_path = geoai.download_file(naip_url)
In [ ]:
Copied!
geoai.view_image(masks_path, figsize=(18, 10))
geoai.view_image(masks_path, figsize=(18, 10))
In [ ]:
Copied!
geoai.create_split_map(
left_layer=masks_url,
right_layer=naip_url,
left_label="Building Masks",
right_label="NAIP Imagery",
left_args={
"colormap": {"255": "#0000ff"},
"opacity": 0.5,
},
basemap=naip_url,
)
geoai.create_split_map(
left_layer=masks_url,
right_layer=naip_url,
left_label="Building Masks",
right_label="NAIP Imagery",
left_args={
"colormap": {"255": "#0000ff"},
"opacity": 0.5,
},
basemap=naip_url,
)
Convert raster to vector¶
In [ ]:
Copied!
gdf = geoai.raster_to_vector(masks_path, output_path="naip_building_masks.geojson")
gdf = geoai.raster_to_vector(masks_path, output_path="naip_building_masks.geojson")
In [ ]:
Copied!
geoai.view_vector_interactive(
gdf, style_kwds={"color": "blue", "fillOpacity": 0.4}, tiles=naip_url
)
geoai.view_vector_interactive(
gdf, style_kwds={"color": "blue", "fillOpacity": 0.4}, tiles=naip_url
)
In [ ]:
Copied!
geoai.create_split_map(
left_layer=gdf,
right_layer=naip_url,
left_label="Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "blue"}, "fillOpacity": 0.4},
basemap=naip_url,
)
geoai.create_split_map(
left_layer=gdf,
right_layer=naip_url,
left_label="Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "blue"}, "fillOpacity": 0.4},
basemap=naip_url,
)
Building regularization¶
In [ ]:
Copied!
gdf_regularized = geoai.regularization(
building_polygons=gdf,
angle_tolerance=10,
simplify_tolerance=0.5,
orthogonalize=True,
preserve_topology=True,
)
gdf_regularized = geoai.regularization(
building_polygons=gdf,
angle_tolerance=10,
simplify_tolerance=0.5,
orthogonalize=True,
preserve_topology=True,
)
In [ ]:
Copied!
geoai.view_vector_interactive(
gdf_regularized, style_kwds={"color": "red", "fillOpacity": 0.4}, tiles=naip_url
)
geoai.view_vector_interactive(
gdf_regularized, style_kwds={"color": "red", "fillOpacity": 0.4}, tiles=naip_url
)
In [ ]:
Copied!
geoai.create_split_map(
left_layer=gdf_regularized,
right_layer=naip_url,
left_label="Regularized Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "red"}, "fillOpacity": 0.4},
basemap=naip_url,
)
geoai.create_split_map(
left_layer=gdf_regularized,
right_layer=naip_url,
left_label="Regularized Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "red"}, "fillOpacity": 0.4},
basemap=naip_url,
)
Hybrid regularization¶
In [ ]:
Copied!
gdf_hybrid = geoai.hybrid_regularization(gdf)
gdf_hybrid = geoai.hybrid_regularization(gdf)
In [ ]:
Copied!
geoai.view_vector_interactive(
gdf_hybrid, style_kwds={"color": "green", "fillOpacity": 0.4}, tiles=naip_url
)
geoai.view_vector_interactive(
gdf_hybrid, style_kwds={"color": "green", "fillOpacity": 0.4}, tiles=naip_url
)
In [ ]:
Copied!
geoai.create_split_map(
left_layer=gdf_regularized,
right_layer=naip_url,
left_label="Regularized Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "green", "fillOpacity": 0.4}},
basemap=naip_url,
)
geoai.create_split_map(
left_layer=gdf_regularized,
right_layer=naip_url,
left_label="Regularized Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "green", "fillOpacity": 0.4}},
basemap=naip_url,
)
Adaptive regularization¶
In [ ]:
Copied!
gdf_adaptive = geoai.adaptive_regularization(
building_polygons=gdf,
simplify_tolerance=0.5,
area_threshold=0.9,
preserve_shape=True,
)
gdf_adaptive = geoai.adaptive_regularization(
building_polygons=gdf,
simplify_tolerance=0.5,
area_threshold=0.9,
preserve_shape=True,
)
In [ ]:
Copied!
geoai.view_vector_interactive(
gdf_adaptive, style_kwds={"color": "yellow", "fillOpacity": 0.4}, tiles=naip_url
)
geoai.view_vector_interactive(
gdf_adaptive, style_kwds={"color": "yellow", "fillOpacity": 0.4}, tiles=naip_url
)
In [ ]:
Copied!
geoai.create_split_map(
left_layer=gdf_adaptive,
right_layer=naip_url,
left_label="Adaptive Regularization Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "yellow", "fillOpacity": 0.4}},
basemap=naip_url,
)
geoai.create_split_map(
left_layer=gdf_adaptive,
right_layer=naip_url,
left_label="Adaptive Regularization Buildings",
right_label="NAIP Imagery",
left_args={"style": {"color": "yellow", "fillOpacity": 0.4}},
basemap=naip_url,
)
Compare regularization methods¶
In [ ]:
Copied!
import leafmap.foliumap as leafmap
import leafmap.foliumap as leafmap
In [ ]:
Copied!
m = leafmap.Map()
m.add_basemap("SATELLITE")
m.add_gdf(gdf, layer_name="Original")
m.add_gdf(
gdf_regularized, style={"color": "red", "fillOpacity": 0}, layer_name="Regularized"
)
m.add_gdf(gdf_hybrid, style={"color": "green", "fillOpacity": 0}, layer_name="Hybrid")
m.add_gdf(
gdf_adaptive, style={"color": "yellow", "fillOpacity": 0}, layer_name="Adaptive"
)
legend = {
"Original": "blue",
"Regularized": "red",
"Hybrid": "green",
"Adaptive": "yellow",
}
m.add_legend(title="Building Footprints", legend_dict=legend)
m
m = leafmap.Map()
m.add_basemap("SATELLITE")
m.add_gdf(gdf, layer_name="Original")
m.add_gdf(
gdf_regularized, style={"color": "red", "fillOpacity": 0}, layer_name="Regularized"
)
m.add_gdf(gdf_hybrid, style={"color": "green", "fillOpacity": 0}, layer_name="Hybrid")
m.add_gdf(
gdf_adaptive, style={"color": "yellow", "fillOpacity": 0}, layer_name="Adaptive"
)
legend = {
"Original": "blue",
"Regularized": "red",
"Hybrid": "green",
"Adaptive": "yellow",
}
m.add_legend(title="Building Footprints", legend_dict=legend)
m