2015-10-05 9 views
1

Я использую GeoTools для чтения геометрий из файла Shape, как в этом example. Я заметил, что координаты, используемые в исходном Shapefile, настраиваются на Java Double type. Следовательно, геометрия не совсем то же самое, что и в Shapefile. Я хотел бы увеличить точность для этих геометрий. Есть идеи?Измените точность геометрий, прочитанных из Shapefile, используя GeoTools

// EDITED. Например: У меня есть эта геометрия от Shapefile

многоугольника ((+4799826,09861662145704 2773995.445373429451138,4799743.315226384438574 2773981.06054604658857,4799740.81541012506932 2774021.374029533006251,4799823.087954664602876 2774033.434061083011329,4799826.09861662145704 2773995.445373429451138))

Я прочитал, что геометрия Shapefile с использованием GeoTools и печатным хорошо известное текстовое представление. Выход заключается в следующем:

ПОЛИГОН ((+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, загрузив свои функции из шейп, и называется .getDefaultGeometry() на них.

Вызов .getCoordinates() на ваших Геометрия объектов, а затем цикл по этим координатам и вызывая precisionModel.makePrecise() по каждому из них. Наконец, постройте новую геометрию с фиксированными точными координатами.

(у меня нет какой-либо образец кода для вашего, потому что я работаю в Clojure, а не Java.)

Неправильный ответ

Это, очевидно, раздражает и окольным путем. Разве не должно быть более простого способа? Я так и думал по документации, но это не сработало.

От PrecisionModel JavaDoc:

JTS входные подпрограммы автоматически круглые координаты к модели точности до создания геометрий

Для меня это означает, что я мог бы просто реконструировать геометрии с помощью геометрии завода и его будет сортировать это для меня.

К сожалению, на самом деле происходит то, что вы получаете геометрии, которые выглядят так, как будто они должны пересекаться, но не из-за крошечных ошибок с плавающей запятой в их координатах.