基于时间的地图

地图具有还原性,因为它们仅从鸟瞰角度显示空间关系,这是人们体验地图上绘制内容的唯一方式是时间。 我想显示两点之间的时间间隔。

作为一名gsapp学生,我的一生都取决于时间。 在进行最后的审查之前,我发现差不多要钉针了,我的甜蜜的家(和睡眠)似乎不在银河系之内,而进一步的事情就是完成所有事情。 当输出车间对不起,您的印刷在影棚批评家提出之前的4个小时内还没准备好时,下一步就是检查哪家印刷厂是最短的时间。 或者在一个阳光明媚的周六下午,我想花点时间探索纽约市,但最好不要走那么远,因为要考虑工作室的工作,地图以某种方式欺骗MOMA实际上需要的时间比市中心的购物中心要少。 ,在地图上显示相反的情况。 这种基于时间的地图不仅是检查时间距离的有用工具,它可能与地图上显示的时间截然不同,而且还是使用数据描述我的gsapp生活的好方法。

 导入spatialpixel.mapping.slippymapper作为slippymapper 
导入spatialpixel.google.directions作为方向
导入csv
def setup():
大小(1024,1024)
背景(0、102、153)
翻译(宽度/ 2,高度/ 2)

全球纽约
纽约= slippymapper.SlippyMapper(40.807993,-73.963833,12,'toner',width,height)

全球位置
全球纬度
纬度= []
全球经度
经度= []
全球名称
名称= []
位置= [纬度,经度,名称]

将open('diagram3.csv')设为f1:
reader = csv.reader(f1)

对于阅读器中的行:
纬度=浮点数(行[0])
latitudes.append(latitude)
经度=浮点数(行[1])
经度。追加(经度)
名称= str(row [2])
names.append(名称)

apikey ='apikey'
中心=(40.807993,-73.963833)
打印(名称)
number = len(经度)
全球持续时间
持续时间= []
对于我在xrange(number)中:
location_n =(位置[0] [i],位置[1] [i])
location_n_route = directions.RenderGoogleDirections(apikey)
testjson = location_n_route.request(centre,location_n,'bus')
数据= location_n_route.data
duration.append(data ['routes'] [0] ['legs'] [0] ['duration'] ['value'])
打印(持续时间)

全球资讯
信息= {}
全球相对信息
relative_info = {}
max_duration = max(持续时间)
打印(最大持续时间)
对于范围内的我(len(names)):
info [名称[i]] = [地点[0] [i],地点[1] [i]]
relative_info [names [i]] = [locations [0] [i]-中心[0],locations [1] [i]-中心[1],450 * duration [i] / max_duration]
打印(信息)
textSize(30)
noStroke()
椭圆(0,0,30,30)
填充(0)
文字('GSAPP',-45,45)
全球longi_point
longi_point = []
全球latti_point
latti_point = []
名称中的名称:
重量(1.0)
noFill()
笔画(255)
椭圆(0,0,2 * relative_info [name] [2],2 * relative_info [name] [2])
#print(relative_info [location] [0],relative_info [location] [1])
距离=(relative_info [名称] [0] ** 2 + relative_info [名称] [1] ** 2)** 0.5
#打印(距离)
longi_point.append(relative_info [name] [0] /距离* relative_info [name] [2])
latti_point.append(relative_info [name] [1] /距离* relative_info [name] [2])
strokeWeight(12.0)
点(latti_point [-1],-longi_point [-1])
#打印(longi_point [-1],latti_point [-1])
填充(0)

弧长= -5.0
w = 0
对于范围内的我(len(name)):
arclength =弧长-w
currentChar =名称[i]
w = textWidth(currentChar)
theta = PI + atan(-longi_point [-1] / latti_point [-1])+ arclength / relative_info [name] [2]
#print(theta)
pushMatrix()
翻译(relative_info [name] [2] * cos(theta),relative_info [name] [2] * sin(theta))
旋转(θ-PI / 2)
填充(255)
textSize(24)
文字(currentChar,0,0)
popMatrix()
def draw():
翻译(宽度/ 2,高度/ 2)

#line(mouseX-width / 2,mouseY-height / 2,0,0)
对于我在xrange(len(longi_point))中:
mouseIsOverColumn = latti_point [i]-20 <mouseX-width / 2和mouseX-width / 2 <latti_point [i] + 20
mouseIsOverRow = -longi_point [i]-20 <mouseY-height / 2和mouseY-height / 2 <-longi_point [i] + 20
mouseIsOverTheRectangle = mouseIsOverColumn和mouseIsOverRow
如果mouseIsOverTheRectangle:
填充(255)
noStroke()
rect(-550、400、300、200)
填充(0,102,153)
textSize(20)
文字(名称[i],-490、430)
文字('TIME / min:',-490,450)
文字(持续时间[i] / 60,-380、450)