{"word_count": 601, "character_count": 10469}
La carte ci-dessus, réalisée en flash dynamique avec actionscript, représente l'évolution de la population mondiale de 1950 à 2015 (projection). A chaque date, par l'intermediaire d'une requete à une base de donnée mysql, la population de chaque pays est représentée par un cercle proportionnel. En même temps que la population, la taille des cercles varie au cours du temps. Pour rendre fluide l'animation, une interpolation géométrique est réalisée automatiquement entre chaque année. Au final, on observe que seuls quelques pays concentrés en europe de l'Est ont une population décroissante sur l'ensemble de la periode.Je mets à disposition les code source ci-dessous. Le code ne prend pas du tout en compte le dessin du fond de carte et le graphisme. Il sert uniquement à gérer l'interpolation entre des cercles en fonction des valeurs contenues dans la base de donnée. Il y a quelques éléments écrits en dur, cette solution n'est donc pas générique. Si vous avez des questions, n'hésitez pas à laisser un commentaire.1) worldmap.flaCi dessous, le code source action script à inserer dans votre fichier flash dès la premièere image.// DESSIN D'UN CERCLEMovieClip.prototype.dessineCercle = function(rayon, x, y) {// L'angle fait par chacun des huit segments est de 45 degrés (360 divisé par huit),// ce qui est égal à PI/4 radians.var deltaAngle = Math.PI / 4;// Recherche la distance du centre du cercle aux points de contrôle des courbes.var ctrlDist = rayon/Math.cos(deltaAngle/2);// Initialise l’angle à 0 et définit les variables locales utilisées// pour les points de contrôle et de terminaison.var angle = 0;var rx, ry, ax, ay;// Se déplace au point de départ, de un rayon à la droite du centre du cercle.this.moveTo(x + rayon, y);// Répète l’opération huit fois pour créer huit segments.for (var i = 0; i &#60; 8; i++) {// Incrémente l’angle de deltaAngle (PI/4) pour créer tout le cercle (2PI).angle += deltaAngle;// Les points de contrôle sont dérivés en utilisant les fonctions sinus et cosinus.rx = x + Math.cos(angle-(deltaAngle/2))*(ctrlDist);ry = y + Math.sin(angle-(deltaAngle/2))*(ctrlDist);// Les points d’ancrage (points terminaux de la courbe) peuvent être// déterminés de manière similaire aux points de contrôle.ax = x + Math.cos(angle)*rayon;ay = y + Math.sin(angle)*rayon;// Dessine le segment.this.curveTo(rx, ry, ax, ay);}}// ------------ DECLARATION DES VARIABLES ------------var anneeDebut = 1950;var anneeFin = 2050;var nbAnnee = anneeFin-anneeDebut+1;var fichierData=new LoadVars();var listeData=new Array;var listeResultat=new Array;var coef=0.003;var nbImage = 2; //Nombre d'images par changementvar vitesseTimer = 0.1;// --------// ------------ RECUPERATION DES DONNÉES ------------fichierData.load("req_pop.php");// ------------ DEBUT DU ONLOAD -----------------fichierData.onLoad=function(){if(true){//on parse l'information_root.listeData=fichierData.resultat.split("||");_root.listeData.pop();for(i=0;i&#60;_root.listeData.length;i++){idWuts = i+1;// recuperation des données////////////////////////////_root.listeResultat[i]=_root.listeData[i].split(",");for(j=1;j&#60;=nbAnnee;j++){idVal = j+3;idAnnee = j+anneeDebut-1;idAnneeInf = j+anneeDebut-2;// recupération des rayons_root["rayon"+idAnnee+"_"+idWuts]=Math.sqrt((Number(_root.listeResultat[i][idVal])*coef)/Math.PI);}// recupération des coord X et calage_root["x_"+idWuts]=Number(_root.listeResultat[i][1])/46+243;// recupération des coord Y et calage_root["y_"+idWuts]=Stage.height-(Number(_root.listeResultat[i][2])/46+214);// Cercles de départ //////////////////////////////////r=_root["rayon"+anneeDebut+"_"+idWuts];x=_root["x_"+idWuts];y=_root["y_"+idWuts];//_root.createEmptyMovieClip("circle"+idWuts,5+idWuts);//_root["circle"+i].beginFill(0xbbbbbb);//_root["circle"+i].dessineCercle(r,x,y);//_root["circle"+i].endFill;}// fin de la boucle for// ACTION SUR LE BOUTON ANIMATION DES CERCLES_root.btAnim.onRelease=function() {clearInterval(timer);idAnnee = anneeDebut;_root.carre._width=0;_root.afficheT._x= 12;z=nbImage;timer = setInterval(drawCircle2,vitesseTimer,idAnnee,z);}// ------------ FIN DU ONLOAD -----------------}// fin du ifelse{_root.afficheT.text = "XXXXX";}// fin du else}//----------------- FONCTIONS ------------------------function drawCircle(){for(i=0;i&#60;_root.listeData.length;i++){idWuts = i+1;_root.r=_root["rayon"+idAnnee+"_"+idWuts];x= _root["x_"+idWuts];y= _root["y_"+idWuts];_root.createEmptyMovieClip("circle_new"+idWuts,500+idWuts);_root["circle_new"+idWuts].lineStyle(1,0xFFFFFF);_root["circle_new"+idWuts].beginFill(0xFF9900);_root["circle_new"+idWuts].dessineCercle(r,x,y);_root["circle_new"+idWuts].endFill;}// afficchage de la date;_root.afficheT.text = idAnnee;if(idAnnee==anneeFin){clearInterval(timer);}else{idAnnee++;}}function drawCircle2(){for(i=0;i&#60;_root.listeData.length;i++){//for(i=0;i&#60;1;i++){idWuts = i+1;if (z==nbImage){r=_root["rayon"+idAnnee+"_"+idWuts];}else{idAnneeInf = idAnnee-1;etendue=Number(_root["rayon"+idAnnee+"_"+idWuts])-Number(_root["rayon"+idAnneeInf+"_"+idWuts]);deltaR = etendue/nbImage;r1=_root["rayon"+idAnneeInf+"_"+idWuts];r=r1+z*deltaR;}if (_root["rayon"+anneeDebut+"_"+idWuts]&#60;_root["rayon"+anneeFin+"_"+idWuts]){color="0xE87E49";}else{color="0x5293E2";}x= _root["x_"+idWuts];y= _root["y_"+idWuts];_root.createEmptyMovieClip("circle_new"+idWuts,500+idWuts);_root["circle_new"+idWuts].lineStyle(1,0xFFFFFF);_root["circle_new"+idWuts].beginFill(color);//_root["circle_new"+idWuts].beginFill(0xFF9900);_root["circle_new"+idWuts].dessineCercle(r,x,y);_root["circle_new"+idWuts].endFill;&#160;2)  req_pop.phpCi dessous le code php qui fait la connexion à la base de donnée et genère un fichier texte contenant toutes les données.&#60;?php$reponseFlash="resultat=";// il faut mettre le = pour defeinir pays comme propriete de lobjet//1)connection au serveur mysql (mettez vos propres infos de connexion)$connexion_server=mysql_connect("localhost","login","password");//2)connexion à la base de donnée$connexion_base=mysql_select_db("mydatabse",$connexion_server );//3)construire une requête$requete="SELECT * FROM _world_pop ORDER BY pop_2050 DESC";//4)on applique la requete et on recupere le resultat dans une variable$resultat=mysql_query($requete, $connexion_server);//5)on ferme la connexionmysql_close($connexion_server);//6)on affiche le resultat total avec while et par numero de champwhile($data=mysql_fetch_array($resultat)){$reponseFlash.=utf8_encode($data["WUTS5"]).",".utf8_encode($data["X"]).",".utf8_encode($data["Y"]).",".utf8_encode($data["Name"]).",".utf8_encode($data["pop_1950"]).",".utf8_encode($data["pop_1951"]).",".utf8_encode($data["pop_1952"]).",".utf8_encode($data["pop_1953"]).",".utf8_encode($data["pop_1954"]).",".utf8_encode($data["pop_1955"]).",".utf8_encode($data["pop_1956"]).",".utf8_encode($data["pop_1957"]).",".utf8_encode($data["pop_1958"]).",".utf8_encode($data["pop_1959"]).",".utf8_encode($data["pop_1960"]).",".utf8_encode($data["pop_1961"]).",".utf8_encode($data["pop_1962"]).",".utf8_encode($data["pop_1963"]).",".utf8_encode($data["pop_1964"]).",".utf8_encode($data["pop_1965"]).",".utf8_encode($data["pop_1966"]).",".utf8_encode($data["pop_1967"]).",".utf8_encode($data["pop_1968"]).",".utf8_encode($data["pop_1969"]).",".utf8_encode($data["pop_1970"]).",".utf8_encode($data["pop_1971"]).",".utf8_encode($data["pop_1971"]).",".utf8_encode($data["pop_1973"]).",".utf8_encode($data["pop_1974"]).",".utf8_encode($data["pop_1975"]).",".utf8_encode($data["pop_1976"]).",".utf8_encode($data["pop_1977"]).",".utf8_encode($data["pop_1978"]).",".utf8_encode($data["pop_1979"]).",".utf8_encode($data["pop_1980"]).",".utf8_encode($data["pop_1981"]).",".utf8_encode($data["pop_1982"]).",".utf8_encode($data["pop_1983"]).",".utf8_encode($data["pop_1984"]).",".utf8_encode($data["pop_1985"]).",".utf8_encode($data["pop_1986"]).",".utf8_encode($data["pop_1987"]).",".utf8_encode($data["pop_1988"]).",".utf8_encode($data["pop_1989"]).",".utf8_encode($data["pop_1990"]).",".utf8_encode($data["pop_1991"]).",".utf8_encode($data["pop_1992"]).",".utf8_encode($data["pop_1993"]).",".utf8_encode($data["pop_1994"]).",".utf8_encode($data["pop_1995"]).",".utf8_encode($data["pop_1996"]).",".utf8_encode($data["pop_1997"]).",".utf8_encode($data["pop_1998"]).",".utf8_encode($data["pop_1999"]).",".utf8_encode($data["pop_2000"]).",".utf8_encode($data["pop_2001"]).",".utf8_encode($data["pop_2002"]).",".utf8_encode($data["pop_2003"]).",".utf8_encode($data["pop_2004"]).",".utf8_encode($data["pop_2005"]).",".utf8_encode($data["pop_2006"]).",".utf8_encode($data["pop_2007"]).",".utf8_encode($data["pop_2008"]).",".utf8_encode($data["pop_2009"]).",".utf8_encode($data["pop_2010"]).",".utf8_encode($data["pop_2011"]).",".utf8_encode($data["pop_2012"]).",".utf8_encode($data["pop_2013"]).",".utf8_encode($data["pop_2014"]).",".utf8_encode($data["pop_2015"]).",".utf8_encode($data["pop_2016"]).",".utf8_encode($data["pop_2017"]).",".utf8_encode($data["pop_2018"]).",".utf8_encode($data["pop_2019"]).",".utf8_encode($data["pop_2020"]).",".utf8_encode($data["pop_2021"]).",".utf8_encode($data["pop_2022"]).",".utf8_encode($data["pop_2023"]).",".utf8_encode($data["pop_2024"]).",".utf8_encode($data["pop_2025"]).",".utf8_encode($data["pop_2026"]).",".utf8_encode($data["pop_2027"]).",".utf8_encode($data["pop_2028"]).",".utf8_encode($data["pop_2029"]).",".utf8_encode($data["pop_2030"]).",".utf8_encode($data["pop_2031"]).",".utf8_encode($data["pop_2032"]).",".utf8_encode($data["pop_2033"]).",".utf8_encode($data["pop_2034"]).",".utf8_encode($data["pop_2035"]).",".utf8_encode($data["pop_2036"]).",".utf8_encode($data["pop_2037"]).",".utf8_encode($data["pop_2038"]).",".utf8_encode($data["pop_2039"]).",".utf8_encode($data["pop_2040"]).",".utf8_encode($data["pop_2041"]).",".utf8_encode($data["pop_2042"]).",".utf8_encode($data["pop_2043"]).",".utf8_encode($data["pop_2044"]).",".utf8_encode($data["pop_2045"]).",".utf8_encode($data["pop_2046"]).",".utf8_encode($data["pop_2047"]).",".utf8_encode($data["pop_2048"]).",".utf8_encode($data["pop_2049"]).",".utf8_encode($data["pop_2050"])."||";}echo($reponseFlash);// on utilse echo pour que flash pouisse recuperer les donnees?&#62;}// FIN DE LA BOUCLE FOR// incrementationif (z==nbImage){z=1;idAnnee++;}else{z++;}// affichage de la date_root.afficheT.text = idAnnee;_root.afficheT._x += 2.7;_root.carre._x=xbarre;_root.carre._y=ybarre;_root.carre._width+=2.7;if(idAnnee==anneeFin){clearInterval(timer);}}Et voici le code php