Le 4 septembre 2014 16:52, Frédéric Rodrigo <[email protected]> a
écrit :

> - 1150 Grosse optimisation de l'analyse "intersection entre surfaces" qui
> permet de gagner du temps sur les gros pays.
>
Ca c'est toujours un bogue récurrent dans JOSM dont l'algo préhustorique
consomme beaucoup de mémoire et de temps.

J'ai déjà commencé une modif en Java pour ça; en gros exit l'allocation du
gros tableau contenant une grille de dimension trop fine pour traiter les
grandes surfaces, le passe à l'analyse par tri des vecteurs sur un axe
vertical et parcours de la liste de haut en bas en gérant les croisement de
segments par échange... Comme ce qui est fait dans les moteurs de rendu 3D
OpenGL.

Plus quelques optimisation locales pour passer en un comportement en O(n
log n) où n est le nombre de "polylignes" contigues toutes orientées de
haut en bas (deux polylignes par exemple pour la plupart des polygones
simples, et tous les polygones sans concavité, quel que soit le nombre de
leurs noeuds: j'optimise aussi en ne traitant as nécessariement tous les
noeuds d'un polyligne, par une recherche dichotomique; ce qui réduit
l'impact en temps causé par l'augmentation de précision des tracés par de
plus nombreux noeuds intermédiaires).

Une autre optimisation que je testerai plus tard sera un pré-tri par
bounding-box pour traiter séparément les listes de polylignes qui n'ont
strictement aucune intersection (même sur un seul noeud), afin d'approcher
le comportement linaire en O(n) et non plus O(n log n); ce pré-tri peut
faire gagner du temps global, et sera utile pour ceux qui travaillent
notamment sur les imports de bâtiments (dont la plupart ne se touchent pas
en zone rurale ou rurbaine).

Conséquence: le validateur intégré dans JOSM devrait aller beaucoup plus
vite (notamment celui qui tourne juste au moment d'envoyer les données
avant que s'affiche le dialogue d'envoi) et ne plus consommer autant de CPU
et de mémoire.
_______________________________________________
Talk-fr mailing list
[email protected]
https://lists.openstreetmap.org/listinfo/talk-fr

Répondre à