尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Arnis 原理拆解:一份 OpenStreetMap 数据如何变成 Minecraft 城市

Arnis 原理拆解:一份 OpenStreetMap 数据如何变成 Minecraft 城市 Arnis 原理拆解一份 OpenStreetMap 数据如何变成 Minecraft 城市【免费下载链接】arnisGenerate any location from the real world in Minecraft with a high level of detail.项目地址: https://gitcode.com/GitHub_Trending/ar/arnisArnis 替你解决一件事把某个真实地点的街道、建筑和地形起伏按真实坐标搬进 Minecraft——它读取 OpenStreetMap 要素与高程数据生成 Java、基岩版、Luanti 三种能直接打开的世界文件。为什么照抄一座城市没那么容易难点在哪两个场景就够了。第一地球是圆的方块世界是平的。你在地图上框住一块区域拿到的是经纬度Minecraft 只认整数坐标。直接按经度差 × 常数线性缩放小区域没问题区域一大偏差就藏不住——赤道附近一度经度约 111 公里挪到北纬 60 度只剩一半。第二数据是拼起来的。街道与建筑轮廓来自 OpenStreetMap但很多建筑没标层数Overture Maps 能补上一批带高度的建筑底面地面起伏又要单独从高程服务下载。三路数据各说各话坐标体系还不一致得先对齐到同一张网格上才谈得上生成。先框出要生成哪片地生成之前必须先回答一个问题生成哪里在 GUI 里用矩形工具在地图上拖一个框背后就是把框的四个角存成min_lat,min_lng,max_lat,max_lat四元组命令行则直接传--bbox。没给 bbox 时的回退顺序如果你喂的是本地 .osm 文件而没写 bbox程序会按顺序回退先读文件里的 bounds 元素再不行就取所有节点坐标的包围范围。框定之后还会估算面积超过约 250 平方公里就提醒你这次生成费时间、费内存而且会把公共的地图服务器压得很辛苦。bbox 是后面一切的地基——三路数据请求、坐标转换、落盘命名全靠它。三路数据并行拉取OSM、Overture 与高程bbox 定下来之后原始数据从哪来三件事同时发生Overpass API 抓取区域内的节点、道路与建筑轮廓Overture 请求建筑底面地面高程数据按瓦片从高程服务下载带本地缓存重复生成同一块地不用重新拉。这里的取舍在容错上Overture 挂了只降级——警告一声继续生成建筑少一些而已高程挂了直接终止因为真实地形是这个项目的默认卖点没有它整个生成就没有意义。抓回来的原始 XML 被解析成统一结构建筑、道路、水体各归各类等下一步换坐标。经纬度怎么变成方块坐标解析出的要素还穿着经纬度的衣服怎么换成方块世界的整数坐标转换逻辑集中在src/coordinate_system/transformation.rs它提供两种模式。小区域用线性大区域切 Web Mercator一种是本地线性模式把 bbox 内位置按比例映射到 XZ 网格小范围生成足够准计算也最便宜。另一种是 Web Mercator 投影就是大多数在线地图用的、把地球表面展开成平面的数学变换先把 bbox 四角投影出去取包围盒再反算坐标。区域偏大或偏北时它能避免线性缩放在边缘产生的拉伸。两种模式共享同一个 scale 参数——现实距离到方块数的比例GUI 和 CLI 都能调。坐标系统一之后整个生成范围变成一个整数 XZ 包围盒后续所有处理都发生在这个盒子里。要素排队优先级排序与地面改判所有要素齐了谁先落块程序先做一次全局排序按类型排优先级建筑、桥梁、道路依次生成后生成的要素会避让先生成的避免马路从楼顶穿过去这种低级错误。排序前后还有一次地面改判有一层处理专门用 OSM 的水体、陆地标记去修正高程数据里的矛盾——比如卫星数据把一片湖判成了平地或者桥下被误标成水面都会被逐格修复。这一步不开调试开关时你完全看不到它但生成质量很大程度押在这里。你还能通过 JSON 文件描述旋转、平移等操作或直接给--rotation把整个世界转个角度让某条街正对着自己。从道路到摩天楼要素如何拼装成方块排队完成后一个建筑要素怎么变成成排的方块答案在src/element_processing/每个文件负责一类东西——建筑轮廓被拉伸出楼层并按屋顶类型收尾道路按等级铺宽度桥梁分跨河与跨路两种走法河道与湖泊各有专门处理。 树跟着气候走大件结构是预制件两个细节值得留意。其一是树assets/tree-packs/按气候分区热带、寒带、温带等各存了一套树形结构生成时按所选区域的坐标判断气候挑对应树种所以寒带不会出现椰子树。其二是大型物体——汽车、飞机、起重机、灯塔——都以预制结构文件存在assets/structures/里生成时整体塞进对应位置而不是逐方块现算省时间也更稳定。分块写入 Anvil、mcworld 与 Luanti方块都算好了怎么变成游戏能读的文件src/world_editor/用一个公共接口对应三个写入器Java 版的 Anvil 区块格式、基岩版的 .mcworld 打包文件、Luanti 世界。三个版本的方块名不一样各自有一张映射表兜底保证同一片草地在三端长得一致。瓦片并行与内存分配器的选择写入本身是按瓦片并行跑的这也解释了main.rs里一个不显眼的决定全局换成了 mimalloc 内存分配器。瓦片并行意味着大量小块内存频繁申请释放mimalloc 在这种负载下比系统分配器快得多同时并行线程池被限制在 90% 的 CPU给系统和前台程序留口气。⛏️怎么验证生成结果、怎么按需求扩展怎么确认这次生成没跑偏几步就够先用--mode terrain-only只跑地形完全不碰地图数据快得多——确认起伏符合预期再跑完整的geo-terrain模式。加--debug解析出的要素会写进一份文本清单地面修正前后还会各输出一张对比图方便核对水陆边界。关心生成速度时开--benchmark各阶段耗时会逐项打印。想按自己需求调--scale控制比例尺--overture决定是否合并 Overture 建筑--rotation转角度Java 版用--disable-height-limit装高世界数据包需 1.21.4 以上。这些选项在 GUI 里都有对应开关生成前选框、选世界、点开始即可想自己跑起来clone 仓库https://gitcode.com/GitHub_Trending/ar/arnis后用 cargo 以 release 模式编译要新增一类元素的处理顺着src/element_processing/里现成文件的模式加文件即可——解析、定优先级、落块这三件事框架都已留好接口。【免费下载链接】arnisGenerate any location from the real world in Minecraft with a high level of detail.项目地址: https://gitcode.com/GitHub_Trending/ar/arnis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表