<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Nel post precedente è stata creata una mappa giorno/notte del mondo con il giorno rappresentato da una bitmap di sfondo e la notte rappresentata da contorni vuoti.Questo esempio mostrerà come aggiungere alcuni dettagli interessanti alla mappa notturna tracciando le posizioni IP, creando la foschia gialla nella sezione notturna della mappa sottostante.
clicca per l'immagine più grande...

Le posizioni IP provengono da file scaricati dallo script da MaxMind.I loro dati sono piuttosto interessanti e ti consentono di mappare gli indirizzi IP in posizioni.Non lo uso per quello qui.Ecco il loro avviso:
This example includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
Poiché il file è piuttosto grande, questo JSL controllerà se i dati sono già scaricati nella directory $temp.Se l'istruzione TRY non riesce ad aprire la tabella (prima istruzione, prima della virgola), il presa parte di Tentativo (dichiarazioni dopo la virgola) scaricherà e salverà una nuova copia.Il download utilizza due istruzioni open(): la prima recupera l'archivio zip, la seconda importa il testo su un membro CSV letto dall'archivio zip.Subito prima di salvare la tabella (con solo le colonne 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<);
Otterrai circa 3/4 milioni di località che creeranno le aree giallo-bianche all'interno dei confini nelle zone notturne nella mappa in alto (e otterrai un numero di righe diverso perché aggiornano frequentemente la tabella):

La parte successiva dello script utilizza la funzione Fuso orario da un paio di post indietro .L'ora GMT è necessaria per posizionare il sole/ombra sulla mappa nella posizione corretta, Ora .Il resto dello script è abbastanza simile al file sceneggiatura precedente , con solo uno script aggiuntivo aggiunto al GraphBox per disegnare le posizioni extra (e un piccolo script per caricare le posizioni nelle matrici 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 ););Una nota a margine: la funzione Fuso orario non restituirà un numero intero se l'orologio del tuo computer si è spostato per più di qualche secondo.Il mio computer di casa era spento per circa 4 secondi e riportava 4.999 anziché 5 (perché la funzione round nello script richiede tre cifre decimali).Un arrotondamento di questo tipo può influire sui risultati, a seconda di come viene utilizzato il numero.
Il try() si assicura che Lat,Lon sia una matrice, possibilmente vuota se qualcosa è andato storto.Lo script grafico crea un marcatore dalla matrice Lat,Lon e imposta il colore RGB su un grafico giallastro chiaro.La trasparenza di .2 fa sì che i punti duplicati vengano visualizzati in modo più intenso rispetto ai punti singoli.Il colore giallo rende i punti meno evidenti nelle parti diurne del grafico e sotto di essi parte della trama della mappa viene persa.
Prossimamente: acquisizione dei dati di Twitter:
