Hello,

I noticed a surprising behavior, I do not know whether this is a bug, or
whether it's expected: I found that when the order of the AXIS attributes
is changed, the conversion returns different results

I have the unit test below performing a sample conversion, and getting the
right result
(longitude=-99.20531579390813
latitude=29.225237498621965)

      private DefaultGeographicBoundingBox
getExtentFromAreaOfUse(CoordinateReferenceSystem fromCrs,
CoordinateReferenceSystem toCrs,
            double minX, double minY, double maxX, double maxY) throws
Exception {
        CoordinateOperation operation = CRS.findOperation(fromCrs, toCrs,
null);
        MathTransform mt = operation.getMathTransform();
        DirectPosition topLeftPosition = new DirectPosition2D(maxY, minX);
        DirectPosition topRightPosition = new DirectPosition2D(maxY, maxX);
        DirectPosition bottomRightPosition = new DirectPosition2D(minY,
maxX);
        DirectPosition bottomLeftPosition = new DirectPosition2D(minY,
minX);
        DirectPosition topLeftLatLongPosition =
mt.transform(topLeftPosition, topLeftPosition);
        DirectPosition topRightLatLongPosition =
mt.transform(topRightPosition, topRightPosition);
        DirectPosition bottomLeftLatLongPosition =
mt.transform(bottomLeftPosition, bottomLeftPosition);
        DirectPosition bottomRightLatLongPosition =
mt.transform(bottomRightPosition, bottomRightPosition);
        double westBoundLongitude =
Math.min(topLeftLatLongPosition.getCoordinate()[1],
bottomLeftLatLongPosition.getCoordinate()[1]);
        double eastBoundLongitude =
Math.max(topLeftLatLongPosition.getCoordinate()[1],
bottomLeftLatLongPosition.getCoordinate()[1]);
        double southBoundLatitude =
Math.min(topRightLatLongPosition.getCoordinate()[0],
bottomRightLatLongPosition.getCoordinate()[0]);
        double northBoundLatitude =
Math.max(topRightLatLongPosition.getCoordinate()[0],
bottomRightLatLongPosition.getCoordinate()[0]);
        return new DefaultGeographicBoundingBox(westBoundLongitude,
eastBoundLongitude, southBoundLatitude, northBoundLatitude);
    }

    @Test
    public void testWKTGitHub() throws FactoryException, Exception {
        String wkt = "PROJCS[\"NAD27 / Texas South Central\","
                + "GEOGCS[\"NAD27\","
                + "DATUM[\"North American Datum 1927\","
                + "SPHEROID[\"Clarke 1866\", 6378206.4, 294.97869821]],"
                + "UNIT[\"degree\", 0.0174532925199433],"
                + "AXIS[\"Lat\", NORTH],"
                + "AXIS[\"Long\", EAST]],"
                + "PROJECTION[\"Lambert_Conformal_Conic_2SP\"],"
                + "PARAMETER[\"latitude_of_origin\", 27.833333333333332],"
                + "PARAMETER[\"central_meridian\", -99.0],"
                + "PARAMETER[\"standard_parallel_1\", 28.383333333333333],"
                + "PARAMETER[\"standard_parallel_2\", 30.28333333333333],"
                + "PARAMETER[\"false_easting\", 2000000.0],"
                + "PARAMETER[\"false_northing\", 0.0],"
                + "UNIT[\"US survey foot\", 0.30480060960121924],"
                + "AXIS[\"X\", EAST],"
                + "AXIS[\"Y\", NORTH]]";
        CoordinateReferenceSystem fromCrs = CRS.fromWKT(wkt);
        CoordinateReferenceSystem toCrs = CRS.forCode("EPSG:4326");
        double x = 1934615.424;
        double y = 506052.281;
        CoordinateOperation operation = CRS.findOperation(fromCrs, toCrs,
getExtentFromAreaOfUse(fromCrs, toCrs, x, y, x, y));
        DirectPosition position = new DirectPosition2D(x, y);
        double[] coordinate =
operation.getMathTransform().transform(position, position).getCoordinate();
        System.out.println("longitude=" + coordinate[1]);
        System.out.println("latitude=" + coordinate[0]);
    }

If I change the WKT from

                  + "AXIS[\"X\", EAST],"
                + "AXIS[\"Y\", NORTH]]";

to

                 + "AXIS[\"Y\",NORTH],"
                + "AXIS[\"X\",EAST]]";

I get a different, incorrect result:
(longitude=-103.86819946668828
latitude=33.06508313602342)

Is this an expected behavior (the WKT string does not meet the specs?), or
is it a defect ?

-Thierry

Reply via email to