即之前的两篇Grasshopper分析图教程之后,今天LAC制图教室将继续带领大家进行GH分析图的学习。
那么本次课程我们主要来聊一下前一段时间在网络上非常火的城市人流分析图。
STEP 1
图纸分析
对于任何分析图,我们在绘制之前首先都要明确图纸想要表达什么。上述几张图纸其实都选自国外 21 maps that show how people run in different cities 这一套作品。每一张图中紫色的线其实都表现了大城市中人的日常活动流线。并且紫色线的深浅和粗细表示了每条路径人流的多与少,因此结合城市底图,可以让读者非常清楚的了解每个城市中人流的特点。这对于后续城市设计以及城市中建筑单体设计的选址和场地分析都有极大的指导作用。
比如下面这张图表示的就是德克萨斯州达拉斯的人流特点。通过图纸我们可以清楚看到达拉斯市的沿湖区域人流密度极大,并且具有明显的城市干道。因此如果我们要进行一个商业体的设计,从人流上看,湖边区域无疑是最优的选择范围。
当然,对于这样一张图纸的绘制,真正正确的方法必定是基于大量的真实人流数据的记录与分析,通过对于每个测试样本走过路径的统计,最终才可以得到这样一张人流分析图。但对于学生阶段的我们,这种需要大量数据记录与统计的方法肯定是无法使用的。因此这次教程我们将通过grasshopper进行虚拟的人流的模拟,来得到一张近似正确的人流分析图。在这可以非常明确的告诉大家,这种方法肯定是存在较大误差的,但和那种直接在PS中绘制城市人流的方法相比,还是相对比较科学并且高效很多的。
STEP 2
GH人流模拟
在进行人流模拟之前,首先我们需要获取我们将要分析城市的基本路网。这里借助Elk插件和Openstreetmap。我们可以非常快速的获取我们需要城市的场地。具体操作大家可以参考LAC往期的文章.
这里就不再赘述了。已小编所在的香港为例,在openstreetmap上选择上环-中环-湾仔这段,导出OSM数据。
在grasshopper中,通过file path 打开OSM文件,结合ELk的location和OSMData运算器,我们可以非常快的获取所需类型的位置点(这里因为分析人流需要路网,因此选择highway),通过prune tree清除数据量小于2的数据(构成线至少需要两个点),通过polyline就可以获取基本的城市路网了。
完成路网之后,我们就可以进行人流的模拟分析了。首先我们要确定所有人的出发点。因为这片区域北侧为维多利亚湾,很明显人不可能从海里面出发。所以第一步我们需要在Rhino中确定基本陆地的范围。通过polyline大致把陆地的范围圈出,通过curve抓到GH中。
之后我们可以借助boundary surface生成面,运用populate geometry生成随机点来模拟人的出发点。
虽然这种方法,可以很快的模拟出随机出发点,但是它却有一个致命的缺陷,那就是实际情况下,对于任何城市而言,人的分布都不会是均匀的。CBD,大型娱乐场所,购物中心,他们的人群密度会远远大于其他区域。以这片区域为例,Central Tower,IFC,湾仔街市等地方的人群密度肯定会远远大于南侧middle level的居民区。因此我们要考虑对这种方法进行优化:通过人工选择一些人群较为密集的区域,布置较多的出发点。在这我们运用point选择几个点作为人群密集点(在大家自己的场地分析中,这一步的选择需要通过前期场地的调研得出)
之后为了取得离这些点近人多,离这些点远人少的效果,我们可以通过在一组同心圆上分布随机点,类似下图。
以选取点绘制同心圆。
但在这时我们还不能直接生成随机点,因为部分圆会伸入到海洋中,因为我们需要运用region intersection求一下同心圆的我们之前绘制的陆地界线的交集。
之后通过一次path mapper数据结构的调转
我们就可以可以生成随机点作为我们的人群出发点拉
之后我们运用相同的方法获取我们的人群目标点,遵循相同的原理,我们只要改变seed的数值就可以了。
然后我们就要获取人流路径,因为大部分人都倾向于到离自己最近的目标点,因此运用close point获取每个出发点对应最近的目标点
但这个时候如果我们直接连线,也是不符合实际情况的,因为有的时候人们附近的目标点并不一定可以满足人的需要,在特定情况下人们必须要去城市中离自己比较远的一些地方(比如小编住在龙华的港大第三村学生宿舍,日常吃饭我肯定会选择最近坚尼地城,但是购买家具的话我就必须要去铜锣湾的宜家了,因为坚尼地城并没有宜家)。因此我们使用jitter,来模拟这种局部情况。
这样我们就获得了最终的人流路径。但是新的问题出来了,目前的人流路径是从出发点到目标点的直线,实际情况下,人的流线是必须要遵守城市路网的变化,不可能是这样的直线。所以下一步,我们要运用shortest walk插件,来获得符合路网的人流线 (下载地址 http://www.food4rhino.com/app/shortest-walk)
但是对于shortest walk有个事情是我们需要注意的,其C端是需要曲线互相打断的,因此如果我们直接把Elk生成的曲线连到C端效果并不会好。
因此,我们需要把Elk生成的线进行打断,在这里我用的方法是bake到rhino中运用TS的split命令打断,再重新导入到GH中,连接到shortest walk.
到此为止,我们就获得了符合城市路网的人的运动流线了。
不过目前因为大量的流线还重叠在一起,那种人流越密集线越粗颜色越深的效果还不明显。我们还需要对我们的GH进行修正。我们知道如果给予每个曲线一个随机的抖动,那么重叠在一起的线,就会因为数目的不同获得不同的宽度和深浅。所以我们要想办法让曲线抖动起来。
因为曲线是有点构成的,点是由XYZ坐标构成的,通过提取曲线的控制点,拆分为xyz坐标,如果我们随意的给xy加一个随机数,在重新生成点,连接成线。我们不就是可以让曲线抖动起来了吗?
提取控制点
拆分xyz,随机加上一个数值,再重新生成点
连接成线
通过控制随机数的区间大小,我们可以改变线的粗细。
当符合要求之后,将其bake到Rhino中,导出为AI文件。
STEP 2
后期处理
后面的操作就非常简单啦,打开AI文件,给曲线调一个比较风骚的紫色。透明度设为70%。外观中把样式设为正片叠底。
再在mapbox里面下载一个香港地区的地图,叠到流线下面。嘟嘟嘟,我们的流线图就搞定啦。
当然由于之前没有对参数(聚集点,出发点数目,目标点数目,点抖动范围等等)进行详细调试,导致了部分流线和道路无法完全吻合,但是抛砖引玉,这种方法还是能较为科学的,帮助大家在较短时间里绘制出一张城市人流分析图。