【问题标题】:Change the precision of geometries read from Shapefile using GeoTools使用 GeoTools 更改从 Shapefile 读取的几何图形的精度
【发布时间】:2015-10-05 14:42:52
【问题描述】:

我使用 GeoTools 从 Shapefile 中读取几何图形,如 example 中所示。 我注意到源 Shapefile 中使用的坐标已调整为 Java Double 类型。因此,几何图形与 Shapefile 中的几何图形并不完全相同。我想提高这些几何形状的精度。有什么想法吗?

例如:我有来自 Shapefile 的几何图形:

POLYGON ((
  4799826.09861662145704 2773995.445373429451138,
  4799743.315226384438574 2773981.06054604658857,
  4799740.81541012506932 2774021.374029533006251,
  4799823.087954664602876 2774033.434061083011329,
  4799826.09861662145704 2773995.445373429451138
))

我已经使用 GeoTools 阅读了 Shapefile 的几何图形,并打印了众所周知的文本表示。输出如下:

POLYGON ((
  4799826.098616621 2773995.4453734295, 
  4799743.315226384 2773981.0605460466, 
  4799740.815410125 2774021.374029533, 
  4799823.087954665 2774033.434061083, 
  4799826.098616621 2773995.4453734295
))

【问题讨论】:

  • 你能解释一下你看到的不同之处吗?地理特征很少需要超过双精度,除非您要从轨道上解决原子问题。
  • 我用@iant 的例子更新了这个问题。
  • 假设您的坐标以米为单位,则无需担心超出的任何数字。 0.001 毫米

标签: java precision shapefile geotools


【解决方案1】:

最佳答案

使用org.locationtech.jts.precision.GeometryPrecisionReducer。它有reduce(Geometry g, PrecisionModel precModel) 方法。

错误答案

使用 Geotools 18.0 版,从 Shapefile 加载您的特征,并在它们上调用 getDefaultGeometry()

在您的 Geometry 对象上调用 getCoordinates(),然后遍历这些坐标并在每个对象上调用 precisionModel.makePrecise()。最后,用固定的精确坐标构造一个新的几何体。

(我没有任何示例代码供您参考,因为我使用的是 Clojure 而不是 Java。)

错误答案

这显然是一种烦人的迂回方式。不应该有更简单的方法吗?根据文档,我是这么认为的,但它不起作用。

来自PrecisionModel JavaDoc

JTS 输入例程自动将坐标四舍五入到精度 创建几何之前的模型

对我来说,这意味着我可以使用几何工厂重建几何,它会为我整理出来。

不幸的是,实际发生的情况是,您得到的几何图形看起来应该相交,但不是因为它们的坐标中有微小的浮点错误。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。就我而言,要通过 geotools 从 shapefile 获取正确数据,我需要手动设置 CoordinateReferenceSystem。像这样的:

    FeatureCollection<SimpleFeatureType, SimpleFeature> inputFeatureCollection = 
        new ReprojectingFeatureCollection(source.getFeatures(), CRS.decode("EPSG:4326"));
    

    http://docs.geotools.org/stable/userguide/library/referencing/crs.html https://gis.stackexchange.com/questions/255930/reproject-features-with-geotools

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 2021-05-22
      • 2014-05-29
      相关资源
      最近更新 更多