NCF参数化建筑论坛

标题: 【自动停车】 - 基于用地和建筑轮廓最大化排布车位 [打印本页]

作者: Supers227    时间: 2019-7-11 10:08
标题: 【自动停车】 - 基于用地和建筑轮廓最大化排布车位
本帖持续更新:最近更新于2019-9-28

1、算法名称:自动停车(基于用地和建筑轮廓最大化排布车位)

2、上级打包:
2-1、定容城市生成   http://www.ncf-china.com/forum.php?mod=viewthread&tid=55189

3、开发级别:绘图级

4、算法目的:
4-1、基于已知的建筑轮廓,以及地块分割,并依据防火间距规范,最大化的沿道路自动排布适合的停车位。

5、输入设置:布置用线(需布置车位道路边线)、避让用线(不排布车位的用地及需避让的建筑轮廓)、道路外沿(有环路的进行环路外围停车位布置)

6、输出结果:车位、车位数量

7、功能演示:暂无

8、算法结构:
[attach]52021[/attach]

[attach]52022[/attach]

9、交流原则:
9-1、本帖仅限于交流对本绘图级算法功能的应用体验、bug举报及修改完善意见。
9-2、欢迎所有用户根据个性需求完成此算法,NCF将给予积分奖励,突出贡献者奖励丰厚,详情了解可见:
http://www.ncf-china.com/forum.php?mod=viewthread&tid=55244#lastpost

10、开发日志:
2019-9-28 Supers
为精简计算量,加快运算速度,该电池包进行了多次重新逻辑编写,目前仍有不理想之处,有待完善。

11、版本发布:
1、详见于内容2上级打包链接
2、新版本见2楼













作者: LYF    时间: 2019-10-9 10:29
本帖最后由 LYF 于 2019-10-9 10:48 编辑

朋友们,Noah.的车位部分迎来了新的更新

1、算法名称:
车位排布

2、上级打包:
定容城市生成   http://www.ncf-china.com/forum.php?mod=viewthread&tid=55189

3、开发级别:绘图级

4、算法目的:
4-1、在城市电池上生成沿路排位,并符合消防标准。
4-2、在多段线框内尽可能多地进行车位排布。(符合停车场规范)

5、输入设置:圈地停车范围、停车规范间距、停车位尺寸(此项在封包内修改)

6、输出结果:车位图块、车位区域、车位数量、道路中线及区域、绿化区域

7、功能演示与逻辑介绍
      本次发布的车位电池主要的功能由圈地排位和沿路排位两部分。其中圈地排位是在符合标准的情况下,在给定区域内尽可能多地排布车位。而沿路排位则是在符合消防标准情况下,沿着道路进行沿街车位排布。我们可以先看一下效果
[attach]52161[/attach]
[attach]52160[/attach]

是不是感觉电脑屏幕看起来更加满了?(开心!)

如何操作:
新的车位模块继承旧有的车位功能,架构在开源体系的STEP6阶段,连接方式如图所示,同时可以附加线框连入停车场区域接口,按照需求的形态生成停车场。
[attach]52152[/attach]

[attach]52153[/attach]

输入端:
停车场用地默认接入STEP4中附属空地输出端。
建筑用地默认接入STEP3建筑用地输出端。
避让用线默认接入STEP3建筑层线输出端(可接入一个List Item 取首项,这样更快)。
道路外沿默认接入STEP3道路外沿输出端。

8、算法结构
圈地排位部分电池如图

[attach]52154[/attach]

整个逻辑分为四部分:
STEP1 对输入线框进行筛选判定,剔除短边、尖锐角、以及面积不足阈值的线框,防止后续操作失败。
STEP2 对输入线框进行分类,对应单路单排、单路双排、环形排布、以及环形+内部排布四种排布方式。核心逻辑是按照其外嵌矩形最短边长度来分类,当然,内部还构建了一些电池组用于防凹形、尖角带来的offset失败从而影响分类结果等奇奇怪怪的bug。
STEP3 对各自分类进行操作。具体逻辑在各自封包中均有阐述。
STEP4 数据整理与输出。

经过了多轮debug的过程,现在圈地排位功能可以支持较多场景,只需给出闭合的多段线框,即可生成符合逻辑并且车位尽可能多的运算结果   

[attach]52156[/attach]

[attach]52157[/attach]

[attach]52158[/attach]

[attach]52159[/attach]


沿路排位部分电池如图

[attach]52155[/attach]

由于车位部分在整个流程的末尾,树形数据大多都是经过一系列改动,很多列表的特征值并未保存下来,同时也有一部分数据进行了合并,导致这一部分运算量很大,所以这部分最重要的是尽可能简化运算量,达到快的目的。
沿路排位的算法是先提取道路/地块的边缘,然后分别向地块内部offset横排和竖排两个距离。同时将需要避让的部分向外offset一个防火间距,形成避让区域。用这个区域对offset的线框进行切割,就可得出三种类型的线:不能排车位的、可以沿着其横排车位的、可以沿着其竖排车位的。然后再将车位对应上去即可。

[attach]52162[/attach]

[attach]52163[/attach]

[attach]52164[/attach]

这种算法用线代替了车位,使原来需要4*N个点的布尔运算只用三点代替即可。极大的减少了运算量。尤其在不能进行列表运算,只能拍平运算的时候,可以提升十数倍的速度。


可调参数:
圈地排位部分:
面积阈值(限制最小用地面积)
边长阈值(限制最小边长)
车道宽度
车位尺寸(2.5*5.5)
环绕绿化带宽度

沿路排位部分:
退让(防火)距离
车位尺寸(竖向停车2.5*5.5)横向 (2.5*8)


9、交流原则
9-1、本帖仅限于交流对本绘图级算法功能的应用体验、bug举报及修改完善意见。
9-2、欢迎所有用户根据个性需求完成此算法,NCF将给予积分奖励,突出贡献者奖励丰厚,详情了解可见:
http://www.ncf-china.com/forum.php?mod=viewthread&tid=55244#lastpost

10、开发日志:
2019.08.29 V0.9 更新
整合圈地停车和沿路停车功能,并修改部分内容使之与整体兼容
修改bug
1解决了圆角offset的bug
2解决单一数据和列表数据的兼容性问题。

2019.09.12 V1.1更新
1修改了两个地块相邻时布尔运算值叠加导致结果重合的bug
2修改了主文件的输出端,现在可以正常导出图层了。

2019.09.17 V1.2 更新
替换了offset列表的部分电池,防止数据错位。

2019.09.29 V1.3更新
1重新修整了数据结构,现在解决了双层数据错位的bug

2019.10.08 V1.4 更新
上线前更新 添加cleantree 防止封包内外结果不一致的bug

测试结果:
//多个地块数据运算结果:正常
//单个地块运算结果:正常
//PS多个地块首次打开正常,重新set multiple curve 时有几率出现错误(已解决)


11、版本发布
[attach]52168[/attach]
密码:895328

[attach]52165[/attach]


写在最后:
       这个封包算上大改和重写大概经历了5-6次的重大更新变动,里面有很多小惊喜。尤其是在简化运算量和增加运算速度上,下了很大功夫。例如梯度运算、多层布尔计算筛选数据等疯狂减少运算量的算法体现在了整个流程中。同时对于如何在整个运算末端修复树形数据、提升运算量,也有了新解决方案。当然,在整个过程中也碰到了很多bug,尤其是在数据结构整理时会出现的数据错位,以及双层数据错位,着实也让开发者头疼了很久。当然,最后写完了运行起来也成就感满满。希望更多朋友们加入Noah.开源计划,大家一起进步,共同构建一个开源、开放的平台!
                                                 ——LYF      









作者: xiaoxiao0071    时间: 2019-10-9 11:23
太牛逼了,一定要好好学。
作者: kengo    时间: 2019-10-10 14:10
回复一个很小的bug,实在是过于微小,和节约的开销相比,这投入产出比简直…

bug的起源是这样的,我注意到有些空地很奇怪,明明大小合适,但是却没有布置车位
[attach]52179[/attach]

打开自动建筑“大鲲V2.0”,在“切分排楼”cluster内,地块切分之后,统一按3m做了退界,但无论是否布置建筑,都把退界后的轮廓线传递去了下一步。此处是否应该是分别传递,布置建筑物的用退界后的轮廓线,不布置建筑物的用原始地块轮廓线?
[attach]52180[/attach]

仅修改了上一步之后会发现总车位数反而有所减少,检查之后发现是“停车整合V1.4”中的“圈地排车V2.3”罢工所致。输入端的“停车场用地”Union之后,因为圆弧倒角的弧长也被加入进了边长筛选,造成了误判。如果把圆弧都筛选出去,接下来的运算即恢复了正常。
[attach]52181[/attach]

下面是修改前后的对比
修改前  车位数=1471  耗时=7.1s
修改后  车位数=1541  耗时=3.6s
其他运算器耗时基本不变
[attach]52182[/attach]
[attach]52183[/attach]

作者: Supers227    时间: 2019-10-10 16:43
kengo 发表于 2019-10-10 14:10
回复一个很小的bug,实在是过于微小,和节约的开销相比,这投入产出比简直…

bug的起源是这样的,我注意 ...

非常感谢bug的提交和热情的分享~
作者: 王发路    时间: 2020-1-20 15:53
向大佬膜拜学习

作者: jarod_s    时间: 2020-3-11 17:45
膜拜楼主,感谢分享
作者: 2马    时间: 2020-3-12 19:48
膜拜楼主,感谢分享
作者: TBAS    时间: 2020-5-8 15:33
膜拜学习学习
作者: loveshulie    时间: 2020-5-29 18:09
你好,可以交流一下么,我是码农转过来的
作者: Supers227    时间: 2020-6-2 13:36
loveshulie 发表于 2020-5-29 18:09
你好,可以交流一下么,我是码农转过来的

您好
作者: loveshulie    时间: 2020-7-23 09:52
Supers227 发表于 2020-6-2 13:36
您好

您好,没找到您关于停车位那部分的逻辑过程,可以稍微介绍一下么
作者: fuhandong    时间: 2020-7-23 19:25
哪里下载?

作者: xx18wan    时间: 2021-7-27 14:26
感谢分享,车位排布一直是个很头疼的事,看似简单却又要顾及众多因素。




欢迎光临 NCF参数化建筑论坛 (http://www.ncf-china.com/) Powered by Discuz! X3.2