Comment généraliser SpatialPolygons et conserver la topologie dans R?

18

Je voudrais généraliser un SpatialPolygonsDataFrame en R pour rendre le traçage plus efficace. Les polygones dont je dispose se traduisent par d'énormes tracés pdf qui sont lents à charger et difficiles à intégrer dans un document.

J'ai essayé d'utiliser la gSimplifyfonction du rgeospackage, mais malheureusement elle ne conserve pas la topologie des polygones.

Y a-t-il une alternative que je peux utiliser?

yellowcap
la source
pas vraiment une solution, mais pourriez-vous plutôt tracer sur raster (jpg / png)? Cette question de stackoverflow qui traite de la réduction de pdfsize peut être utile: stackoverflow.com/questions/8521299/…
djq
tracer les cartes en tant qu'image raster est une option, mais chaque fois que possible, je voudrais utiliser des graphiques vectoriels. La qualité d'image est meilleure lorsque vous utilisez des graphiques vectoriels, en particulier lorsque vous regardez la version numérique des documents.
yellowcap
gSimplify()a un paramètre facultatif topologyPreservequi est par défaut FALSE. Avez-vous essayé de régler cela TRUE?
krlmlr

Réponses:

7

Il y a une discussion à ce sujet sur r-sig-geo . Pour une réponse définitive, vous devriez vous y poser, car il y a des peuples qui connaissent les intuitions du R. spatial

Mais, vous pouvez également le faire dans les applications de bureau SIG (exporter la forme à l'aide de la commande writeOGR à partir de rgdal ou writePolyShape () à partir de maptools) comme QuantumGIS, GRASS ou SAGA.

Pour QuantumGIS, utilisez les outils vectoriels / géométriques / simplifiez les géométries (j'ai testé et ne préserve pas la topologie, mais appliqué au fichier de formes Roumanie admin1, il a l'air bien avec 2000 nœuds).

Pour GRASS, utilisez v.generalize (lisez le manuel pour plus d'informations sur les algorithmes, il y en a).

Pour SAGA, vous devez d'abord convertir le polygone en ligne (Formes - Lignes / Convertir les polygones en lignes), puis simplifier les lignes (Formes Lignes / Simplification des lignes), et enfin convertir les lignes en polygones (Formes - Polygones / Convertir les lignes en polygones). J'ai testé cela et les résultats ont préservé la topologie.

Bravo et bonne chance,

Niculita Mihai
la source
Entre-temps, j'ai également trouvé un service en ligne qui effectue la simplification tout en conservant les topologies: mapshaper.org . Je l'ai utilisé comme alternative, car il semble que ce ne soit pas possible directement dans R (QGis n'est pas vraiment la conservation de la topologie et je ne connais pas les autres logiciels)
yellowcap
1
J'ai testé votre observation avec Saga 2.0.8, et le résultat n'a pas conservé la topologie!
Fabian Zeindl
2

Il y a maintenant le merveilleux rmapshaperpackage d'Andy Teucher qui inclut une fonction de simplification qui "effectue une simplification multi-polygone tenant compte de la topologie".

De leur repo github, un exemple d'utilisation:

states_simp <- ms_simplify(states_sp)

states_spest un spatialPolygons*objet.

Voir le package README pour plus d'informations: https://github.com/ateucher/rmapshaper

Phil
la source
0

cela devrait aider:

  • gSimplify(..., topologyPreserve=T)du GEOSpaquet
petermeissner
la source
2
malheureusement, l'option de préservation de la topologie dans gSimplifyne conserve pas vraiment la topologie sur plusieurs polygones. Je pense que cela concerne davantage la topologie des polygones simples ou multiples. Pour un fichier de formes contenant de nombreux polygones, la topologie n'est pas conservée.
yellowcap