# GeoConvert synthetic tutorial samples

All examples are self-authored, tiny synthetic data by GeoConvert contributors.
They do not represent surveyed places, people, property boundaries or real projects.
To the extent possible under law, the authors dedicate these sample files to the
public domain under CC0 1.0 Universal: https://creativecommons.org/publicdomain/zero/1.0/.
This dedication covers the examples and their manifest/README; it does not change
licenses of the application, GDAL or other dependencies.

Reproduce from the repository root:

    node --import tsx scripts/generate-tutorial-samples.ts
    npx vitest run test/tutorial-samples.test.ts

Source ZIP timestamps are fixed and source archives are reproducible. Generated
Shapefile ZIP/DBF timestamps may change between runs, so their SHA-256 checksums
can differ even when inspected geometry and attributes are identical. Manifest
checksums validate the currently published files; they do not promise byte-identical
compressed outputs across runs or software versions.
Verification uses GeoConvert's actual Node adapter for the same gdal3.js WASM
core used in local conversion plus independent output parsing from the test suite.
QGIS, Google Earth and browser acceptance have not been tested by this script.
`manifest.json` contains full inspected geometry, fields, warnings, error codes,
byte sizes and SHA-256 checksums. Only the three positive baseline outputs above
are downloadable; the deliberately invalid no-CRS DXF result is not published.

| File | What to try | Expected observation |
| --- | --- | --- |
| synthetic-points.kmz | KMZ to Shapefile / KML | Two WGS 84 points: (12,45), (12.001,45.001), longitude first |
| synthetic-points-shapefile.zip | Download the measured Shapefile output | Two points; DBF Name/Descriptio fields only |
| extracted-main.kml | Download the measured extraction | Byte-identical synthetic root KML |
| web-mercator-reprojected.kml | Download the correctly projected output | Two points at longitude/latitude (0,0) and (1,1) |
| synthetic-points.kml | Inspect original root KML | Name, description, style and three ExtendedData values |
| root-doc-with-extra.kmz | KMZ to KML | Selects root doc.kml; extra.kml is ignored with a warning |
| ambiguous-two-kml.kmz | KMZ to KML | Deliberate negative example: BAD_KMZ because no root doc.kml disambiguates two KML documents |
| web-mercator-meters.dxf | DXF to KML with source EPSG:3857 | Model coordinates (0,0), (111319.49079327357,111325.1428663851) in meters become longitude/latitude (0,0), (1,1); Layer fields DEMO_1/DEMO_2 survive |

The KMZ to Shapefile sample preserves the two point coordinates and names.
Description becomes the DBF field `Descriptio`; `site_code`, `survey_year` and
`long_field_name` from KML ExtendedData are absent in this measured output.
The output ZIP contains `.shp`, `.shx`, `.dbf`, `.prj`.
KMZ to KML extracts byte-identical root KML in this sample, preserving its
ExtendedData and style markup. Referenced image resources are not bundled into a
standalone extracted KML.

The DXF includes `$INSUNITS=6` (meters), but that header is not a CRS declaration.
Its EPSG:3857 meaning is known only because we constructed it that way. Select
that source CRS explicitly. Do not use this choice for an unrelated local drawing
or a drawing in feet. This example supplies no evidence for arbitrary CAD entity,
unit-rescaling, unsupported CRS, styling or attribute-table compatibility.
Leaving the source CRS blank is a deliberate negative measurement: the engine
warns that it assumed EPSG:4326 and still returns a file whose second latitude
is outside [-90,90]. A completed conversion does not establish correct placement.
Confirm the known CRS and units before converting your own drawing.
