Pourquoi GRASS élimine-t-il les polygones lors de l'utilisation de v.generalize?

9

Je suis confronté à un dilemme en essayant d'utiliser v.generalize pour simplifier des polygones dont la taille et la structure sont similaires à celles des comtés ou des États américains. Souvent, je perds des polygones de l'ensemble de données après avoir exécuté une méthode de simplification ou de lissage sur eux. Ce qui me trouble, c'est qu'il ne semble pas y avoir de modèle cohérent à ce comportement. Dans certains cas, le même ensemble de commandes appliquées à différents ensembles de données provoque des résultats complètement différents. Par conséquent, je ne suis pas en mesure de développer un flux de travail reproductible et je commence à contrecœur à rechercher d'autres outils de simplification qui préservent la topologie. Voici un exemple:

# LOAD AND CLEAN
v.in.ogr dsn=counties.shp output=county
v.build.polylines input=county output=county_polylines
v.clean input=county_polylines output=county_clean tool=bpol,rmdupl type=boundary

# SMOOTH AND GENERALIZE
v.generalize input=county_clean output=county_smooth method=sliding_averaging look_ahead=7 slide=1
v.generalize input=county_smooth output=county_general method=douglas threshold=.005

Chacune des étapes v.generalize entraîne la disparition de certains des polygones. Je voudrais comprendre pourquoi cela se produit. Est-ce dû au chargement de fonctionnalités dans une mémoire insuffisante? Mes paramètres sont-ils suffisamment «serrés» pour entraîner l'exclusion des entités parce qu'elles répondent à une sorte de critère de géométrie? (Notez que je perds de très grandes fonctionnalités.) Y a-t-il un problème avec la topologie des fonctionnalités supprimées qui les efface? En ce qui concerne cette dernière question, je suppose que build.polylines et les opérations propres que je fais initialement devraient prendre soin de cela, mais je ne suis pas entièrement certain, et je n'arrive pas à trouver de bonnes instructions qui répondent à cela. Y a-t-il?

Appréciez toutes les informations que les gens peuvent donner, en particulier celles basées sur une expérience personnelle avec l'outil v.generalize.

Roger

lagerratrobe
la source
il semble que vos données puissent être en lat lon. ce qui serait suffisant pour perdre des données avec votre seuil de .005. pouvez-vous vérifier que vous utilisez un cs planaire?
Brad Nesom
En fait, je me posais des questions à ce sujet et j'avais reprojeté une projection Albers Equal Area avant d'exécuter ce qui précède. Voici les paramètres de projection: USER: 100002 (+ proj = aea + lat_1 = 20 + lat_2 = -23 + lat_0 = 0 + lon_0 = 25 + x_0 = 0 + y_0 = 0 + ellps = WGS84 + units = m + no_defs) . Vous avez toujours le même problème.
lagerratrobe
Je me demande pourquoi vous convertissez les polygones en polylignes. Y a-t-il une raison spécifique pour laquelle vous ne simplifiez pas simplement les polygones directement?
underdark
Ok, j'ai retiré la partie v.build.polylines, donc "county_clean" est maintenant une couche polygonale. Perdre encore un tas de domaines. J'avais pensé au départ que cela pourrait rendre la simplification plus facile, mais comme "bpol" dans v.clean brise également les polygones, cela n'a peut-être pas d'importance.
lagerratrobe
1
juste une question stupide. Êtes-vous sûr de perdre des données en utilisant v.generalize et non v.clean ?
simo

Réponses:

4

Réponse de l'équipe de développement GRASS.

"La disparition des polygones [dans la v 6.4.1] s'est produite parce que les frontières lissées qui violaient la topologie vectorielle ont été supprimées, après quoi toutes les frontières qui étaient topologiquement incorrectes. violer la topologie vectorielle. "

lagerratrobe
la source