使用GeoTools更改从Shapefile读取的几何精度

时间:2015-10-05 14:42:53

标签: java precision shapefile geotools

我使用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
))

2 个答案:

答案 0 :(得分: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输入例程自动将坐标舍入为精度   创建几何图形之前的模型

对我而言,这意味着我可以使用几何工厂重建几何图形,它会为我排序。

不幸的是,实际发生的是你得到的几何形状看起来应该相交,但不要因为它们的坐标中出现微小的浮点误差。

答案 1 :(得分:0)

我有同样的问题。就我而言,要通过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