我使用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
))
答案 0 :(得分:1)
最佳答案
使用 org.locationtech.jts.precision.GeometryPrecisionReducer 。它有一个.reduce(Geometry g, PrecisionModel precModel)
方法。
答案错误
使用Geotools 18.0版,从Shapefile加载了您的功能,并在其上调用了.getDefaultGeometry()
。
在 Geometry 对象上调用.getCoordinates()
,然后遍历这些坐标并在每个坐标上调用precisionModel.makePrecise()
。最后,构造一个具有固定精确坐标的新几何体。
(我没有任何示例代码,因为我在Clojure而不是Java工作。)
错误回答
这显然是一种恼人而迂回的方式。难道不是更简单的方法吗?我根据文档这么认为,但它没有用。
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