<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />La publicación anterior creó un mapa del mundo día/noche con el día representado por un mapa de bits de fondo y la noche representada por contornos huecos.Este ejemplo mostrará cómo agregar algunos detalles interesantes al mapa nocturno al trazar ubicaciones de IP, creando la neblina amarilla en la sección nocturna del mapa a continuación.
haga clic para ver una imagen más grande...

Las ubicaciones de IP provienen de archivos que el script descarga de MaxMind.Sus datos son bastante interesantes y le permiten asignar direcciones IP a ubicaciones.No lo uso para eso aquí.Aquí está su aviso:
This example includes GeoLite data created by MaxMind, available from http://www.maxmind.com.
Dado que el archivo es bastante grande, este JSL comprobará si los datos ya están descargados en su directorio $temp.Si la instrucción TRY no logra abrir la tabla (primera instrucción, antes de la coma), la atrapar parte de intentar (declaraciones después de la coma) descargará y guardará una copia nueva.La descarga utiliza dos declaraciones open(): la primera recupera el archivo zip, la segunda importa el texto en un miembro CSV leído desde el archivo zip.Justo antes de guardar la tabla (solo con las columnas 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<);
Obtendrá alrededor de 3/4 millones de ubicaciones que crearán áreas amarillas y blancas dentro de los límites en las áreas nocturnas en el mapa en la parte superior (y obtendrá una cantidad diferente de filas porque actualizan la tabla con frecuencia):

La siguiente parte del script utiliza la función Zona horaria de un par de publicaciones atrás .La hora GMT es necesaria para posicionar el sol/sombra del mapa en la ubicación correcta, ahora .El resto del guión es bastante similar al guión anterior , con solo un script adicional agregado a GraphBox para dibujar las ubicaciones adicionales (y un pequeño script para cargar las ubicaciones en matrices de latitud y longitud):
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 al margen: la función Zona horaria no devolverá un número entero si el reloj de su computadora se ha desviado más de unos pocos segundos.La computadora de mi casa estuvo apagada por aproximadamente 4 segundos e informó 4,999 en lugar de 5 (porque la función de ronda en el script solicita tres decimales).Un redondeo de este tipo puede afectar los resultados, dependiendo de cómo se utilice el número.
try() se asegura de que Lat,Lon sea una matriz, posiblemente vacía si algo salió mal.El script gráfico crea un marcador a partir de la matriz Lat, Lon y establece el color RGB en un gráfico amarillento claro.La transparencia de .2 hace que los puntos duplicados se muestren con más intensidad que los puntos individuales.El color amarillo hace que los puntos sean menos obvios en las partes diurnas del gráfico y parte de la textura del mapa se pierde debajo de ellos.
Próximamente: capturando datos de Twitter:
