Urban 部署可行性报告
报告时间:2026-06-29 | 目标服务器:47.93.44.104 | 域名:urban.cityvistion.com
1. 项目目标
在 47.93.44.104 独立部署 urban.cityvistion.com,复刻
osm.cityvistion.cn 的“输入城市 → 下载 OSM 建筑 → 生成 3D 城市”能力,
但将 CGA 执行引擎替换为 Esri PyPRT(CityEngine PRT 的 Python 绑定),
直接消费 RPK 规则包。
2. 技术方案
- 后端:FastAPI + Uvicorn,运行在
127.0.0.1:8240。 - 数据库:阿里云 RDS PostgreSQL,使用独立 schema
rulepackage_com。 - 3D 引擎:PyPRT 1.12 +
com.esri.prt.codecs.GLTFEncoder,输出 GLB。 - 默认 RPK:
Building_From_OpenStreetMap.rpk(已替换为更适合 OSM 的规则包)。 - 前端:Three.js GLB 查看器 + OSM footprint 预览。
- Web 服务器:Nginx 反向代理
/api/到 Uvicorn,静态文件由 Nginx 直接服务。
3. 关键验证结果
3.1 PyPRT 可用性
- 已验证 PyPRT 1.12 在 Python 3.10 / Ubuntu 22.04 上可正常安装。
- 已验证 默认 RPK 可被
pyprt.get_rpk_attributes_info()加载并暴露 Inspector 属性。 - 已验证 GLTFEncoder 可成功输出符合 glTF 2.0 规范的
.glb。
3.2 默认 RPK 能力边界
- 注意 默认 RPK 未把 OSM
height/building:levels作为输入属性暴露,生成高度由规则内部估计。 - 注意 若要实现真实高度,需要重新制作 RPK 将
height、levels等映射为 CGA 输入属性。 - 已验证 规则内置多个城市风格,可通过 Inspector 面板切换。
3.3 OSM 数据链路
- 已验证 支持 Open-Meteo + Nominatim 双路 geocoding,并内置多城市坐标兜底。
- 已验证 Overpass API 建筑查询链路已调通,支持多 endpoint 容错。
3.4 资源评估
- 测试 10 栋建筑 PyPRT 生成耗时约 42ms;100 栋建筑预计 < 1s。
- 服务器 3.4GB 内存可支撑数百栋建筑并发;若生成上万栋,需要分块或异步队列。
4. 后台 RPK 管理
后台提供以下能力:
- 上传
.rpk或.zip文件。 - 通过 OSS / HTTP 链接新增 RPK。
- 自动探测 RPK 属性并入库。
- 设置默认 RPK、删除非默认 RPK。
5. 风险与建议
- 高风险 许可风险:PyPRT / CityEngine PRT 明确禁止未经授权的 web service offerings。正式上线前必须取得 Esri 商业授权或 CityEngine 许可。
- 中风险 数据隔离:当前使用 schema 隔离;若需要物理库隔离,需要 RDS 高权限账号。
- 中风险 真实高度:默认 RPK 不支持 OSM height,建议后续重新制作 RPK。
6. 结论
可行 技术方案可行。PyPRT 可加载默认 RPK 并输出 GLB,OSM 数据链路可用,后端/前端/数据库/部署链路完整。 建议在取得 Esri 授权后继续商业化上线;当前站点可作为技术验证与 Demo 使用。