CountyCollective Reference

Beacon WKT Converter

Original Python EPSG:2965 to EPSG:4326 WKT-to-GeoJSON conversion helper.

Back to CountyCollective Reference

wordpress-plugin/tools/gis/convert_beacon_wkt_to_geojson.py

#!/usr/bin/env python3
"""Convert Beacon EPSG:2965 WKT geometry to EPSG:4326 GeoJSON geometry.

Input JSON on stdin:
  {"wkt": "MULTIPOLYGON (...)"}

Output JSON on stdout:
  {"ok": true, "geometry": {...}}

Requires:
  pip install -r tools/gis/requirements.txt
"""

import json
import sys

try:
    from pyproj import Transformer  # type: ignore[reportMissingImports]
    from shapely import wkt  # type: ignore[reportMissingImports]
    from shapely.geometry import mapping  # type: ignore[reportMissingImports]
    from shapely.ops import transform  # type: ignore[reportMissingImports]
except Exception as exc:  # pragma: no cover - surfaced to PHP admin UI.
    print(json.dumps({"ok": False, "error": "Missing Python dependency: %s" % exc}))
    sys.exit(1)


def main():
    try:
        payload = json.load(sys.stdin)
        raw_wkt = payload.get("wkt", "")
        if not raw_wkt:
            raise ValueError("Missing WKT geometry.")

        transformer = Transformer.from_crs("EPSG:2965", "EPSG:4326", always_xy=True)
        geometry = wkt.loads(raw_wkt)
        converted = transform(transformer.transform, geometry)

        print(json.dumps({"ok": True, "geometry": mapping(converted)}, separators=(",", ":")))
    except Exception as exc:  # pragma: no cover - surfaced to PHP admin UI.
        print(json.dumps({"ok": False, "error": str(exc)}))
        sys.exit(1)


if __name__ == "__main__":
    main()