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

