In [ ]:
Copied!
# %pip install geoai-py
# %pip install geoai-py
Import libraries¶
In [ ]:
Copied!
import geoai
import geoai
Download sample data¶
In [ ]:
Copied!
raster_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/solar_panels_davis_ca.tif"
raster_path = geoai.download_file(raster_url)
raster_url = "https://huggingface.co/datasets/giswqs/geospatial/resolve/main/solar_panels_davis_ca.tif"
raster_path = geoai.download_file(raster_url)
In [ ]:
Copied!
geoai.print_raster_info(raster_path)
geoai.print_raster_info(raster_path)
Visualize data¶
In [ ]:
Copied!
geoai.view_raster(raster_url)
geoai.view_raster(raster_url)
Initialize model¶
In [ ]:
Copied!
detector = geoai.SolarPanelDetector()
detector = geoai.SolarPanelDetector()
Generate masks¶
In [ ]:
Copied!
output_path = "solar_panel_masks.tif"
output_path = "solar_panel_masks.tif"
In [ ]:
Copied!
masks_path = detector.generate_masks(
raster_path,
output_path=output_path,
confidence_threshold=0.4,
mask_threshold=0.5,
min_object_area=100,
overlap=0.25,
chip_size=(400, 400),
batch_size=4,
verbose=False,
)
masks_path = detector.generate_masks(
raster_path,
output_path=output_path,
confidence_threshold=0.4,
mask_threshold=0.5,
min_object_area=100,
overlap=0.25,
chip_size=(400, 400),
batch_size=4,
verbose=False,
)
Visualize masks¶
In [ ]:
Copied!
geoai.view_raster(
output_path,
indexes=[2],
colormap="autumn",
layer_name="Solar Panels",
basemap=raster_url,
)
geoai.view_raster(
output_path,
indexes=[2],
colormap="autumn",
layer_name="Solar Panels",
basemap=raster_url,
)
Vectorize masks¶
In [ ]:
Copied!
gdf = geoai.orthogonalize(
input_path=masks_path, output_path="solar_panel_masks.geojson", epsilon=0.2
)
gdf = geoai.orthogonalize(
input_path=masks_path, output_path="solar_panel_masks.geojson", epsilon=0.2
)
Visualize initial results¶
In [ ]:
Copied!
geoai.view_vector_interactive(gdf, tiles=raster_url)
geoai.view_vector_interactive(gdf, tiles=raster_url)
Calculate geometric properties¶
In [ ]:
Copied!
gdf = geoai.add_geometric_properties(gdf)
gdf.head()
gdf = geoai.add_geometric_properties(gdf)
gdf.head()
In [ ]:
Copied!
print(len(gdf))
print(len(gdf))
In [ ]:
Copied!
geoai.view_vector_interactive(gdf, column="elongation", tiles=raster_url)
geoai.view_vector_interactive(gdf, column="elongation", tiles=raster_url)
Filter results¶
In [ ]:
Copied!
gdf_filter = gdf[(gdf["elongation"] < 10) & (gdf["area_m2"] > 5)]
print(len(gdf_filter))
gdf_filter = gdf[(gdf["elongation"] < 10) & (gdf["area_m2"] > 5)]
print(len(gdf_filter))
Visualize final results¶
In [ ]:
Copied!
geoai.view_vector_interactive(gdf_filter, column="area_m2", tiles=raster_url)
geoai.view_vector_interactive(gdf_filter, column="area_m2", tiles=raster_url)
In [ ]:
Copied!
geoai.view_vector_interactive(
gdf_filter, style_kwds={"color": "red", "fillOpacity": 0}, tiles=raster_url
)
geoai.view_vector_interactive(
gdf_filter, style_kwds={"color": "red", "fillOpacity": 0}, tiles=raster_url
)
In [ ]:
Copied!
gdf_filter["area_m2"].hist()
gdf_filter["area_m2"].hist()
In [ ]:
Copied!
gdf_filter["area_m2"].describe()
gdf_filter["area_m2"].describe()
In [ ]:
Copied!
gdf_filter["area_m2"].sum()
gdf_filter["area_m2"].sum()
Save results¶
In [ ]:
Copied!
gdf_filter.to_file("solar_panels.geojson")
gdf_filter.to_file("solar_panels.geojson")