66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
"""
|
|
PoC: produce a minimal valid S-57 .000 for the Wabasso test area and verify it
|
|
opens cleanly with fiona (i.e., GDAL's S-57 driver).
|
|
|
|
Expected result: fiona.listlayers() shows M_COVR + BOYLAT (and no warnings about
|
|
broken bounds), and bounds match the envelope we encoded.
|
|
"""
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent))
|
|
from s57_writer import (
|
|
S57Cell, OBJL_M_COVR, OBJL_BOYLAT,
|
|
ATTL_CATCOV, ATTL_CATLAM,
|
|
)
|
|
|
|
# Wabasso area envelope (lon, lat):
|
|
W, S, E, N = -80.4588, 27.7519, -80.4574, 27.7609
|
|
|
|
OUTPUT = Path(__file__).parent / "test_wabasso.000"
|
|
|
|
cell = S57Cell(
|
|
dsnm="TESTPOC.000",
|
|
edition=1,
|
|
intu=5, # Harbour
|
|
scale=10000,
|
|
agen=999,
|
|
comt="QGISS57Converter PoC",
|
|
issue_date="20260428",
|
|
)
|
|
|
|
# 1) Mandatory M_COVR feature: rectangular envelope, CATCOV=1 (data covered)
|
|
cell.add_area_feature(
|
|
objl=OBJL_M_COVR,
|
|
ring=[(W, S), (E, S), (E, N), (W, N), (W, S)],
|
|
attrs=[(ATTL_CATCOV, "1")], # CATCOV=1 (coverage present)
|
|
)
|
|
|
|
# 2) One BOYLAT (lateral buoy, port hand IALA-B = CATLAM=1) at the centre
|
|
cx = (W + E) / 2
|
|
cy = (S + N) / 2
|
|
cell.add_point_feature(
|
|
objl=OBJL_BOYLAT,
|
|
lon=cx, lat=cy,
|
|
attrs=[(ATTL_CATLAM, "1")], # CATLAM=1 (port-hand lateral mark)
|
|
)
|
|
|
|
cell.write(OUTPUT)
|
|
print(f"Wrote {OUTPUT} ({OUTPUT.stat().st_size} bytes)")
|
|
|
|
# ── Verify with fiona ────────────────────────────────────────────────────────
|
|
print()
|
|
print("Verifying with fiona...")
|
|
try:
|
|
import fiona
|
|
layers = fiona.listlayers(str(OUTPUT))
|
|
print(f" fiona.listlayers: {layers}")
|
|
for L in layers:
|
|
try:
|
|
with fiona.open(str(OUTPUT), layer=L) as src:
|
|
print(f" {L:10s} bounds={src.bounds} features={len(src)}")
|
|
except Exception as e:
|
|
print(f" {L}: open ERROR: {e}")
|
|
except Exception as e:
|
|
print(f" fiona import or listlayers failed: {e}")
|