begin process at 2010 03 15 00:20:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > CARTE DE L'EUROPE EN FONCTION DES VISITEURS

CARTE DE L'EUROPE EN FONCTION DES VISITEURS


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Classé sous :SVG, XML, gGalisation, MySQL, Couleur Niveau :Débutant Date de création :01/08/2008 Date de mise à jour :01/08/2008 14:50:14 Vu / téléchargé :6 340 / 317

Auteur : GillesWebmaster

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Couplée avec un petit script de géolocalisation (IP-2-Country), cette source colore les pays européens en fonction du nombre de visites qu'ils vous fournissent.
C'est à la base une reprise de l'idée de la source de yoman64 ("GÉOLOCALISATION DE VOS VISITEURS"); le problème est que pour de grand pays, c'est dommage d'afficher seulement un rond au milieu du pays alors pourquoi ne pas colorer tout le pays?
La réponse avec du SVG;
==> quelques soucis de compatibilité sous IE alors passez à FFox!

Source

  • <?php
  • function reverseColor($color)
  • {
  • return abs($color-255);
  • }
  • function rgb2html($r, $g=-1, $b=-1) //Merci à l'auteur de cette fonction
  • {
  • if (is_array($r) && sizeof($r) == 3)
  • list($r, $g, $b) = $r;
  • $r = intval($r); $g = intval($g);
  • $b = intval($b);
  • $r = dechex($r<0?0:($r>255?255:$r));
  • $g = dechex($g<0?0:($g>255?255:$g));
  • $b = dechex($b<0?0:($b>255?255:$b));
  • $color = (strlen($r) < 2?'0':'').$r;
  • $color .= (strlen($g) < 2?'0':'').$g;
  • $color .= (strlen($b) < 2?'0':'').$b;
  • return '#'.$color;
  • }
  • header("Content-type: image/svg+xml"); //On informe le navigateur que ce qui suit va être du SVG (XML)
  • echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>';//Déclaration du XML
  • echo "\n".'<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.0" width="400.87827" height="419.87268">';//Déclaration du SVG
  • echo "\n".'<defs id="defs4186" />';
  • echo "\n".'<g transform="translate(-684.4075,664.3521)" id="layer1">';
  • echo "\n".'<path d="" style="fill:black" id="path6995" />';
  • $rapportRelatif=100;//Valeur de référence; modifiable;
  • $query=mysql_query("SELECT * FROM `stats_europe_countries`"); //requête MySQL
  • while($row=mysql_fetch_array($query))
  • {
  • //CODE DE SELECTION DU NBRE DE VISITEURS DANS VOTRE BASE DE DONNEE SELON VOTRE STRUCTURE:
  • $query2=mysql_query("SELECT COUNT(*) as nbr FROM `stats` WHERE `country_code`='".$row["code_pays"]."'");
  • $count=mysql_fetch_array($query2);
  • $couleur=$count["nbr"]/$rapportRelatif*255; //Au lieu de chercher un pourcentage, cherchons sur une base de 255;
  • $couleur = reverseColor($couleur);//Pour éviter d'avoir du noir qui tend vers le blanc: on veut du gris clair qui tend vers le noir.
  • //Conversion de la couleur en HEX
  • $hex=rgb2html($couleur-20,$couleur-20,$couleur);//On diminue un peu le Rouge et le Vert histoir de foncer un peu les pays dont le nbre de visites est nul; On ne diminue pas le Bleu comme ca on a une légère teinte bleue.
  • echo '<path d="'.$row["coord"].'" style="fill:'.$hex.';fill-opacity:1" id="layer'.$row["id"].'" />'."\n"; //On affiche les coordonnées et la couleur du polygone
  • }
  • echo ' </g>';
  • echo '</svg>';
  • ?>
<?php
function reverseColor($color)
	{
		return abs($color-255);
	}
function rgb2html($r, $g=-1, $b=-1) //Merci à l'auteur de cette fonction
	{
	    if (is_array($r) && sizeof($r) == 3)
		list($r, $g, $b) = $r;
		
	    $r = intval($r); $g = intval($g);
	    $b = intval($b);
		
	    $r = dechex($r<0?0:($r>255?255:$r));
	    $g = dechex($g<0?0:($g>255?255:$g));
	    $b = dechex($b<0?0:($b>255?255:$b));
		
	    $color = (strlen($r) < 2?'0':'').$r;
	    $color .= (strlen($g) < 2?'0':'').$g;
	    $color .= (strlen($b) < 2?'0':'').$b;
	    return '#'.$color;
	}
header("Content-type: image/svg+xml"); //On informe le navigateur que ce qui suit va être du SVG (XML)
echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>';//Déclaration du XML
echo "\n".'<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.0" width="400.87827" height="419.87268">';//Déclaration du SVG
echo "\n".'<defs id="defs4186" />';
echo "\n".'<g transform="translate(-684.4075,664.3521)" id="layer1">';
echo "\n".'<path d=""  style="fill:black" id="path6995" />';
$rapportRelatif=100;//Valeur de référence; modifiable;
$query=mysql_query("SELECT * FROM `stats_europe_countries`"); //requête MySQL
while($row=mysql_fetch_array($query))	
	{
		//CODE DE SELECTION DU NBRE DE VISITEURS DANS VOTRE BASE DE DONNEE SELON VOTRE STRUCTURE:
		$query2=mysql_query("SELECT COUNT(*) as nbr FROM `stats` WHERE `country_code`='".$row["code_pays"]."'");
		$count=mysql_fetch_array($query2);
		$couleur=$count["nbr"]/$rapportRelatif*255; //Au lieu de chercher un pourcentage, cherchons sur une base de 255;
		$couleur = reverseColor($couleur);//Pour éviter d'avoir  du noir qui tend vers le blanc: on veut du gris clair qui tend vers le noir.
		//Conversion de la couleur en HEX
		$hex=rgb2html($couleur-20,$couleur-20,$couleur);//On diminue un peu le Rouge et le Vert histoir de foncer un peu les pays dont le nbre de visites est nul; On ne diminue pas le Bleu comme ca on a une légère teinte bleue.
		echo '<path d="'.$row["coord"].'" style="fill:'.$hex.';fill-opacity:1" id="layer'.$row["id"].'" />'."\n"; //On affiche les coordonnées et la couleur du polygone

	}
echo '  </g>';
echo '</svg>';
?>

 Conclusion

Cette source est certainement moins intéressante pour elle-même que pour sa table MySQL (cf ZIP)!
De nombreuses améliorations sont possibles;
-coloration inspirée de la vision thermique: du vert froid au rouge chaud
-carte mondiale?!?

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 août 2008 14:50:14 :
petite erreur

 Sources du même auteur

Source avec Zip Source avec une capture VIGNETTE EN RECADRANT AVEC TAILLE FIXE!
Source avec Zip Source avec une capture N/X API: GOOGLE MAPS DEPUIS PHP VALID W3C
XML AVEC SIMPLE XML
TEMPS D'EXECUTION
NEWSLETTER SIMPLE ENREGISTREMENT DES DONNES

 Sources de la même categorie

Source avec une capture DES HISTOGRAMES , CAMEMBERT 3D ET ÉCLATÉS CRÉÉ AU VOL EN PH... par zozo14
AJOUTER UN ARRIÈRE PLAN SUR UNE IMAGE par digitaldax
REDIMENSIONNER UNE IMAGE EN PHP par digitaldax
Source avec Zip RECHERCHE DE MOTIF DANS UNE IMAGE par ParseError
BARRES PARAMÉTRABLES EN DÉGRADÉ DE COULEUR ET AVEC TEXTE DA... par hornetbzz

 Sources en rapport avec celle ci

Source avec Zip AJOUT D'UN RENDEZ-VOUS DANS UN CALENDRIER EXCHANGE 2003 par SachaWolf
Source avec Zip CHARGER DES DONNÉES DEPUIS UN FICHIER TXT DANS UNE BASE DE D... par ig3
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec une capture GÉNÉRATION/GESTION DE FORMULAIRE VIA FICHIER XML par Garno
CONVERTIR RAPIDEMENT UNE TABLE MYSQL EN FICHIER XML SANS PRE... par mmconcept

Commentaires et avis

Commentaire de GillesWebmaster le 01/08/2008 14:57:28

Quand même j'ai un problème qui me trotte dans la tête: comment définir $rapportRelatif??
-fixe (cf ci-haut)
-égale à la valeur maximale de visites d'un pays
-égale à la somme de toutes les visites

Commentaire de opossum_farceur le 03/08/2008 01:50:29

Hi!,

Tu manques de rigueur, mais peut-être étais-tu pressé de poster ton appli?, résultat des courses, il manque la moitié des choses :
- le fichier "connexion.php"
- la table "stats"

D'autre part ton éditeur a la fâcheuse habitude de rajouter un BOM (byte order mark) au début des fichiers (et donc avant la balise <?php), ce qui se traduit généralement par une bordée d'injures à la moindre tentative d'exécution de ton script.

Pour finir, es-tu sûr que ton code est incompatible IE? Parce que vu la faible réactivité de ta carte (au survol ou au clic de la souris, SVG pourrait par exemple afficher des informations supplémentaires, voir des images comme les drapeaux, et pourquoi pas, mais là évidemment je délire!, jouer les 1ères mesures de l'hymne national), on peut se demander si tout compte fait un bon vieux tracé avec GD ne ferait pas mieux l'affaire, car lui, au moins, est indépendant du navigateur...

a++

Commentaire de GillesWebmaster le 03/08/2008 11:25:16

Salut Opossum;
Alors non, la table "Stats" est dépendante de mon architecture de statistiques; elle devrait faire l'objet d'une autre source seulement c'est inutile, il en existe par centaines. (D'ailleurs dans la source j'ai mis :"SELON VOTRE STRUCTURE".)
Oui en effet le SVG ne fonctionne pas sous IE sans utiliser le plugin de Adobe.
Quand au BOM, jamais entendu parler; pourrais-tu être plus clair?
Oui alors au niveau des amélioration au survol ça devrait-être faisable; je vais m'y pencher...

Commentaire de GillesWebmaster le 03/08/2008 11:33:40

Adobe SVG: http://www.zdnet.fr/telecharger/windows/fiche/0,39021313,11009871s,00.htm

Commentaire de opossum_farceur le 03/08/2008 16:04:32

Hi!,

la table "Stats" est dépendante de mon architecture

Tu pouvais en créer une avec des données bidons, de manière à éviter à la personne qui expérimente ton travail (en fait ton "client") des complications inutiles (elle n'a pas forcément une table similaire sous la main, avec les mêmes noms, etc...). L'idéal dans l'absolu étant de fournir une appli immédiatement opérationnelle : on dézippe et hop on exécute, sans même se soucier du fichier à exécuter, qui, censé s'appeler "index.php", doit être positionné à la racine de ton appli. Le hic dans tout çà, c'est l'accès aux bases de données, que l'on doit personnaliser : qu'à celà ne tienne!, tu fournis ton fichier "connexion.php" avec des données bidons, et tout le monde comprendra comment procéder!

le "BOM"

Il s'agit de 3 octets ajoutés par certains éditeurs en début de fichier pour signaler qu'il est codé en UTF.
A ce propos, lire le très instructif :
http://www.envrac.org/index.php/2006/03/11/58-un-tutoriel-sur-le-character-encoding

Pour continuer dans la critique (que j'espère constructive!) de ton travail, on est en droit de se demander l'intérêt de stocker les coordonnées de l'élément SVG <path> dans une base de donnée, puisque SVG c'est du XML, et qu'on peut l'intégrer directement via JavaScript (avec php je suis moins catégorique), mais bon ok, j'ai compris, ton idée était de traiter simultanément le tracé des pays et le calcul de leur "coloration", mais il faut savoir qu'il existe d'autres manières de procéder.

a++

Commentaire de GillesWebmaster le 03/08/2008 16:30:34

Oui!
Comme je l'ai dit la source est plus intéressante pour sa table que pour elle-même!
Merci de tes remarques; je vais en tenir compte pour son amélioration qui est déjà en cours!

Commentaire de opossum_farceur le 05/08/2008 19:27:00

Hi!,

C'est vrai que cette table est remarquable!
Ce qui m'a complètement bluffé, c'est l'insertion dans le <path> de courbes de Bézier cubiques, annoncées par la lettre "C". Ces courbes remplacent le tracé d'un certain nombre de points discrets, et si elles sont utilisées à bon escient, elles peuvent entraîner un gain en temps d'exécution ainsi qu'une compression des données. Bien que cette optimisation puisse se faire "à la main", il y a cependant fort à parier qu'elle soit l'oeuvre d'un programme, mais quel programme? (et quel algorithme?)

Dans la rubrique "critique constructive" de ton travail, on peut se demander si la devise de l'auteur de la fonction "rgb2html" n'est pas "pourquoi faire simple quand on peut faire compliqué?" !
Cette fonction se "réduit" sans état d'âme à :

function rgb2html($r,$g,$b)
{
   return sprintf('#%02X%02X%02X',$r,$g,$b);
}

A part çà, bon courage pour tes améliorations!

a++

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

xml et mysql [ par boin ] salut,je voudrais savoir s'il est possible d'importer un fichier xml vers une base mysql?merci d'avance.B2 flash+mysql+php+xml=2 galleries d'images et je bloque [ par sniperbe ] salut a tous,comment faire pour obtenir ceci svp ???&lt;?xml version='1.0' encoding='ISO-8859-1' standalone='yes'?&gt;&lt;paquay&gt;&lt;travail photo= problème de commandes mysql [ par juenic ] Voila je débute en php et mysql et je voulais faire un import depuis mysql vers xml, j'ai repris ce script : &lt;?php//Ouverture de base de données my Pratique la couleur ;-) [ par nougitch ] Bonjour, J'aimerai r&#233;cup&#233;rer les donn&#233;es d'une table dans un select multiple. Voici ce que j'ai fait , je m'explique apr&#232;s : &l heelp !!!!! au secours !!pdf-php-xml-mysql [ par mystere11 ] Bonjour je suis en train de developper une platforme en php mysql et dans une rubrique je dois faire un rapport qui donne des info prise de la base alterner une couleur avec un style? [ par pekplusultra ] Bonjour,Je souhaiterais afficher les resultats de ma requetes avec deux couleurs differentes.par exemple, il existe un champ sexe dans ma base de donn XML ou MySQL [ par jipe32 ] Bonjour à tous,je conçois des sites pour des gens et je voudrais afficher de la publicité sur ceux-ci, mais sans passer par AdSense ou autre. Donc je XML ou MySQL ?? [ par Garno ] Salut,J'aimerais savoir s'il est plus rapide d'utilise le XML ou le MySQL pour conserver la configuration de mon site web. Comme je prévois beaucoup d générer un fichier XML à partir de mySQL [ par Migs ] Bonjour, je voudrais savoir s'il est possible de créer un fichier XML directement à partir de mySQL par le biais de procédures stockées. Je ne souhait Ligne de couleur [ par forchrisw ] je voudrais affichier a l'ecran une lign esur deux comment je peux fairevoici mon code&lt;?include("sql.php");//Pour charger les infos de connection$c


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,998 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales