2015-10-05 2 views
1

J'utilise GeoTools pour lire les géométries à partir d'un fichier Shapefile comme dans ce example. J'ai remarqué que les coordonnées utilisées dans le Shapefile source sont ajustées à un type Java Double. Par conséquent, les géométries ne sont pas exactement les mêmes que dans le Shapefile. Je voudrais augmenter la précision pour ces géométries. Des idées?Modifier la précision des géométries lues à partir de Shapefile à l'aide de GeoTools

// EDITED. Par exemple: Je suis cette géométrie à partir d'un fichier de formes

POLYGON ((4799826,09861662145704 2773995.445373429451138,4799743.315226384438574 2773981.06054604658857,4799740.81541012506932 2774021.374029533006251,4799823.087954664602876 2774033.434061083011329,4799826.09861662145704 2773995,445373429451138))

j'ai lu que la géométrie de Shapefile utilisant GeoTools et imprimé la représentation de texte bien connue. La sortie est la suivante:

POLYGONE ((4.799.826,098616621 2.773.995,4453734295, 4.799.743,315226384 2.773.981,0605460466, 4799740,815410125 2774021,374029533, 4799823,087954665 2774033,434061083, 4799826,098616621 2773995,4453734295))

+0

pouvez-vous expliquer exactement quelle est la différence que vous voyez?Plus que la double précision est rarement nécessaire pour les caractéristiques géographiques, sauf si vous êtes en train de disputer des atomes depuis l'orbite. –

+0

J'ai mis à jour la question avec un exemple @iant. – Dimis

+1

En supposant que vos coordonnées sont en mètres, il n'y a pas besoin de s'inquiéter d'un nombre au-delà. 0,001 mm –

Répondre

0

Meilleure réponse

utilisation org.locationtech.jts.precision .GeometryPrecisionReducer. Il a une méthode .reduce(Geometry g, PrecisionModel precModel).

réponse Bad

En utilisant la version Geotools 18,0, après avoir chargé vos caractéristiques du Shapefile, et appelé .getDefaultGeometry() sur eux.

Appel .getCoordinates() sur votre géométrie objets, boucle puis sur les coordonnées et appelant precisionModel.makePrecise() sur chacun d'eux. Enfin, construisez une nouvelle géométrie avec les coordonnées précises précises.

(je n'ont pas de code d'exemple pour votre parce que je travaille dans Clojure plutôt que Java.)

Mauvaise réponse

Ceci est évidemment un moyen ennuyeux et rond-point. Ne devrait-il pas y avoir un moyen plus facile? Je pensais que c'était basé sur la documentation, mais ça n'a pas marché.

De PrecisionModel JavaDoc:

JTS routines d'entrée coordonnées tour automatiquement au modèle de précision avant de créer Géométries

Pour moi, cela signifie que je pouvais reconstruire les géométries en utilisant l'usine de géométrie et le régler pour moi. Malheureusement, ce qui se passe réellement, c'est que vous obtenez des géométries qui semblent s'entrecroiser, mais pas à cause de minuscules erreurs de virgule flottante dans leurs coordonnées.