开源GitHub官方博客·原文 2026年11月4日

Arnis开源项目用OpenStreetMap数据把现实地点生成Minecraft世界

GitHub博客介绍,该项目自 2022 年启动,GitHub下载量接近 90 万次、约 70 名贡献者;维护者Louis Erbkamm独自审核全部拉取请求,并用GitHub Copilot协助处理代码审查与文档。

AI解读:Arnis将OpenStreetMap及其他来源的现实数据转换为Minecraft世界,用户选定地图区域并决定出生点后,几分钟内即可生成并在Minecraft中打开。

据GitHub博客,项目由Louis Erbkamm于 2022 年启动,首个原型在课余两周内完成,最初用Python手写、仅基于OpenStreetMap,生成一座城镇耗时较长。

项目在GitHub上获得接近 90 万次下载和约 70 名贡献者;贡献者将其翻译成约 20 种语言,并自行开发了主要功能。Arnis从Python移植到Rust前,Louis在GitHub上公开讨论征求不同意见。

Louis是唯一维护者,亲自审核每个拉取请求,通常利用晚上或周末处理。他说使用GitHub Copilot后,代码审查和文档工作都有增加;他还用Copilot应用启动子代理,专门检查易出问题的代码区域并构造边界用例,以防新版本引入回归。

生成逻辑按用户所选区域逐个查询OpenStreetMap中已测绘的元素及其坐标与类型;地图上未标注的物体不会被放置。对于自由女神像、里约热内卢基督像等地图难以描述的精细结构,Arnis将 3D模型转换为Minecraft方块。

近期版本已加入月球和火星。Louis表示希望Arnis保持易用,同时用更少时间呈现更多细节,并进入更多学校;目前有教师生成所在城市或社区公园,让学生在同一区域内改造并共同查看结果。

GitHub博客介绍了一个名为Arnis的开源项目:它从OpenStreetMap等来源读取现实地理数据,把用户选定的地点转换成可在Minecraft中探索的世界。项目维护者Louis Erbkamm说,在下载页面选好地图位置和出生点、点击开始生成后,几分钟内世界就能在Minecraft中打开。

GitHub博客称,Arnis自 2022 年启动以来在GitHub上获得接近 90 万次下载,约有 70 名贡献者。

项目起点与早期版本

Arnis的第一个原型由Louis Erbkamm在课余两周内完成。博客描述,初版是手写的Python程序,只基于OpenStreetMap,生成一座城镇需要较长时间。为了测试,他在地图上查找德国城镇,找到面积较小的Arnis,项目也因此借用了这个镇名。

Louis说,当时的小镇包含大量建筑、街道和水域,各类元素适合用来测试。项目后来加入高程数据,生成的世界不再平坦,一些地理空间领域的专业人士随之参与讨论如何更好地整合高程。从Python迁移到Rust之前,Louis也在GitHub上发起公开讨论,听取不同意见。

  • 首个原型:2022 年,课余两周完成,Python手写,仅基于OpenStreetMap
  • 项目命名:借用德国最小城镇Arnis的名字
  • 技术转向:从Python移植到Rust前在GitHub公开讨论

生成方式与能力边界

Arnis的生成流程是:针对用户选定的区域,向OpenStreetMap查询每一个已测绘元素,再读取该元素的坐标和类型。博客明确指出,如果某个物体没有在地图上标注,Arnis就无法把它放进Minecraft世界。

对于地图数据难以描述的精细结构,例如纽约的自由女神像和里约热内卢的基督像,Arnis采用把 3D模型转换为Minecraft方块的方式处理。博客还举了一个垃圾桶的例子:Louis发现自己城市里有很多垃圾桶,生成的世界里却没有,社区随后找到一款合适的Minecraft方块来代表它。

近期版本已把生成范围扩展到地球之外,加入月球和火星。Louis表示,他希望Arnis保持易用,同时用更少时间生成更多细节,并进入更多学校。

  • 数据来源:OpenStreetMap及其他来源
  • 未测绘即缺失:地图上没有标注的元素不会被生成
  • 精细地标:用 3D模型转换为Minecraft方块
  • 扩展场景:近期版本加入月球和火星

单人维护与Copilot的使用

博客称Louis是唯一维护者,每个拉取请求都由他本人审核,请求会因此排队;他通常利用晚上或周末处理,社区需要等他下班后才有回应。

他说自己使用GitHub Copilot查看最新版本中未解决问题和缺陷的概况、了解有多少人遇到这些问题、追踪缺陷在代码库中的来源并生成修复。Louis表示,把AI引入项目后,代码审查和文档工作都有增加,因为他可以把繁琐任务交给Copilot,自己仍有时间关注与项目开发相关的重点议题。

对于大型功能对应的拉取请求,Louis会在GitHub Copilot应用中先做整体浏览和性能审查,让Copilot在后台寻找可减少内存占用或生成时间的小改动。他举例说,路灯相关代码中一个错误计算就可能让整座城市的生成速度大幅变慢。他还针对自己心中标记为需要额外留意的代码区域启动子代理,专门检查这些地方并构造边界用例,以防新版本出现回归。

  • 维护模式:唯一维护者审核全部拉取请求,晚间或周末工作
  • Copilot用途:梳理问题与缺陷、追踪代码来源、生成修复
  • 性能审查:后台寻找减少内存占用和生成时间的小改动
  • 回归防护:子代理检查高风险代码区域并构造测试用例

学校里的使用与参与方式

博客提到,Louis最喜欢Arnis在学校中的用法:教师生成所在城市或社区公园,一些课堂把它变成比赛,每名学生从同一生成区域出发,用Arnis和Minecraft改造附近的公园或游乐场,最后全班一起查看结果。

Arnis可从github.com/louis-e/arnis下载。Louis建议选择自己熟悉的地点,例如家乡或去过大峡谷、尼亚加拉瀑布等地,生成后检查缺失了什么;如果发现地图上有而世界里没有的长椅,可以到OpenStreetMap上补充标注,或把缺陷报告给他。

  • 课堂用法:教师生成城市或公园,学生在同一区域改造并共同查看结果
  • 下载地址:github.com/louis-e/arnis
  • 反馈路径:在OpenStreetMap补充标注,或向维护者报告缺陷

信息来源

GitHub官方博客原始来源