feat: implement comprehensive land cover classification pipeline with model benchmarking and experiment logging
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import geopandas as gpd
|
||||
import planetary_computer
|
||||
import pystac_client
|
||||
import odc.stac
|
||||
import numpy as np
|
||||
from shapely.geometry import Point, shape
|
||||
from pyproj import Transformer
|
||||
|
||||
bbox = [105.5, 9.2, 106.3, 10.0]
|
||||
time_range = "2023-01-01/2023-04-30"
|
||||
catalog = pystac_client.Client.open(
|
||||
"https://planetarycomputer.microsoft.com/api/stac/v1",
|
||||
modifier=planetary_computer.sign_inplace,
|
||||
)
|
||||
items = list(catalog.search(collections=["sentinel-2-l2a"], bbox=bbox, datetime=time_range, query={"eo:cloud_cover": {"lt": 30}}).items())
|
||||
items = sorted(items, key=lambda x: x.properties["eo:cloud_cover"])
|
||||
|
||||
gdf = gpd.read_file("train/ST_training_data_updated_1130points_new.shp")
|
||||
gdf = gdf.to_crs("EPSG:32648")
|
||||
|
||||
# Find a point that fails. Let's just test a few points.
|
||||
for idx, row in gdf.head(20).iterrows():
|
||||
x_coord = row['geometry'].x
|
||||
y_coord = row['geometry'].y
|
||||
|
||||
transformer = Transformer.from_crs("epsg:32648", "epsg:4326", always_xy=True)
|
||||
lon, lat = transformer.transform(x_coord, y_coord)
|
||||
point = Point(lon, lat)
|
||||
|
||||
filtered = []
|
||||
for item in items:
|
||||
if shape(item.geometry).contains(point):
|
||||
filtered.append(item)
|
||||
|
||||
filtered = [planetary_computer.sign(item) for item in filtered]
|
||||
if not filtered:
|
||||
print(f"Point {idx}: NO ITEMS CONTAINS POINT!")
|
||||
continue
|
||||
|
||||
ds = odc.stac.load(
|
||||
filtered,
|
||||
bands=["B02"],
|
||||
x=(x_coord - 80, x_coord + 80),
|
||||
y=(y_coord - 80, y_coord + 80),
|
||||
crs="EPSG:32648",
|
||||
resolution=10,
|
||||
patch_url=planetary_computer.sign,
|
||||
fail_on_error=False
|
||||
).compute()
|
||||
|
||||
sums = ds["B02"].sum(dim=["x", "y"]).values
|
||||
non_zero = (sums > 0).sum()
|
||||
print(f"Point {idx}: {len(filtered)} items, {non_zero} non-zero time steps")
|
||||
Reference in New Issue
Block a user