Ticket Change Details
Not logged in
Overview

Artifact ID: f6eea128667b1b3fcaf636e3b0c3c758765fdc64
Ticket: 3041a242d3d949fdd2e767b68e0a6cf12387093a
axis order is not respected when using transform
User & Date: anonymous 2020-08-19 09:38:58
Changes

  1. foundin changed to: "5.0.0-RC1"
  2. icomment:
    Spatialite 5.0.0-RC1 does not seem to respect axis order although it is supposed to be using PROJ 6 (or later), see details below.
    
    To get the WKT of the coordinate reference systems:
    
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OSGeo4W>chcp 65001
    Active code page: 65001
    
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OSGeo4W>projinfo -o WKT2:2019 --single-line EPSG:25832
    WKT2:2019 string:
    PROJCRS["ETRS89 / UTM zone 32N",BASEGEOGCRS["ETRS89",DATUM["European Terrestrial Reference System 1989",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4258]],CONVERSION["UTM zone 32N",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",9,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["unknown"],AREA["Europe - 6°E to 12°E and ETRS89 by country"],BBOX[38.76,6,83.92,12]],ID["EPSG",25832]]
    
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OSGeo4W>projinfo -o WKT2:2019 --single-line EPSG:3044
    WKT2:2019 string:
    PROJCRS["ETRS89 / UTM zone 32N (N-E)",BASEGEOGCRS["ETRS89",DATUM["European Terrestrial Reference System 1989",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4258]],CONVERSION["UTM zone 32N",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",9,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["northing (N)",north,ORDER[1],LENGTHUNIT["metre",1]],AXIS["easting (E)",east,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["unknown"],AREA["Europe - 6°E to 12°E and ETRS89 by country"],BBOX[38.76,6,83.92,12]],ID["EPSG",3044]]
    
    To get the transformation pipeline:
    
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OSGeo4W>projinfo -o PROJ -s EPSG:25832 -t EPSG:3044
    Candidate operations found: 1
    -------------------------------------
    Operation No. 1:
    
    unknown id, Inverse of UTM zone 32N + UTM zone 32N, 0 m, World
    
    PROJ string:
    +proj=axisswap +order=2,1
    
    
    SQL statements in file transform.sql:
    
    select
    AsEWKT(PointFromText('POINT(722125 6178892)', 25832)) as geometry_25832,
    AsEWKT(Transform(PointFromText('POINT(722125 6178892)', 25832), 3044)) as geometry_3044_only_newSRID,
    AsEWKT(Transform(PointFromText('POINT(722125 6178892)', 25832), 3044, null, 'EPSG:25832', 'EPSG:3044')) as geometry_3044_EPSG_codes,
    AsEWKT(Transform(PointFromText('POINT(722125 6178892)', 25832), 3044, null, 'urn:ogc:def:crs:EPSG::25832', 'urn:ogc:def:crs:EPSG::3044')) as geometry_3044_EPSG_URNs,
    AsEWKT(Transform(PointFromText('POINT(722125 6178892)', 25832), 3044, null, 'PROJCRS["ETRS89 / UTM zone 32N",BASEGEOGCRS["ETRS89",DATUM["European Terrestrial Reference System 1989",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4258]],CONVERSION["UTM zone 32N",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",9,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["unknown"],AREA["Europe - 6°E to 12°E and ETRS89 by country"],BBOX[38.76,6,83.92,12]],ID["EPSG",25832]]', 'PROJCRS["ETRS89 / UTM zone 32N (N-E)",BASEGEOGCRS["ETRS89",DATUM["European Terrestrial Reference System 1989",ELLIPSOID["GRS 1980",6378137,298.257222101,LENGTHUNIT["metre",1]]],PRIMEM["Greenwich",0,ANGLEUNIT["degree",0.0174532925199433]],ID["EPSG",4258]],CONVERSION["UTM zone 32N",METHOD["Transverse Mercator",ID["EPSG",9807]],PARAMETER["Latitude of natural origin",0,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8801]],PARAMETER["Longitude of natural origin",9,ANGLEUNIT["degree",0.0174532925199433],ID["EPSG",8802]],PARAMETER["Scale factor at natural origin",0.9996,SCALEUNIT["unity",1],ID["EPSG",8805]],PARAMETER["False easting",500000,LENGTHUNIT["metre",1],ID["EPSG",8806]],PARAMETER["False northing",0,LENGTHUNIT["metre",1],ID["EPSG",8807]]],CS[Cartesian,2],AXIS["northing (N)",north,ORDER[1],LENGTHUNIT["metre",1]],AXIS["easting (E)",east,ORDER[2],LENGTHUNIT["metre",1]],USAGE[SCOPE["unknown"],AREA["Europe - 6°E to 12°E and ETRS89 by country"],BBOX[38.76,6,83.92,12]],ID["EPSG",3044]]')) as geometry_3044_wkt2_2019,
    AsEWKT(Transform(PointFromText('POINT(722125 6178892)', 25832), 3044, null, '+proj=axisswap +order=2,1', null)) as geometry_3044_Transformation_pipeline;
    
    spatialite output:
    
    C:\OtherPrograms\spatialite-cli-NG-RC1-win-amd64>spatialite
    SpatiaLite version ..: 5.0.0-RC1        Supported Extensions:
            - 'VirtualShape'        [direct Shapefile access]
            - 'VirtualDbf'          [direct DBF access]
            - 'VirtualXL'           [direct XLS access]
            - 'VirtualText'         [direct CSV/TXT access]
            - 'VirtualNetwork'      [Dijkstra shortest path]
            - 'RTree'               [Spatial Index - R*Tree]
            - 'MbrCache'            [Spatial Index - MBR cache]
            - 'VirtualSpatialIndex' [R*Tree metahandler]
            - 'VirtualElementary'   [ElemGeoms metahandler]
            - 'VirtualKNN'  [K-Nearest Neighbors metahandler]
            - 'VirtualXPath'        [XML Path Language - XPath]
            - 'VirtualFDO'          [FDO-OGR interoperability]
            - 'VirtualGPKG' [OGC GeoPackage interoperability]
            - 'VirtualBBox'         [BoundingBox tables]
            - 'SpatiaLite'          [Spatial SQL - OGC]
    PROJ version ........: Rel. 7.1.0, August 1st, 2020
    GEOS version ........: 3.8.1-CAPI-1.13.3
    RTTOPO version ......: 1.1.0
    TARGET CPU ..........: x86_64-w64-mingw32
    the SPATIAL_REF_SYS table already contains some row(s)
    SQLite version ......: 3.32.3
    Enter ".help" for instructions
    SQLite version 3.32.3 2020-06-18 14:00:33
    Enter ".help" for instructions
    Enter SQL statements terminated with a ";"
    spatialite> .headers ON
    spatialite> .mode line
    spatialite> .read transform.sql "UTF-8"
                           geometry_25832 = SRID=25832;POINT(722125 6178891.999999999)
               geometry_3044_only_newSRID = SRID=3044;POINT(722125 6178891.999999999)
                 geometry_3044_EPSG_codes = SRID=3044;POINT(722125 6178891.999999999)
                  geometry_3044_EPSG_URNs = SRID=3044;POINT(722125 6178891.999999999)
                  geometry_3044_wkt2_2019 = SRID=3044;POINT(722125 6178891.999999999)
    geometry_3044_Transformation_pipeline = SRID=3044;POINT(6178891.999999999 722125)
    
    Only when using the transformation pipeline, the correct result is obtained.
    
    
    When using PROJ directly to transform the coordinates, I get the following output, as expected:
    
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OSGeo4W>echo 722125 6178892 | cs2cs EPSG:25832 EPSG:3044
    6178892.00      722125.00 0.00
    
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OSGeo4W>echo 722125 6178892 | cs2cs urn:ogc:def:crs:EPSG::25832 urn:ogc:def:crs:EPSG::3044
    6178892.00      722125.00 0.00
    
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\OSGeo4W>echo 722125 6178892 0 0 | cct +proj=axisswap +order=2,1
     6178892.0000    722125.0000        0.0000        0.0000
    
  3. login: "anonymous"
  4. mimetype: "text/x-fossil-plain"
  5. private_contact changed to: "ff9a25a4a716f96c231bba592c4efaa53979591c"
  6. severity changed to: "Severe"
  7. status changed to: "Open"
  8. title changed to: "axis order is not respected when using transform"
  9. type changed to: "Code_Defect"