<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Le message précédent créait une carte jour/nuit du monde avec le jour représenté par un bitmap d'arrière-plan et la nuit représentée par des contours creux.Cet exemple montrera comment ajouter des détails intéressants à la carte de nuit en traçant les emplacements IP, créant ainsi la brume jaune dans la section nuit de la carte ci-dessous.
cliquez pour agrandir l'image...

Les emplacements IP proviennent de fichiers téléchargés par le script depuis MaxMind.Leurs données sont plutôt intéressantes et vous permettent de mapper des adresses IP à des emplacements.Je ne l'utilise pas pour ça ici.Voici leur avis :
This example includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
Étant donné que le fichier est assez volumineux, ce JSL vérifiera si les données sont déjà téléchargées dans votre répertoire $temp.Si l'instruction TRY ne parvient pas à ouvrir la table (première instruction, avant la virgule), l'instruction attraper partie de la essayer (déclarations après la virgule) va télécharger et enregistrer une nouvelle copie.Le téléchargement utilise deux instructions open() : la première récupère l'archive zip, la seconde importe le texte sur un membre CSV lu à partir de l'archive zip.Juste avant de sauvegarder le tableau (avec uniquement les colonnes Lat,Lon), <
// download the maxmind zip file http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip// it isn't required, but provides a beautiful nighttime glow around parts of the world with internet connections.Try( cityloc = Open( "$temp/cityloc.jmp" ); // try to open an existing saved table , // if that fails, open a zip archive from the internet za = Open( "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip", "zip" ); zipMemberList = za << dir;// there are two files in the zipped archive, with any luck, this is still the name... // this zip archive member has the Lat,Lon data citylocblob = za << read( zipMemberList[If( // the member name includes a date that changes. this should pick the right member Ends With( zipMemberList[1], "GeoLiteCity-Location.csv" ), 1, Ends With( zipMemberList[2], "GeoLiteCity-Location.csv" ), 2, . // if this happens, perhaps there is an extra file in the zip? )], Format( blob ) ); cityloc = Open( citylocblob, // open understands a blob can hold CSV data columns( // there are only two cols we need Omitted Column( . ), Omitted Column( . ), Omitted Column( . ), Omitted Column( . ), Omitted Column( . ), Column( "latitude", Numeric, "Continuous", Format( "Best", 10 ) ), Column( "longitude", Numeric, "Continuous", Format( "Best", 10 ) ), Omitted Column( . ), Omitted Column( . ) ), Import Settings( // runs fast when it doesn't have to guess End Of Line( CRLF, CR, LF ), End Of Field( Comma, CSV( 1 ) ), Strip Quotes( 1 ), Use Apostrophe as Quotation Mark( 0 ), Scan Whole File( 1 ), Treat empty columns as numeric( 0 ), CompressNumericColumns( 0 ), CompressCharacterColumns( 0 ), CompressAllowListCheck( 0 ), Labels( 1 ), Column Names Start( 2 ), Data Starts( 3 ), Lines To Read( "All" ), Year Rule( "20xx" ) ) ); // add Creative Commons Attribution-ShareAlike 3.0 Unported License text MaxMind wants... cityloc << settablevariable( "MaxMind", "This table includes GeoLite data created by MaxMind, available from http://www.maxmind.com" ); cityloc<);
Vous obtiendrez environ 3/4 millions d'emplacements qui créeront des zones jaune-blanc à l'intérieur des limites des zones nocturnes sur la carte en haut (et vous obtiendrez un nombre différent de lignes car elles mettent fréquemment à jour le tableau) :

La partie suivante du script utilise la fonction Time Zone de quelques messages en arrière .L'heure GMT est nécessaire pour positionner la carte soleil/ombre au bon endroit, maintenant .Le reste du script est assez similaire au scénario précédent , avec un seul script supplémentaire ajouté à la GraphBox pour dessiner les emplacements supplémentaires (et un petit script pour charger les emplacements dans des matrices lat, lon) :
Try( IPdt = cityloc; lat = IPdt:latitude << getasmatrix; lon = IPdt:longitude << getasmatrix;, // data not available? lat = []; lon = [];);g[framebox( 1 )] << addGraphicsScript( 3, // before shape's new position, after the shadow transparency(.2); Marker( Color State( {0.8, 0.8, 0.7} ),lon, lat ););Remarque : la fonction Fuseau horaire ne renverra pas d'entier si l'horloge de votre ordinateur a dérivé de plus de quelques secondes.Mon ordinateur personnel s'est éteint d'environ 4 secondes et a signalé 4,999 au lieu de 5 (car la fonction d'arrondi du script demande trois décimales).Un tel arrondi peut affecter les résultats, selon la manière dont le nombre est utilisé.
Le try() garantit que Lat,Lon est une matrice, éventuellement vide en cas de problème.Le script graphique crée un marqueur à partir de la matrice Lat, Lon et définit la couleur RVB sur un graphique légèrement jaunâtre.La transparence de 0,2 fait apparaître les points en double plus intensément que les points uniques.La couleur jaune rend les points moins évidents dans les parties diurnes du graphique et une partie de la texture de la carte est perdue sous ces points.
À venir : capturer les données Twitter :
