Skip to content

Commit b6edc76

Browse files
committed
feat(goatlib): add check for existing anchor layer in PMTiles sync task
1 parent 983cc3f commit b6edc76

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

packages/python/goatlib/src/goatlib/tasks/sync_pmtiles.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,19 +405,44 @@ def _detect_geometry_type(
405405
)
406406
return "unknown"
407407

408+
@staticmethod
409+
def _has_anchor_layer(pmtiles_path: "Path") -> bool:
410+
"""Check if a PMTiles file already contains a default_anchor layer."""
411+
try:
412+
from pmtiles.reader import MmapSource
413+
from pmtiles.reader import Reader as PMTilesReader
414+
415+
with open(pmtiles_path, "rb") as f:
416+
reader = PMTilesReader(MmapSource(f))
417+
meta = reader.metadata()
418+
layers = [l["id"] for l in meta.get("vector_layers", [])]
419+
return "default_anchor" in layers
420+
except Exception:
421+
return False
422+
408423
def _process_layer(
409424
self: Self,
410425
layer: LayerInfo,
411426
force: bool = False,
412427
dry_run: bool = False,
413428
show_progress: bool = True,
429+
skip_existing_anchors: bool = False,
414430
) -> SyncResult:
415431
"""Process a single layer - generate PMTiles if needed."""
416432
generator = self._get_generator()
417433

418434
try:
419435
pmtiles_path = generator.get_pmtiles_path(layer.user_id, layer.layer_id)
420436

437+
# Skip if already has anchor layer (for resumable polygon migration)
438+
if skip_existing_anchors and pmtiles_path.exists():
439+
if self._has_anchor_layer(pmtiles_path):
440+
return SyncResult(
441+
layer_id=layer.layer_id,
442+
status="skipped",
443+
message="Already has anchor layer",
444+
)
445+
421446
# Check if regeneration is needed
422447
if pmtiles_path.exists() and not force:
423448
if generator.is_pmtiles_in_sync(pmtiles_path, layer.snapshot_id):
@@ -613,6 +638,7 @@ def run(
613638
force=params.force,
614639
dry_run=params.dry_run,
615640
show_progress=params.show_progress,
641+
skip_existing_anchors=params.geometry_type_filter == "polygon",
616642
)
617643

618644
if result.status == "generated":

0 commit comments

Comments
 (0)