<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Im vorherigen Beitrag wurde eine Tag-/Nachtkarte der Welt erstellt, wobei der Tag durch eine Hintergrund-Bitmap und die Nacht durch hohle Umrisse dargestellt wird.Dieses Beispiel zeigt, wie man der Nachtkarte einige interessante Details hinzufügt, indem man IP-Standorte einträgt und so den gelben Schleier im Nachtabschnitt der Karte unten erzeugt.
Klicken Sie für ein größeres Bild...

Die IP-Standorte stammen aus Dateien, die das Skript von MaxMind herunterlädt.Ihre Daten sind ziemlich cool und ermöglichen die Zuordnung von IP-Adressen zu Standorten.Ich verwende es hier nicht dafür.Hier ist ihre Mitteilung:
This example includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
Da die Datei ziemlich groß ist, prüft diese JSL, ob die Daten bereits in Ihr $temp-Verzeichnis heruntergeladen wurden.Wenn die TRY-Anweisung die Tabelle nicht öffnen kann (erste Anweisung vor dem Komma), wird die fangen Teil der versuchen (Aussagen nach dem Komma) lädt eine neue Kopie herunter und speichert sie.Der Download verwendet zwei open()-Anweisungen: Die erste ruft das ZIP-Archiv ab, die zweite führt den Textimport für ein aus dem ZIP-Archiv gelesenes CSV-Mitglied durch.Unmittelbar vor dem Speichern der Tabelle (nur mit den Spalten Lat und Lon) fügt <
// 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<);
Sie erhalten etwa 3/4 Millionen Standorte, die die gelb-weißen Bereiche innerhalb der Grenzen in den Nachtbereichen in der Karte oben erstellen (und Sie erhalten eine unterschiedliche Anzahl von Zeilen, da die Tabelle häufig aktualisiert wird):

Der nächste Teil des Skripts verwendet die Zeitzonenfunktion von ein paar Beiträge zurück .Die GMT-Zeit wird benötigt, um die Karte Sonne/Schatten an der richtigen Stelle zu positionieren, Jetzt .Der Rest des Skripts ist dem ziemlich ähnlich vorheriges Skript , mit nur einem zusätzlichen Skript, das der GraphBox hinzugefügt wurde, um die zusätzlichen Standorte zu zeichnen (und einem kleinen Skript, um die Standorte in Lat-Lon-Matrizen zu laden):
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 ););Eine Randbemerkung: Die Zeitzonenfunktion gibt keine Ganzzahl zurück, wenn die Uhr Ihres Computers um mehr als ein paar Sekunden verschoben ist.Mein Heimcomputer war etwa 4 Sekunden lang ausgeschaltet und meldete 4,999 statt 5 (weil die Rundungsfunktion im Skript drei Dezimalstellen erfordert).Eine solche Rundung kann sich je nach Verwendung der Zahl auf die Ergebnisse auswirken.
Das try() stellt sicher, dass Lat,Lon eine Matrix ist, die möglicherweise leer ist, wenn etwas schief gelaufen ist.Das Grafikskript erstellt eine Markierung aus der Lat-Lon-Matrix und stellt die RGB-Farbe auf ein hellgelbes Diagramm ein.Durch die Transparenz von .2 werden doppelte Punkte intensiver angezeigt als einzelne Punkte.Durch die gelbe Farbe sind die Punkte in den Tagesteilen des Diagramms weniger sichtbar und ein Teil der Kartentextur geht darunter verloren.
Demnächst: Twitter-Daten erfassen:
