|
Dernière réponse | |
---|---|
Sujet : pb d'algo(et un de plus) | |
tfj57 | J'espère avoir bien compris le problème.
Bon je me lance quand même. Tes coordonnées vont jusqu'à 15000 pixels, si on considère que la plus grande cordonnée correspond à 1000 km, on a environs une résolution de 67m / pixels. Si on divise tes coordonnées par 6 (ou plus si c'est possible), on tombe à une résolution de 400 m / pixels, ce qui est largement suffisant pour ce que l'on veut faire (vérifier qu'il n'y a pas 2 points plus proches que 400m). On va donc découper ta carte en zones de 6 X 6 pixels soit un tableau de 2500 X 2500 (15000/6). Normalement dans toutes les zones, il ne doit y avoir que 0 ou 1 point. Dans un premier temps, il faut faire un programme, qui prendra le temps qu'il faut, pour initialiser une fois pour toute un tableau de 2500 X 2500 entiers 16 bits non signés dans un fichier binaire (ici nommé ZONES) de 12.5 Mo comme suit : Il suffit de mettre dans les cases du tableau le numéro de la ville (1 à 30000) a qui appartient la zone 6 X 6 correspondante. Il sera possible d'y mettre 0 pour dire que la case n'appartient a personne, ou d'autres valeurs pour désigner que la case est dans une mer ou un pays étranger... Avec le numéro de la ville (lseek num ville X taille enreg), il suffira d'aller dans le fichier (ici nommé VILLES) qui contient les infos des villes (coordonnées exactes pour mettre le point en sur brillance, nom de la ville ...). Si Ce dernier n'a pas des enregistrements de taille fixe (texte par exemple), dans ton fichier 2500 X 2500 tu peux mettre des entiers 32 bits (la taille du fichier doublera simplement) qui correspondent à l'offset des infos de la ville dans ton fichier VILLES. L'utilisation de cela sera très simple, il suffira de diviser les coordonnées du point recherché par 6 (i=x/6 et j=y/6), avec lseek j*2500+i, il faudra récupérer dans le numéro de la ville : int (ou offset : long) dans le fichier ZONES et d'aller chercher les infos dans le fichier VILLES. Cela sera très rapide. Si tu as un système de zoom, il sera ridicule d'afficher les infos d'un petit bled lorsque toute la carte de France est affichée ! Pour cela il suffit de faire plusieurs fichiers ZONES qui seront utilisés selon le zoom courant : par exemple au lieu de diviser par 6, diviser par 100 et initialiser le tableau du fichier ZONES (45 ko) avec les villes de plus de 10000 ha si tu as cette info... Bon voila, bien que les explications soient un peu longues et confuses, ça sera très simple à mettre en oeuvre, rapide à l'exécution et ne demande qu'un minimum de mémoire. Le programme qui sert à initialiser le tableau dans le fichier ZONES n'est pas trop difficile à faire, il y a plusieurs algorithmes possibles... mais cela sera peut-être une autre histoire. A+ |
Vue Rapide de la discussion |
---|