{"name":"@deckyard/geo","description":"Read, edit and write geographic coordinate formats - GPX, KML, KMZ, GeoJSON and the GML geometry subset - over one point model, with geodesy, track statistics, simplification, geohashes and map tiles","versions":{"0.1.0":{"version":"0.1.0","kind":"git","url":"https://github.com/deckyard/deck-geo.git","ref":"0.1.0","commit":"99160057b00ac1a627a5bd7a85fd9e27f8b31a4b","checksum":"","yanked":false,"license":"LGPL-3.0-only","requires":{},"engines":{"jennifer":"\u003e=0.25.0","jennifer-tiny":"\u003e=0.25.0"},"capabilities":[],"keywords":["geo","gpx","kml","kmz","geojson"],"description":"Read, edit and write geographic coordinate formats - GPX, KML, KMZ, GeoJSON and the GML geometry subset - over one point model, with geodesy, track statistics, simplification, geohashes and map tiles","publishedAt":"1793633054","repoId":1419678755,"repoOwnerId":346943577,"repoOwner":"deckyard"}},"readme":"# @deckyard/geo\n\n[![test](https://github.com/deckyard/deck-geo/actions/workflows/test.yml/badge.svg)](https://github.com/deckyard/deck-geo/actions/workflows/test.yml)\n[![Documentation](https://img.shields.io/badge/docs-github%20pages-blue)](https://deckyard.github.io/deck-geo/)\n[![release](https://img.shields.io/github/v/release/deckyard/deck-geo)](https://github.com/deckyard/deck-geo/releases/latest)\n\nA [Jennifer](https://jennifer-lang.dev/) deck that reads, edits and writes GPX,\nKML, KMZ, GeoJSON and the GML geometry subset through one `Document` type, so a\nconversion is a read and a write. It also measures: great-circle distances and\nbearings, track statistics, simplification, point-in-polygon tests, geohashes\nand Web Mercator map tiles.\n\n## Install\n\n```sh\njvc add @deckyard/geo\n```\n\nOr unpack `src/` from a release archive (`deckyard-geo-\u003cversion\u003e.tar.gz`) into\n`vendor/deckyard/geo/`.\n\nRequires Jennifer 0.25.0 or newer. The deck declares no capabilities, so it\nruns on `jennifer-tiny`; only `open`, `save` and their per-format siblings\ntouch the disk.\n\n## Example\n\n```jennifer\nuse io;\nimport \"@deckyard/geo/\" as geo;\n\ndef doc as geo.Document init geo.open(\"hike.gpx\");\ndef km as float init geo.trackDistance($doc.tracks[0]) / 1000.0;\nio.printf(\"%s: %f|prec=1 km\\n\", geo.describe($doc), $km);\n\ngeo.save($doc, \"hike.kml\");\ngeo.convertFile(\"hike.gpx\", \"hike.geojson\");\n```\n\nCoordinates are WGS 84 degrees and are never reprojected: a document in a\nprojected system (a national grid, a UTM zone) is rejected, not misread. GPX\n`\u003cextensions\u003e`, KML styles and timestamps, and polygon holes are not carried\n(GML reads a hole as a track of its own), and there is no TCX, FIT or NMEA.\n[Formats](https://deckyard.github.io/deck-geo/guide/formats.html) lists what\neach conversion loses.\n\n## Documentation\n\n[deckyard.github.io/deck-geo](https://deckyard.github.io/deck-geo/), with the\nfull API in the\n[cheatsheet](https://deckyard.github.io/deck-geo/reference/cheatsheet.html).\nRunnable programs are in [`examples/`](examples). `tools/check-all.sh` runs the\nCI gate.\n\n## Licence\n\nLGPL-3.0-only, see [LICENSE](LICENSE). Copyright (C) 2026 mplx \u0026lt;mplx@jennifer-lang.dev\u0026gt;.\n"}