
Tein vielä uuden version matka-aikakartasta (ks. aikaisempi postaus). Kuvaa klikkaamalla pääsee isompaan versioon. Kuvassa valkoiset käyrät vastaavat 10, 20, 30, 40, 60 ja 90 minuutin matka-aikoja.
Python-skripti graafin piirtämiseksi matka-aikadatasta (graafi on vielä tämän jälkeen yhdistetty Googlen karttaan fotarissa):
import pylab, scipy, numpy, csv
import matplotlib.pyplot as pyplot
from scipy import signal, ndimage
# setup constants
MAX_VALUE = 120
SCALING = 10
SMOOTHING = 50
CONTOUR_LEVELS = [10,20,30,40,60,90]
# import data
fileName = 'routeDataGrid.raw'
w,h = 90, 80
sr = csv.reader(open(fileName), delimiter=',')
x,y = 0,0
Z = numpy.zeros((h,w))
for y, row in enumerate(sr):
for x, item in enumerate(row):
Z[y][x] = int(item)
Z = Z[::-1]
Z[Z>MAX_VALUE]=MAX_VALUE
Z[Z==-1]=MAX_VALUE
X, Y = numpy.meshgrid(numpy.arange(w), numpy.arange(h))
# interpolate
newx,newy = scipy.mgrid[0:1:complex(0,h)*SCALING, 0:1:complex(0,w)*SCALING]
coords = numpy.array([newx*(h-1), newy*(w-1)])
Z_large = ndimage.map_coordinates(Z, coords, order=3)
X_large, Y_large = numpy.meshgrid(numpy.arange(w*SCALING), numpy.arange(h*SCALING))
# smooth (this would be faster with fft)
def gauss_kern(size, sizey=None):
size = int(size)
if not sizey:
sizey = size
else:
sizey = int(sizey)
x, y = scipy.mgrid[-size:size+1, -sizey:sizey+1]
g = scipy.exp(-(x**2/float(size)+y**2/float(sizey)))
return g / g.sum()
G = gauss_kern(50)
Z_smooth = scipy.signal.convolve(Z_large, G, mode='same')
# plot contour
figsize=(numpy.array(Z_smooth.shape)/100)[::-1]
pyplot.rcParams.update({'figure.figsize':figsize})
pyplot.figure()
pyplot.axis('off')
pylab.imshow(120-Z_smooth, cmap=pyplot.cm.jet)
pyplot.contour(X_large, Y_large, Z_smooth, CONTOUR_LEVELS, colors='white', linewidths=1.5, linestyles='solid', antialiased=True)
pyplot.subplots_adjust(bottom=0.0, top=1.0, left=0.0, right=1.0, hspace=0.0, wspace=0.0)
pyplot.savefig('mapimage.pdf', format='pdf')
En ole vielä täysin tyytyväinen väritykseen. Idea valkoisista ääriviivoista tuli Chris Lightfootin toteuttamasta Lontoon matka-aikakartasta. Silti, ehkä vastaava kuva ilman ääriviivoja (mutta eri värisillä alueilla) olisi selkeämpi.
Chris Lightfootin ja Tom Steinberg kartasta on myös tehty interaktiivinen versio vuonna 2007. Siinä voi valita, kuinka pitkän työmatkan on valmis tekemään ja paljonko on valmis maksamaan asunnosta — kartta näyttää kaikki alueet jotka vastaavat näitä vaatimuksia.
Kiinnostava sivuhuomio: interaktiivisen kartan toteutukseen osallistui myös Tom Carden monia hienoja juttuja tekevästä Stamen Design -toimistosta. Tom Carden on tullut vastaan hienojen Processing-härpättimien tekijänä. ja joskus olen vilkuillut myös hänen Delicious-linkkilistaansa.