CityEngine使用Python脚本按feature导出道路

本教程详细介绍了如何在CityEngine中通过Python脚本,依据道路名称导出单条道路或批量导出多条道路,解决了无法按Feature单独导出道路的问题。包括添加道路名称字段、脚本编写步骤和实例演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在CityEngine中进行道路导出时有两个选项:


Use file size limit:将所选的道路导出为一个obj文件

Create one :将所选的道路按照网络节点,每个线段导出为一个obj

以上两种可选导出方式均不能将一条完整的道路导出为一个obj文件,即无法按照Feature将道路分别导出为独立的模型文件。

为了实现按feature导出道路,需要用到CityEngine中的Python脚本进行自定义的导出。

一:依据道路名称导出单条道路

1、在道路图层属性数据中添加Name字段,类型为Text


2、为Name字段赋值(非中文)



3、生成道路模型


4、新建脚本文件,并编辑如下:


参数解释:

ce.withName(“ ’UNION’”)中的UNION为道路的Name

Name为导出后的模型文件名

D:/tmp为导出路径

5、选中一个模型后,File----Export----Export Models of Selected Shapes(allmodels are generated),之后选中Script Based Export(Python),最后在Misc Options中选择脚本。



6、点击Finish,导出模型



二:依据道路名称将道据全部按要素导出

本次在使用客户实际数据时的处理方式为:

1、将道路GIS数据添加的Name字段赋值为其FID,重新加载网络数据并生成模型


2、修改Python脚本为:


Range参数中的28为道路的数量+1(目前是根据道路的数量来进行循环模型导出)

3、执行上述脚本即可得到结果

注意事项:

1、本文档使用的示例数据为教程中Pasadena工程中的data----streets.shp:


2、在第二部分的全图层批量导出时未很好解决文件名的问题,需要继续研究更智能的导出脚本

3、某些情况下会遇到一些错误


暂时分析为数据或脚本问题,而在实际数据测试的50条道路中未出现该问题。


``` import ee # 初始化GEE(前提是earthengine authenticate已经成功) ee.Initialize() # ========== 基础参数 ========== china = ee.Geometry.Polygon(...) # 替换成你研究区的几何 city_table = ee.FeatureCollection('users/your_username/your_city_table') # 城市边界表 batch_size = 20 # 每批最多处理多少城市(视账号配额和数据量调整) years = [2020] months = list(range(1, 13)) # ========== 准备影像集合 ========== def mask_l8sr(image): cloud_mask = image.select('QA_PIXEL').bitwiseAnd(1 << 3).eq(0) return image.updateMask(cloud_mask).multiply(0.00341802).add(149.0) # 转换为地表温度 landsat_collection = (ee.ImageCollection('LANDSAT/LC08/C02/T1_L2') .filterBounds(china) .filterDate('2020-01-01', '2020-12-31') .map(mask_l8sr)) # ========== 按月份生成合成影像 ========== def create_monthly_composite(year, month, collection): start_date = ee.Date.fromYMD(year, month, 1) end_date = start_date.advance(1, 'month') monthly_image = (collection .filterDate(start_date, end_date) .median() .set('year', year, 'month', month)) return monthly_image monthly_composites = [] for month in months: monthly_composites.append(create_monthly_composite(2020, month, landsat_collection)) # ========== 分批处理城市 ========== num_cities = city_table.size().getInfo() num_batches = (num_cities + batch_size - 1) // batch_size all_results = ee.FeatureCollection([]) for batch in range(num_batches): print(f"处理批次 {batch+1}/{num_batches}") start = batch * batch_size end = min(start + batch_size, num_cities) current_batch = city_table.toList(batch_size, start) # ========== 核心城市处理函数 ========== def process_city(city): city = ee.Feature(city) city_name = city.get('name') city_geom = city.geometry() monthly_features = [] for month_idx, monthly_comp in enumerate(monthly_composites): month_num = month_idx + 1 stats = monthly_comp.select('ST_B10').reduceRegion( reducer=ee.Reducer.mean(), geometry=city```补全
最新发布
03-17
您提供的代码片段是一个基于Google Earth Engine (GEE) 的Python脚本,主要用于处理Landsat卫星影像,并对特定区域的城市进行逐月的地表温度统计分析。以下是对其功能的一个简要说明: ### 功能概述: 该脚本的主要目标是从 Landsat 8 卫星数据集中提取指定研究区域(如中国)内每个城市的逐月平均地表温度。具体步骤包括以下几个部分: 1. **初始化 GEE 环境** 使用 `ee.Initialize()` 完成 Google Earth Engine API 的初始化。 2. **定义基础参数和输入数据** - 设置研究区范围 (`china`) 和城市边界矢量表格 (`city_table`)。 - 配置每批次最大城市数量 (`batch_size`)、年份列表 (`years`) 和月份列表 (`months`)。 3. **准备影像集合并过滤云掩膜** 使用 Landsat 8 Collection 2 Tier 1 数据集作为源数据,并通过自定义函数 `mask_l8sr` 对其应用云掩膜处理以及将辐射亮度转换为地表温度值。 4. **按月份生成合成影像** 创建了一个辅助函数 `create_monthly_composite` 来从原始影像集合中筛选出属于某一年某一月的所有图像,并计算其中位数形成复合图像。 5. **分批处理所有城市的数据** 根据设定好的批量大小迭代整个城市列表,在每一组选定的城市范围内再次遍历每个月份对应的综合图片完成进一步的空间统计运算——即取感兴趣区域内“ST_B10”波段像素均值表示当地当月平均表面热状态指标。 6. (未完整展示的部分应该是保存结果到新要素属性里) --- 下面是可能继续书写的剩余部分推测版本: ```python # 如果需要更精确的结果可以采用更大的像元尺度或其他采样策略 stat_value = stats.getInfo() feature_result = ee.Feature(None, { "City": city_name, "Month": f"{year}-{month_num:02d}", "MeanTemp": stat_value["ST_B10"] }).setGeometry(city_geom.centroid()) monthly_features.append(feature_result) batch_results = ee.FeatureCollection(monthly_features) all_results = all_results.merge(batch_results) # 导出最终收集得到的所有记录项至资产目录下或者直接导出CSV文件等操作省略... ``` 此补充内容假设了如何把单个城市每月统计数据整合进特征对象再加入整体汇总容器的过程;同时为了简洁起见忽略了一些实际项目中必要的异常检测环节比如是否真的存在有效观测值等问题考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值