cityengine2012教程4导入街道数据
- 格式:docx
- 大小:1.93 MB
- 文档页数:16
cityengine2012 教程5 : 导入原始图形教程5 :导入原始图形目录:Part 1:从shape或者GDB导入图形(shape)Part 2:从OBJ导入图形(shape)Part 3:导入容量Part 4:导入地标作为图形(shape)Part 1:从shape或者GDB导入图形(shape)导入shapefile文件到cityengine∙新建一个场景文件∙在数据导航窗口找到‘data’ /shp_footprints/目录下的‘footprints.shp’文件∙把这个数据拖入到视窗中∙导入数据但不设置投影(使用‘Raw data in meters’)对象属性:∙数据的属性伴随着文件被导入选择单一的图块,在右边查看对象属性(‘Object Attributes’)指定规则文件并更新模型现在我们将生成简单的半成品模型在输入的图形上。
规则文件‘extrude.cga’用来定义拉伸对象的高度属性到定义的高度。
打开规则文件,你就发现以下代码:l 在视窗中选择所有的shape图形∙通过拖拽指定规则∙查看建筑物的更新状态∙或者通过打开场景‘footprints_from_shp.cej’来查看结果。
从geodatabase(GDB)导入数据从GDB导入数据和从shapefile导入数据是相似的:∙新建一个场景文件File > New ... > CityEngine > CityEngine scene,在数据导航窗口,定位到数据文件夹data中的‘footprints.gdb’ 文件。
∙注意GDB数据是作为一个文件夹存在的∙把‘footprints.gdb’ 文件拖拽到视窗中∙在弹出的窗口中,选择要导入的图层(layer)∙在导入过程中,将会让你选择场景投影。
它会根据GDB文件自带的信息来给出投影信息。
∙点击完成,导入数据。
提供的数据集Geodatabase与之前的Shapefile内容相同。
cityengine导入规则的方法CityEngine是一种专业的城市建模软件,它可以帮助用户快速创建和修改城市景观。
CityEngine具有强大的导入规则功能,可以将外部数据导入到软件中,并根据指定的规则进行自动化建模。
在本文中,我们将介绍如何使用CityEngine的导入规则功能,以及一些常用的导入规则方法。
在使用CityEngine之前,我们需要准备一些外部数据作为导入的对象。
这些外部数据可以是地图、建筑模型、道路网络等。
CityEngine支持导入多种格式的文件,包括Shapefile、OBJ、FBX等。
我们可以根据项目的需求选择合适的外部数据格式。
在导入外部数据之前,我们需要先创建一个新项目。
在CityEngine的主界面中,点击“New Project”按钮,然后选择一个合适的项目文件夹,并为项目命名。
创建完成后,我们可以在项目文件夹中看到一些默认的文件,如“scenes”文件夹和“rules”文件夹。
我们将在“rules”文件夹中编写导入规则。
导入规则是用来告诉CityEngine如何读取并解析外部数据的指南。
我们可以在导入规则中定义对象的属性、位置、旋转、缩放等信息。
导入规则使用CGA语言编写,CGA语言是CityEngine的一种脚本语言,用于描述建筑和城市景观的规则和约束。
要创建一个导入规则,我们可以在“rules”文件夹中创建一个新的CGA脚本文件。
我们可以使用文本编辑器打开这个文件,然后开始编写导入规则。
导入规则通常由三个部分组成:导入声明,解析规则和生成规则。
导入声明用于指定导入的文件路径和格式,解析规则用于定义如何解析外部数据,生成规则用于生成建模结果。
在导入声明部分,我们需要使用“import”关键字来指定要导入的文件。
例如,如果我们要导入一个名为“building.obj”的OBJ文件,可以使用以下代码:```import building = "path/to/building.obj"```在解析规则部分,我们可以使用一些预定义的函数和操作符来解析外部数据。
CityEngine 街道教程(一)本文档为Esri CityEngine学习文档,是CityEngine_2011_Tutorials官方示例教程2——“Tutorial_02_Street_Generation__2011_2”的中文翻译稿,由网友冬冬翻译整理。
教程简介本教程将对CityEngine中建立街道网和建立精细街道模型的方法进行讲解。
自动生成的街道图能够反应出受到各种障碍的影响,如湖泊和地形等。
在本教程的第二部分,将讲解如何根据街道图创建街道图层。
应用道路规则到道路数据上,能够生成精细的街道模型。
在本文的最后部分,展示了一些特定属性信息下生成不同样式的道路网络。
第一部分:创建街道网教程设置将工程“Tutorial_02_Streets”导入到你的CityEngine工作空间中;通过【File】→【New】.. →【CityEngine scene】新建向导在街道教程工程的场景(scenes)文件夹中创建一个新的场景文件,将其命名为“MyStreets.cej”。
一、创建障碍图层在城市环境中,道路的放置受到很多的限制。
如湖泊、河流或公园,这些地方很可能不会有道路网络分布。
在CityEngine中,你可以创建一个障碍图层(obstacle layer)来控制这种表现方式。
创建一个新的地图图层【Layer】→ 【New Map Layer...】;选择Obstacle(障碍),并单击下一步;从地图文件夹(maps)中选择文件“obstacles.png”作为障碍文件;将对齐位置设置为中心点,并保持比例按键按下;将X size(X的大小)设置为3000;单击Finish结束设置。
提示:如果在viewport视窗中没有显示障碍图层,则通过视图设置菜单切换到纹理阴影模式。
创建地形图层我们创建的街道需要遵循高程地形。
这将通过创建一个由灰度高程图生成的地形图层来获得。
在文件导航(Navigator)窗口的地图文件夹中,选择图像文件“elevation.jpg”;将图像拖拽到你的3D视窗中;从地图文件夹中选择“topo.png”作为纹理贴图文件;将max. elevation(最高海拔)设置为250;与前面一样,将对齐位置设置为中心点,并将保持比例按钮按下;将X size设置为3000;单击“Finish”结束;在场景视窗中选择障碍(Obstacle)图层,在Inspector视窗(可以通过【Window】→【Inspector】方式打开)中,将其Elevation Offset修改为-15 。
1、打开2Dto3D.sxd文档在“2Dto3D\Maps and GDBs”下启动2Dto3D.sxd文档。
右键单击DEM图层,点击【属性】,在【基本高度】标签下启用【在自定义表面浮动】选项,如图2。
设置完成以后DEM可以看到高低起伏,而二维数据却在DEM下面。
我们可以通过设置图层属性(【基本高度】->【在自定义表面浮动】)来显示,但是如果你得到真实的三维要素,那需要将二维要素转化为基于DEM的三维要素。
2、二维线转化为三维线我们已经构建了一个创建好的模型来快速生成3D线。
右键点击“2Dto3Dlines”GP模型(位于CityData.gdb中Conversion工具箱中)并【编辑】。
通过模型我们可以看到要对“Streets”进行简化,去掉多余的曲线;然后,简化的街道数据被“Interpolate Shape”工具转化为3D街道数据。
点击【模型】->【验证整个模型】,然后【运行】。
定位到书签“3Dstreets”和“Bridges”查看分析结果。
3 、二维点转化为三维点我们同样构建了一个模型来快速生成3D点。
右键点击“2Dto3DPoints”GP模型(位于CityData.gdb中Conversion工具箱中)并【编辑】。
可以看到,“Street furniture”点数据直接被“Interpolate Shape”工具转化成3D点。
点击【模型】->【验证整个模型】,然后【运行】。
关闭模型后,双击“2Dto3DPoints”模型,选择“vegetation”图层并修改输出数据名称为“Vegetation3D”,【确定】将“vegetation”点数据生成3D点。
4 、二维的面转化为三维面首先,打开并编辑“2Dto3DPolygons”GP模型。
可以看到这个模型有2个输出结果:“Building1_footprints3D”、“Building1_footprints3D_bufferline”,让我们分析一下这个模型都做了哪些事情。
CityEngine使用手册
1、创建一个新的CityEngine项目
File→New→CityEngine→CityEngine Project,点击Next,点击Finish。
2、创建一个新的场景
File→New→CityEngine→CityEngine Scene,场景文件new_scene.cej 一般放到scenes文件夹中。
3、将所需的各种资源放到assets文件夹中。
4、将数据(GIS data)放到data文件夹中。
5、创建街道网络/导入街道网络数据。
Layer →New Graph layer
创建街道网络:Graph →Grow Streets...,使用默认设置,点击Apply,点击Close。
6、赋予CGA规则文件。
CityEngine中建筑使用CGA 文件进行描述的。
选中一块区域,右击→Create Shapes...
选中刚刚创建的Shape(即Lot),在Inspector窗口中Rule File,选择一个cga规则文件,点击Open,在Viewport窗口中右击→Generate。
即可生成建筑模型。
在3D 视图中,选择一个shape。
在工具栏上选择Assign,然后选择规则文件*.Cga;或者直接将规则文件拖拽到shape上。
点击Generate,生成模型。
CityEngine使用Python脚本导出模型在前一篇《CityEngine使用Python脚本按feature整体导出道路》中介绍了如何按照GIS 道路数据的ObjectID将道路导出,用户在使用过程中提出几个问题,如:1、脚本的使用范围是CityEngine的整个场景,在数据量非常大的时候会卡死2、在对道路数据进行处理的时候,Name字段必须赋值为ObjectID,不够直观3、在道路数据表中记录道路的条数以便修改Python脚本的range()参数,不够智能4、导出道路的选择只能通过Range()的参数来控制,不方便而且很傻为了解决以上问题,达到摆脱ObjectID的限制(Name字段可以赋值为道路名称,当然要是英文字符),并可以通过直接拉框选择进行模型分批导出的目的,现修改脚本如下:'''''Created on 2012-8-14@author: YYX'''from scripting import *# 获取CE实例ce = CE()SelectedObj = ce.getObjectsFrom(ce.selection(),ce.isGraphSegment)#在ce.selection集合中获取路网Segments集合ce.setSelection(SelectedObj)#重新设置ce.selection为Segments集合NumOfSelected = SelectedObj.__len__()#获取Segments集合objects个数NameOfSelectedObj = []#创建空列表'''''循环获取Segment集合中objects的名称,并通过set函数合并重复值 '''for i in range(0,NumOfSelected):NameOfSelectedObj.append(ce.getName(ce.selection()[i]))UniqueSelectedObj = set(NameOfSelectedObj)#合并重复值后的Segments 集合objects名称,即唯一的道路名称'''''依据道路名称列表,循环获取某一道路对应的所有Segments,最后导出为一个ob j模型文件'''for Ojb in UniqueSelectedObj:name= "'""'"+ str(Ojb)+"'"#道路名称#获取所有与道路名称相同的Segments对象,这些Segments对象组成了一条道路 TargetOjb = ce.getObjectsFrom(ce.selection(), ce.withName(name))ce.setSelection(TargetOjb)#设置ce.selection为所选同名Segments #设置导出参数settings = OBJExportModelSettings()settings.setGeneralLocation("d:/temp")settings.setGeneralName(name)ce.export(ce.selection(), settings)#依据导出参数将所选Segments导出为一个Obj模型文件,该obj模型文件即为一条道路的模型ce.setSelection(SelectedObj)#重新设置ce.selection为所有Segments 集合,以便导出下一条道路注:该脚本只对道路的导出有效,脚本最终会将选择的每条道路生成一个单独的Obj文件。
课程课程四四:导入街道内容部分一部分一::导入DXF 街道数据部分二部分二::导入OSM 街道数据部分三部分三::导入Shapefile 街道数据街道数据((GDB )第一第一部分部分部分::导入DXF 数据CityEngine 街道网络CityEngine 街道网络图,由图形节点(十字路口)和图形边缘(街段)组成。
它们可以在CityEngine 内部生成,或者通过外部文件导入,例如DXF 。
为CityEngine 准备数据在这个例子中,一座沿海城市的主要道路已经在Illustrator中被设计完了。
从CAD的外部应用程序输出.dxf文件当输出街道网络时,确保单位适应CityEngine的单位系统,通常以米作为单位。
你也许希望在文本编辑器中打开.dxf文件并且查找节点数据以查看街区的尺寸被写入到这个文件里。
在本例中,我们设置一个像素等于十个基本单位为了获得我们需要的尺寸[看输出设置快照(export options screenshot)]一些由DXF输出文件生成的节点数据:......AcDb2dVertexAcDb2dVertex10101244.999511718751244.999511718752020234.998046875234.99804687530300.00.0VERTEXVERTEX...在Illustrator的DXF输出对话框的建议设置:往CityEngine中导入.dxf文件·打开场景文件“sesame_01.cej”·在’data’文件夹中找到’sesame_streetsketch.dxf’·在文件上右击,选择’Import…’.数据层(Layer2)已经被导入进来添加为图形层·确保“Run Graph Cleanup Tool after Import”被勾选上·点击“Next”·确保相交图段,将点捕捉到图段上以及合并节点。
cityengine2012 教程4 导入街道(数据)内容:Part 1:导入DXF 街道数据Part 2:导入OMS街道数据Part 3:导入shapefile接到数据(和GDB,地理数据库)Part1:导入DXF 街道数据CityEngine 街道网络CityEngine街道网络书属性化的图形,由街道节点(十字路口)和端点(街道段)构成。
他们可以和街道生长特征相联系,在CityEngine中创建,或者通过输入外部数据,如DXF 数据。
为CityEngine准备数据例如,海滨城市的主要道路结构被使用他的道路和几何形状勾勒而成。
从CAD中导出DXF文件当导出街道网络数据时,确保单位和cityengine保持一致,因为他总是解释成米这种单位。
你可能想在文本编辑器中打开DXF数据,查看他的定点数据,来确定维度是否被读取。
在这个例子中,我们用10米分辨率的数据来得到我们想要的纬度信息(查看屏幕截图导出选项)。
一些端点数据在导出时被链接:在DXF文件输出窗口的参数设置如下:在cityengine中导入DXF文件▶打开场景文件sesame_01.cej▶定位到data文件夹中的DXF文件sesame_streetsketch.dxf ▶右击文件,选择import…▶确保’ Run Graph Cleanup Tool after Import’被勾选▶点击next▶勾选Intersect Segments、Snap Nodes toSegments 和Merge Nodes▶设置Snapping distance为1,Merging Distance为5▶点击finish一个新的图层‘sesame_streetsketch’出现在Scene Editor视窗中。
另外,你也可以直接打开场景文件sesame_02.cej来查看输入数据后的场景效果。
生成次要街道一旦主要的街道被导入,那么你就可以开始改善街道网络并且生成次要街道。
cityengine2012 教程4 导入街道(数据)
内容:
Part 1:导入DXF 街道数据
Part 2:导入OMS街道数据
Part 3:导入shapefile接到数据(和GDB,地理数据库)
Part1:导入DXF 街道数据
CityEngine 街道网络
CityEngine街道网络书属性化的图形,由街道节点(十字路口)和端点(街道段)构成。
他们可以和街道生长特征相联系,在CityEngine中创建,或者通过输入外部数据,如DXF 数据。
为CityEngine准备数据
例如,海滨城市的主要道路结构被使用他的道路和几何形状勾勒而成。
从CAD中导出DXF文件
当导出街道网络数据时,确保单位和cityengine保持一致,因为他总是解释成米这种单位。
你可能想在文本编辑器中打开DXF数据,查看他的定点数据,来确定维度是否被读取。
在这个例子中,我们用10米分辨率的数据来得到我们想要的纬度信息(查看屏幕截图导出选
项)。
一些端点数据在导出时被链接:
在DXF文件输出窗口的参数设置如下:
在cityengine中导入DXF文件
▶打开场景文件sesame_01.cej
▶定位到data文件夹中的DXF文件sesame_streetsketch.dxf ▶右击文件,选择import…
▶确保’ Run Graph Cleanup Tool after Import’被勾选
▶点击next
▶勾选Intersect Segments、Snap Nodes toSegments 和Merge Nodes
▶设置Snapping distance为1,Merging Distance为5
▶点击finish
一个新的图层‘sesame_streetsketch’出现在Scene Editor视窗中。
另外,你也可以直接打开场景文件sesame_02.cej来查看输入数据后的场景效果。
生成次要街道
一旦主要的街道被导入,那么你就可以开始改善街道网络并且生成次要街道。
Cityengine
中的街道生长算法是视图填充存在的封闭斑块,所以你可以反复的用街道来填充街区。
▶清楚你要新建次要街道的街区
▶使用图形编辑工具新建两个单一的小街道,也就是(a,指定街区中一般方向的街道;b,为街道生长算法定义一个起始节点)
▶手动的创建一些街道段
▶选择这些(街道)段(Q键)然后开始用‘Grow Streets’对话框来填充空白的区域。
场景文件‘sesame_03.cej’包含完成的街道网络。
最后结果
场景文件‘sesame_12.cej’包含完成的提取和再次斑块分割的街道网络,就如下图一样。
被赋予次要街道的Sesame City图层和赋予建筑绿地模型的Sesame City图层
Part 2:导入OSM街道数据
打开街道地图
OSM是基于XML的用于地图的矢量数据格式。
它定义了三个基本的类型:节点,路,和封闭的路这些被用来描述所有的元素。
1)节点(nodes):这些点用来划分段。
2)路(ways):点的有序的列表,在编辑中被线段连接显示。
3)封闭的路(closedway):封闭的路是一个完全封闭的环,他们被用来描述类似于公园,湖和岛屿这类区域。
从open street map导出一个OSM文件
在cityengine工程中data文件夹中找到.osm文件
导入一个OSM文件到cityengine中
▶打开一个新的场景文件File > New... > CityEngine > CityEngine scene
▶把文件拖拽到3D视窗中。
▶在OSM导入视窗中,选择导入图层。
一般,高速公路图层上的街道,建筑图层上的建筑。
使用select/deselect all按钮来进行相关选择。
▶相关其他设置如下。
▶点击完成。
▶选择建议的投影:‘WGS 1984 UTM Zone 33N’.
▶点击OK
两个新的图层(街道网和图形)出现在场景编辑窗口中,并且OSM数据可以在3D视窗中
看到,一句道路的街道中心线自动创建街道图形。
▶重命名图形网络图层(graph network layer)为‘OSM_Streests’
▶重命名图形图层(shape layer)为‘OSM_shapes’
街道宽度
如果你仔细看一下相关的街道图形,你将会注意到他们不同的宽度。
当地图OSM标签选项是可用的,导入OSM数据,cityengine从OSM街道类型来定义街道宽度,以此来创建图层属性。
▶选择一个街道段,在Inspector窗口中查看他的参数。
在下面的例子中,一个有着‘tertiary’高速公路类型的街道被指定街道和人行道的宽度参数,依据导入的OSM图层‘OSM_Streets’。
你可以通过手动来修改街道宽度参数,使其获得一个新的属性值(这个属性将会改变用户设置user-set属性),或者使用工具栏中的街道编辑工具条。
OSM属性制图
在Scene Editor窗口选择一个新的新的图形网络,在Inspector中查看图层的属性代码。
之前选择的道路段是第三级的道路,在streetWidthByClass函数中定义为6,你可以依据你的要求来改变。
冲突数据
有时候导入的OSM数据不一定完全正确,也会有BUG(比如:重叠的道路)。
开口的块区和红色标记的线,意味着无法连接的街段或者重叠的街道,哪些可能导致无效的块区。
有一些方法用来处理这些冲突:
▶使用Cleanup Graph Tool,并且设置不同的参数
▶在导入窗口中试图选择少量的街道
▶把街道和人行道设置成较小的值(目的是更少的重叠街道)
▶导入后手动清除那些邻近的十字路口,邻近的平行街道。
例子如下:未连接的图形节点,清理前后对比。
注意:OSM街道数据肯能包含街段在不同的高程上。
鉴于这个信息在OSM数据上不可用,cityengine把所有的数据导入到统一高程。
用卫星影像添加一个地图图层
▶File > Import... > CityEngine Layers > Texture Import
▶选择‘pompeii_satellite.jpg’
▶使用建议的坐标系统‘WGS 1984 UTM Zone 33N’
▶大小和offset自动填充。
▶点击完成新的纹理图层的创建
关联模型
▶选择所有的图形(shape)
▶指定规则文件‘osm_generic.cga’,鉴于有些shape已经有个一些无效的规则设置,所以在出现在窗口中选择SKIP
▶点击generate
你可能会注意到,只有街道被链接了。
建筑物shape似乎没没连接,选择其中的一个建筑物shape,你会发现他没有指定start rules。
▶在viewport视窗中右击一个选择的建筑物shape,Select > Select Objectswith Same Start Rule,浙江会选择那些没有start rules的shape。
▶在inspector窗口中点击select按钮,在弹出的窗口中选择lot,
▶Generate again
Part 3导入shape街道数据(和GDB)因为导入shape街道数据和GDB基本相同,所以这里就不演示后者了。
Shapefile数据
▶在工程中找到street.shp数据
▶Shape文件有一个以.prj为后缀的文件,他是保证有一个正确的地理参考(坐标系统)。
数据中包含多段线,在cityengine中作为街道。
数据集包含一的width的属性,cityengine 将用它来控制街道宽度。
在arcmap中展示的shape文件属性表
导入数据
▶创建一个新的空的cityengine场景(scene)
▶把shape文件拽进场景中,使用默认的设置,在这个案例中是没事的。
▶在导入过程中,cityengine将会让你选择场景坐标系统,使用之前shape文件定义的默认投影,在这里是一个不错的选择。
注意:这个例子中shape文件包括width属性来控制街道宽度。
数据如果没有这个属性将会采用默认属性。
街道宽度可以手动修改。
让我们来仔细看一下cityengine怎么手动修改。
清除(cleanup)
导入的街道数据显示出一些冲突,用红色标记,使用Cleanup Graph Operation将会自动修复那些冲突(全选—右击—Cleanup Graph)。
指定规则文件
▶选择所有的shape
▶把‘sesame_01.cga’文件拖拽到场景中。
▶简单的街道模型就被连接了。
(比较连接前后,下面两个图的区别)。