Geotools在将Geometry转换为GeoJSON时会对坐标进行四舍五入处理

5

有任何Geotools的开发者吗?我们发现了以下奇怪的GeometryJSON行为:

    Geometry geom = getGeometry();
    System.out.println(geom);

    GeometryJSON g = new GeometryJSON();
    StringWriter sw = new StringWriter();
    try {
        g.write(geom, sw);
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println(sw.toString());

结果:

POLYGON((1.1212121214354352354235235423521 2.1212121121,4.454545454545445 3.454544545454454,10.515545445454 20.1545454654664, 1.1212121214354352354235235423521 2.1212121121))

{"type":"Polygon","coordinates":[[[1.1212,2.1212],[4.4545,3.4545],[10.5155,20.1545],[1.1212,2.1212]]]}

多边形的坐标被四舍五入了,这是故意的吗?
1个回答

7

GeometryJSON有一个构造函数,你可以将小数位数传递给它。

public GeometryJSON(int decimals)

您正在使用的构造函数会将它实例化为4个小数位。请更改您的代码为:
您的代码
GeometryJSON g = new GeometryJSON(15);

谢谢您的回答,但为什么要这样实现呢?为什么write函数不默认输出最大可用精度?当以相反的方式进行转换时,从geoJSON字符串到几何体,它的行为相反(就像我期望的那样),一个Geometry geo = g2.read(geoJSONString); 输出一个包含所有小数位的几何体,而不需要在构造函数中指定精度点。 - chris
1
默认情况下,目标是生成较小的GeoJSON。 - Boj
也许对我来说还不太清楚,例如vividsolutions的WKTWriter/WKTReader默认精度为16位小数(完全双精度)。 - chris
16dp转换成角度是亚纳米级精度,我怀疑你的数据源并没有真正拥有这样的精度。 - Ian Turton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接