Bonjour à tous,
Une petit point d'avancement sur ce projet simpliste, mais libre !
(Bon, ça n'avance pas à la vitesse de l'éclair, mais je ne fais pas que ça de la journée.)
Comme prévu, j'utilise des données provenant de sources du domaine public : GNS pour les données de points (lieu-dit, villes, hydrographie, ...) et NGDC pour la carte de fond en élévation (qui pourrait servir pour donner des altitudes de zones).
Pour la carte du fond, j'ai récupéré les données de la zone France sur NGDC (mais j'ai oublié la corse... dans ma sélection latitude/longitude, faudra recommencer, désolé les corses). J'ai importé le tout dans PhotoShop (je ne sais pas si Gimp fait l'import de raw, j'ai pas trouvé), ai changé les couleurs pour plus de lisibilité. Le fichier s'appelle test.jpg (il est vilain, il est vert).
Pour les données GNS, j'ai importé le tout dans une base de données MySQL (installé avec EasyPHP 1.7), en ligne de commande.
Un petit coup de PHP avec GD pour générer une image, dont voici le script :
- Code: Tout sélectionner
<?php
// Renvoie un type image JPEG
// Il faut donc que le fichier PHP soit appelé par une page html
// via la balise : <img src="image.php">
header("Content-type: image/jpg");
// Création de l'image à partir d'une image existante (le fond)
$im = imagecreatefromjpeg("test.jpg");
// Rotation de l'image d'origine parce que, je ne sais pas pourquoi,
// mais les données sont inclinées
$im = imagerotate($im , -90 , 0 );
// Définition de constante, pour l'évolution du script;-)
$latmin=42; // latitude minimum
$latmax=53; // latitude maximum (qui oublie la corse)
$longmin=-6; // longitude minimum
$longmax=8; // longitude maximum (qui oublie la corse)
$imgsizex=1680;// taille de l'image en pixel horizontaux
$imgsizey=1320;// taille de l'image en pixels verticaux
// Couleur noire pour le point
$pointcolor = ImageColorAllocate($im,0,0,0);
// Précalculs d'optimisation du script
// car un point à l'écran est positionné via les formules :
// pixelx=(latitude-latmin)*imgsizex/(latmax-latmin)
// pixely=(longitude-longmin)*imgsizey/(longmax-longmin)
$precallong= $imgsizex/($longmax-$longmin);
$precallat= $imgsizey/($latmax-$latmin);
// Connexion à la base de données et sélection de la population
mysql_connect("localhost","root","");
$result = mysql_db_query("SIG","SELECT DATA.LAT, DATA.LONG FROM DATA WHERE FC='P';");
// Parcours des données
while ($row =mysql_fetch_row($result) )
{
// Position du point
imagesetpixel($im, ($row[0]-$latmin)*$precallat,($row[1]-$longmin)*$precallong,
$pointcolor);
}
// Libération des ressources
mysql_free_result($result);
mysql_close();
// Rotation de l'image pour la remettre droite
$im = imagerotate($im , 90 , 0 );
// Affichage de l'image
imagejpeg($im,"",50);
// Libération des ressources
imagedestroy($im);
?>
Voili, voilou, c'est tout pour ce soir...
En prévision à court terme :
- Possibilité de zoomer
- A partir d'un certain zoom, afficher les noms
- Choix des données à afficher
- Choix du fond
- ...
Bon week-end à tous.
Cordialement
Jean CARTIER