2012-04-23 72 views
5

Tôi đang gặp vấn đề liên quan đến phép biến đổi tọa độ được yêu thích với sự trợ giúp của GeoTools: Tôi muốn chuyển đổi tập hợp tọa độ từ Gauss-Kruger (vùng 5, EPSG 31469) vào các tọa độ WGS84 thông thường (EPSG 4326).Biến đổi tọa độ không chính xác Gauss-Kruger - WGS84 sử dụng GeoTools

Tôi đã xây dựng một mã số với một ví dụ đơn giản (chỉ cần một cặp tọa độ để thử):

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 

Kết quả sau khi gỡ lỗi như sau: 48,791886921764345, 17,16525096311777

Khi tôi sau đó kiểm tra WGS84 của tôi thu được (chỉ cần nhấn chúng vào Google Maps) Tôi kết thúc một nơi nào đó ở Cộng hòa Séc gần Áo mặc dù cặp tọa độ này phải ở đâu đó ở phía đông nước Đức (chắc chắn, tôi đã kiểm tra nó bằng một số bộ giải mã html):

---> phải là kết quả: 51.0609167, 13.6900142.

Tôi không thể tưởng tượng bất kỳ lý do nào xảy ra lỗi này. GeoTools nhận cả CRS mong muốn (tôi đính kèm một trích xuất từ ​​phản hồi trong bảng điều khiển java)

Có ai có thể giải thích điều này không? Tôi đánh giá cao sự giúp đỡ nào!

Nhiều Greets, Sebastian


**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]]] 

Trả lời

2

tôi nhận được kết quả chính xác (13,690015717822922, 51,06089012028224) khi tôi cố gắng tạo lại vấn đề với mã của bạn và GeoTools mới nhất (8.0). Với lon, lat đổi chỗ, đó là.

Kết quả xấu (17,16525096311777, 48,791886921764345) đến khi tôi swap coordXcoordY. Điều này đặt bạn vào sa mạc Yemen thay vì Dresden.

Có thể bạn ngầm giả định sai trật tự trục. Có thể cho rằng, đặt vĩ độ trước kinh độ bằng cách nào đó vi phạm thỏa thuận chung cho tọa độ Descartes để đặt X trước Y.

Trong khi tôi không thể tái tạo vấn đề của bạn, một trong các cách giải quyết có thể giúp bạn.

+0

Điều này làm tôi phát điên lên ở đây. Strange đủ 'CRS.decode (" EPSG: 4326 ")' sử dụng bằng cách nào đó một định hướng trục khác với 'DefaultGeographicCRS.WGS84' có thể là một lỗi? – Karussell

+0

Ồ, không liên quan gì đến Geotools: "Vì vậy, nếu bạn thấy một số dữ liệu trong" EPSG: 4326 ", bạn không biết nó có nằm trong thứ tự x/y hay theo thứ tự y/x hay không." Xem phần "thứ tự trục" tại đây http://docs.geotools.org/latest/userguide/tutorial/geometry/geometrycrs.html – Karussell