5

GeoTools を使用した最愛の座標変換に関して問題があります。Gauss-Kruger (ゾーン 5、EPSG 31469) の一連の座標を通常の WGS84 座標 (EPSG 4326) に変換したいと考えています。

簡単な例でコードを作成しました(試してみる座標のペアは1つだけです):

double coordX = 5408301.53; 
double coordY = 5659230.5;
double[] punt = new double[2];

CoordinateReferenceSystem sourceCRS = CRS.decode("EPSG:31469");
CoordinateReferenceSystem targetCRS = CRS.decode("EPSG:4326");

MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true);

DirectPosition expPt = new GeneralDirectPosition(coordX, coordY);
expPt = transform.transform(expPt, null);
punt = expPt.getCoordinate();

System.out.println(punt[0] + ", " + punt[1]); //lon, lat

デバッグ後の結果は次のとおりです: 48.791886921764345、17.16525096311777

次に、取得した WGS84 座標を確認すると (Google マップにヒットするだけです)、オーストリア近くのチェコ共和国のどこかに行き着きますが、この座標のペアはドイツの東のどこかにあるはずです (確かに、いくつかの html で確認しました)。デコーダ):

---> 結果は 51.0609167、13.6900142 になります。

この障害が発生する理由は想像できません。GeoTools は必要な CRS の両方を取得します (Java コンソールからの応答からの抜粋を添付しました)

誰もこれを説明できますか?助けていただければ幸いです。

多くの挨拶、セバスチャン


**sourceCRS:**
PROJCS["DHDN / 3-degree Gauss-Kruger zone 5",
    GEOGCS["DHDN", 
    DATUM["Deutsches Hauptdreiecksnetz", 
      SPHEROID["Bessel 1841", 6377397.155, 299.1528128, AUTHORITY["EPSG","7004"]], 
      TOWGS84[612.4, 77.0, 440.2, -0.054, 0.057, -2.797, 2.55], 
      AUTHORITY["EPSG","6314"]], 
    PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], 
    UNIT["degree", 0.017453292519943295], 
    AXIS["Geodetic latitude", NORTH], 
    AXIS["Geodetic longitude", EAST], 
    AUTHORITY["EPSG","4314"]], 
  PROJECTION["Transverse_Mercator", AUTHORITY["EPSG","9807"]], 
  PARAMETER["central_meridian", 15.0], 
  PARAMETER["latitude_of_origin", 0.0], 
  PARAMETER["scale_factor", 1.0], 
  PARAMETER["false_easting", 5500000.0], 
  PARAMETER["false_northing", 0.0], 
  UNIT["m", 1.0], 
  AXIS["Northing", NORTH], 
  AXIS["Easting", EAST], 
  AUTHORITY["EPSG","31469"]]

**targetCRS:**
GEOGCS["WGS 84", 
  DATUM["World Geodetic System 1984", 
    SPHEROID["WGS 84", 6378137.0, 298.257223563, AUTHORITY["EPSG","7030"]], 
    AUTHORITY["EPSG","6326"]], 
  PRIMEM["Greenwich", 0.0, AUTHORITY["EPSG","8901"]], 
  UNIT["degree", 0.017453292519943295], 
  AXIS["Geodetic latitude", NORTH], 
  AXIS["Geodetic longitude", EAST], 
  AUTHORITY["EPSG","4326"]]
CONCAT_MT[PARAM_MT["Affine", 
    PARAMETER["num_row", 3], 
    PARAMETER["num_col", 3], 
    PARAMETER["elt_0_0", 0.0], 
    PARAMETER["elt_0_1", 1.0], 
    PARAMETER["elt_1_0", 1.0], 
    PARAMETER["elt_1_1", 0.0]], 
  INVERSE_MT[PARAM_MT["Transverse_Mercator", 
      PARAMETER["semi_major", 6377397.155], 
      PARAMETER["semi_minor", 6356078.962818189], 
      PARAMETER["central_meridian", 15.0], 
      PARAMETER["latitude_of_origin", 0.0], 
      PARAMETER["scale_factor", 1.0], 
      PARAMETER["false_easting", 5500000.0], 
      PARAMETER["false_northing", 0.0]]], 
  PARAM_MT["Ellipsoid_To_Geocentric", 
    PARAMETER["dim", 2], 
    PARAMETER["semi_major", 6377397.155], 
    PARAMETER["semi_minor", 6356078.962818189]], 
  PARAM_MT["Position Vector transformation (geog2D domain)", 
    PARAMETER["dx", 612.4], 
    PARAMETER["dy", 77.0], 
    PARAMETER["dz", 440.2], 
    PARAMETER["ex", -0.054], 
    PARAMETER["ey", 0.057], 
    PARAMETER["ez", -2.797], 
    PARAMETER["ppm", 2.5500000000455714]], 
  PARAM_MT["Geocentric_To_Ellipsoid", 
    PARAMETER["dim", 2], 
    PARAMETER["semi_major", 6378137.0], 
    PARAMETER["semi_minor", 6356752.314245179]], 
  PARAM_MT["Affine", 
    PARAMETER["num_row", 3], 
    PARAMETER["num_col", 3], 
    PARAMETER["elt_0_0", 0.0], 
    PARAMETER["elt_0_1", 1.0], 
    PARAMETER["elt_1_0", 1.0], 
    PARAMETER["elt_1_1", 0.0]]]
4

1 に答える 1

2

コードと最新の Geotools (8.0) で問題を再現しようとすると、正しい結果 (13.690015717822922、51.06089012028224) が得られます。つまり、経度と緯度が入れ替わっています。

と を交換するcoordXcoordY、悪い結果 (17.16525096311777, 48.791886921764345) が発生します。これにより、ドレスデンではなくイエメンの砂漠に移動します。

軸の順序が間違っていると暗黙のうちに想定している可能性があります。おそらく、経度の前に緯度を置くことは、X を Y の前に置くというデカルト座標の一般的な取り決めになんらかの形で違反します。

問題を再現することはできませんが、軸の順序について説明しているこのチュートリアルの回避策の 1 つが役立つ場合があります。

于 2012-09-06T16:23:23.660 に答える