Carte de l'europe en fonction des visiteurs

Soyez le premier à donner votre avis sur cette source.

Vue 9 822 fois - Téléchargée 563 fois

Description

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 / Exemple :


<?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?!?

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009

Hi!,

C'est vrai que cette table est remarquable!
Ce qui m'a complètement bluffé, c'est l'insertion dans le 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++
Messages postés
496
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
29 juillet 2009
1
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!
Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009

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 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++
Messages postés
496
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
29 juillet 2009
1
Messages postés
496
Date d'inscription
mercredi 30 juin 2004
Statut
Membre
Dernière intervention
29 juillet 2009
1
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...
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.