koordinates / kart

Distributed version-control for geospatial and tabular data
https://kartproject.org
Other
515 stars 39 forks source link

Erroneous non-homogenous CRS when pointclouds are imported over multiple commits #973

Closed craigds closed 4 months ago

craigds commented 4 months ago

Describe the bug

Import tiles (with the same CRS as each other) in separate commits, and you get an error from Kart.

To Reproduce

cdestigter@overthere:~/kart-repos $ kart init test
Initialized empty Git repository in /Users/cdestigter/kart-repos/test/.kart/
Created an empty repository at /Users/cdestigter/kart-repos/test — import some data with `kart import`

cdestigter@overthere:~/kart-repos $ cd test

cdestigter@overthere:~/kart-repos/test (main) $ kart point-cloud-import --dataset x --cloud-optimized ../12TVM4407.laz
Checking tiles: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  9.60tile/s]
Importing tiles: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:27<00:00, 27.71s/tile]
Creating file-system working copy in test folder
Writing tiles for dataset 1 of 1: x
x: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 1375.63tile/s]

cdestigter@overthere:~/kart-repos/test (main) $ kart meta get x crs.wkt
x
    crs.wkt
        COMPD_CS["NAD83(2011) / UTM zone 12N + NAVD88 height",
            PROJCS["NAD83(2011) / UTM zone 12N",
                GEOGCS["NAD83(2011)",
                    DATUM["NAD83_National_Spatial_Reference_System_2011",
                        SPHEROID["GRS 1980", 6378137, 298.257222101,
                            AUTHORITY["EPSG", "7019"]],
                        AUTHORITY["EPSG", "1116"]],
                    PRIMEM["Greenwich", 0,
                        AUTHORITY["EPSG", "8901"]],
                    UNIT["degree", 0.0174532925199433,
                        AUTHORITY["EPSG", "9122"]],
                    AUTHORITY["EPSG", "6318"]],
                PROJECTION["Transverse_Mercator"],
                PARAMETER["latitude_of_origin", 0],
                PARAMETER["central_meridian", -111],
                PARAMETER["scale_factor", 0.9996],
                PARAMETER["false_easting", 500000],
                PARAMETER["false_northing", 0],
                UNIT["meter", 1,
                    AUTHORITY["EPSG", "9001"]],
                AXIS["X", EAST],
                AXIS["Y", NORTH],
                AUTHORITY["EPSG", "6341"]],
            VERT_CS["NAVD88 height",
                VERT_DATUM["North American Vertical Datum 1988", 2005,
                    AUTHORITY["EPSG", "5103"]],
                UNIT["meter", 1,
                    AUTHORITY["EPSG", "9001"]],
                AXIS["Up", UP],
                AUTHORITY["EPSG", "5703"]]]

cdestigter@overthere:~/kart-repos/test (main) $ kart point-cloud-import --dataset x --cloud-optimized --update-existing ../12TVM4324.laz
Checking tiles: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00,  9.61tile/s]
Kart constrains certain aspects of point-cloud datasets to be homogenous.
The imported files would have more than one CRS:
COMPD_CS["NAD83(2011) / UTM zone 12N + NAVD88 height",
    PROJCS["NAD83(2011) / UTM zone 12N",
        GEOGCS["NAD83(2011)",
            DATUM["NAD83 (National Spatial Reference System 2011)",
                SPHEROID["GRS 1980", 6378137, 298.257222101,
                    AUTHORITY["EPSG", "7019"]],
                AUTHORITY["EPSG", "1116"]],
            PRIMEM["Greenwich", 0,
                AUTHORITY["EPSG", "8901"]],
            UNIT["degree", 0.0174532925199433,
                AUTHORITY["EPSG", "9122"]],
            AUTHORITY["EPSG", "6318"]],
        PROJECTION["Transverse_Mercator"],
        PARAMETER["latitude_of_origin", 0],
        PARAMETER["central_meridian", -111],
        PARAMETER["scale_factor", 0.9996],
        PARAMETER["false_easting", 500000],
        PARAMETER["false_northing", 0],
        UNIT["meter", 1,
            AUTHORITY["EPSG", "9001"]],
        AXIS["X", EAST],
        AXIS["Y", NORTH],
        AUTHORITY["EPSG", "6341"]],
    VERT_CS["NAVD88 height",
        VERT_DATUM["North American Vertical Datum 1988", 2005,
            AUTHORITY["EPSG", "5103"]],
        UNIT["meter", 1,
            AUTHORITY["EPSG", "9001"]],
        AXIS["Up", UP],
        AUTHORITY["EPSG", "5703"]]]
 vs
COMPD_CS["NAD83(2011) / UTM zone 12N + NAVD88 height",
    PROJCS["NAD83(2011) / UTM zone 12N",
        GEOGCS["NAD83(2011)",
            DATUM["NAD83_National_Spatial_Reference_System_2011",
                SPHEROID["GRS 1980", 6378137, 298.257222101,
                    AUTHORITY["EPSG", "7019"]],
                AUTHORITY["EPSG", "1116"]],
            PRIMEM["Greenwich", 0,
                AUTHORITY["EPSG", "8901"]],
            UNIT["degree", 0.0174532925199433,
                AUTHORITY["EPSG", "9122"]],
            AUTHORITY["EPSG", "6318"]],
        PROJECTION["Transverse_Mercator"],
        PARAMETER["latitude_of_origin", 0],
        PARAMETER["central_meridian", -111],
        PARAMETER["scale_factor", 0.9996],
        PARAMETER["false_easting", 500000],
        PARAMETER["false_northing", 0],
        UNIT["meter", 1,
            AUTHORITY["EPSG", "9001"]],
        AXIS["X", EAST],
        AXIS["Y", NORTH],
        AUTHORITY["EPSG", "6341"]],
    VERT_CS["NAVD88 height",
        VERT_DATUM["North American Vertical Datum 1988", 2005,
            AUTHORITY["EPSG", "5103"]],
        UNIT["meter", 1,
            AUTHORITY["EPSG", "9001"]],
        AXIS["Up", UP],
        AUTHORITY["EPSG", "5703"]]]

Error: Non-homogenous dataset supplied

Note that these files have identical CRS WKT as reported by PDAL (I checked the hashes):

$ pdal info --summary ../12TVM4324.laz | jq .summary.metadata.srs.wkt
"PROJCS[\"NAD83(2011) / UTM zone 12N\",GEOGCS[\"NAD83(2011)\",DATUM[\"NAD83_National_Spatial_Reference_System_2011\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1116\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6318\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"meter\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"6341\"]]"

$ pdal info --summary ../12TVM4407.laz| jq .summary.metadata.srs.wkt
"PROJCS[\"NAD83(2011) / UTM zone 12N\",GEOGCS[\"NAD83(2011)\",DATUM[\"NAD83_National_Spatial_Reference_System_2011\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1116\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6318\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"meter\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"6341\"]]"

$ pdal info --summary ../12TVM4407.laz| jq .summary.metadata.srs.compoundwkt
"COMPD_CS[\"NAD83(2011) / UTM zone 12N + NAVD88 height\",PROJCS[\"NAD83(2011) / UTM zone 12N\",GEOGCS[\"NAD83(2011)\",DATUM[\"NAD83 (National Spatial Reference System 2011)\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1116\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6318\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"meter\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"6341\"]],VERT_CS[\"NAVD88 height\",VERT_DATUM[\"North American Vertical Datum 1988\",2005,AUTHORITY[\"EPSG\",\"5103\"]],UNIT[\"meter\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Up\",UP],AUTHORITY[\"EPSG\",\"5703\"]]]"

$ pdal info --summary ../12TVM4324.laz | jq .summary.metadata.srs.compoundwkt
"COMPD_CS[\"NAD83(2011) / UTM zone 12N + NAVD88 height\",PROJCS[\"NAD83(2011) / UTM zone 12N\",GEOGCS[\"NAD83(2011)\",DATUM[\"NAD83 (National Spatial Reference System 2011)\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],AUTHORITY[\"EPSG\",\"1116\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"6318\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",-111],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",0],UNIT[\"meter\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],AUTHORITY[\"EPSG\",\"6341\"]],VERT_CS[\"NAVD88 height\",VERT_DATUM[\"North American Vertical Datum 1988\",2005,AUTHORITY[\"EPSG\",\"5103\"]],UNIT[\"meter\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"Up\",UP],AUTHORITY[\"EPSG\",\"5703\"]]]"