使用com.jhlabs.map.proj将UTM SUMO模拟器坐标转换为WGS84 lat/long



我尝试用java制作一个程序,将x,y坐标UTM转换为WGS84格式的纬度和经度。我通过SUMO模拟器生成的xml模拟文件到达UTM坐标,其中netconvert函数传递openstreetMap文件.osm。模拟器输出的转换为我提供了以下参数:location netOffset="-496616.58,-4916305.46"convBoundary="0.00,0.00392.25326.77"origBoundary="8.957512,44.400028,8.962437,44.402970"proj参数="+proj=utm+区域=32+ellps=WGS84+datum=WGS84+单位=m+no_defs"/>

我正在使用一个库com.jhlabs.map.proj,它是proj4.dll的java实现,我发现它是模拟器使用的库c++。所以我想用这个java库做一个从evry x/y坐标到long/lat的普通逆转换。(我刚刚字符串也jcoord库,但没有好的结果)。使用proj参数我做:

String[] proj4_w = new String[]{"+proj=utm",
              "+zone=32",
              "+ellps=WGS84",
             "+datum=WGS84",
            "+units=m",
            "+no_defs",
            "+to",
            "+proj=latlong",
            "+ellps=WGS84",
            "+datum=WGS84",
            "+no_defs"
            };
        Projection proj = ProjectionFactory.fromPROJ4Specification(proj4_w);
        Point2D.Double testUtm = new Point2D.Double(utmX(), utmY());
        Point2D.Double testProjec = proj.transform(testUtm, new Point2D.Double());
        System.out.println("latitudine: " + testProjec.x + " longitudine: " + stProjec.y);

我从结果中得到的纬度和经度值不是正确的值。我是这类问题的新手,很少有人指责我。感谢您的每一个答案和每一个解决方案,也有不同的方式或库。

com.jhlabs.map.proj不支持此功能,如果您愿意,可以使用此fork:https://github.com/bdferris/onebusaway-jmapprojlib(存储库:http://nexus.onebusaway.org/content/groups/public/)

Uage示例:https://github.com/OneBusAway/onebusaway-uk/blob/master/onebusaway-uk-atco-cif-parser/src/main/java/org/onebusaway/uk/atco_cif/AtcoCifParser.java#L285-L286

最新更新