Jonathan Marokhovsky
Added type hints
fc12f93
raw
history blame contribute delete
No virus
1.21 kB
"""
These functions are meant to manipulate and act on a given leafmap instance in solara.
"""
import json
import logging
import typing
import geojson
import geopandas as gpd
import rioxarray
# from ipyleaflet import GeoJSON
# from area import area as area
log = logging.getLogger(__name__)
# def calculate_area(poly: geojson.GeoJSON) -> float:
# output: float = 0.0
# try:
# if poly["geometry"] and poly["geometry"]["type"] == "Polgon":
# output = area(poly["geometry"])
# except KeyError:
# raise TypeError("The given GeoJSON did not contain a Polygon as was expected")
#
# return output
def extract_geom(
gdf: gpd.GeoDataFrame, cog: str
) -> rioxarray.rioxarray.raster_array.RasterArray:
x = rioxarray.open_rasterio("/vsicurl/" + cog, masked=True).rio.clip(
gdf.geometry.values, gdf.crs, from_disk=True
)
return x
def read_polygon(polygon: geojson.GeoJSON) -> gpd.GeoDataFrame:
geojson_str = json.dumps(polygon)
gdf = gpd.read_file(geojson_str, driver="GeoJSON")
gdf.set_crs("epsg:4326")
return gdf
def area_hectares(gdf: gpd.GeoDataFrame):
area = gdf.to_crs("EPSG:9822").area / 10000.0
return area