2015-10-05 54 views
1

我使用GeoTools從Shapefile讀取幾何圖形,如此example。 我注意到源Shapefile中使用的座標被調整爲Java Double類型。因此幾何圖形與Shapefile中的幾何圖形不完全相同。我想提高這些幾何的精度。有任何想法嗎?使用GeoTools更改從Shapefile讀取的幾何圖形的精度

// EDITED。 例如:我有這樣的幾何形狀從一個Shape文件

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

我已閱讀使用GeoTools Shape文件的該幾何形狀,並打印衆所周知的文字表示。輸出如下:

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

+0

你能解釋一下你所看到的差別嗎?除非你在軌道上與原子糾纏在一起,否則雙精度幾乎不需要地理特徵。 –

+0

我使用示例@iant更新了問題。 – Dimis

+1

假設您的座標是以米爲單位的,則無需擔心任何超出的數字。 0.001毫米 –

回答

0

最好的答案

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

不好回答

使用Geotools版本18.0,已經從Shape文件加載你的功能,並在其上稱爲.getDefaultGeometry()。您幾何對象

呼叫.getCoordinates(),然後在這些座標循環,並呼籲每個人precisionModel.makePrecise()。最後,用固定的精確座標構建一個新的幾何圖形。

(我沒有任何的示例代碼爲您,因爲我用Clojure而不是Java的。工作)

錯誤答案

這顯然是一個惱人的和迂迴的方式。不應該有更簡單的方法嗎?我認爲這是基於文檔,但它沒有奏效。

PrecisionModel JavaDoc

JTS的輸入程序會自動圓座標精度 模型創建幾何體之前

對我來說,這意味着我可以用幾何工廠剛剛重建的幾何形狀和它會爲我整理。

不幸的是,實際發生的情況是,您得到的幾何看起來應該相交,但並不是因爲它們的座標中存在微小的浮點錯誤。

相關問題