You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OSMOSIS提取OpenStreetMap数据时出现类缺失报错如何解决?

问题描述

我正在尝试复现OSM教程中的osmosis示例,已经下载了对应示例数据,运行如下命令:

osmosis --rbf sample_osmosis.osm.pbf --nkv keyValueList="amenity.school" --wx schools.osm

我使用的系统是Linux Mint 20.2 Cinnamon,通过新立得软件包管理器安装了0.47版本的osmosis。我已经将示例数据下载到本地,在pbf文件所在目录运行上述命令后,收到如下报错:

osmosis --rbf sample_osmosis.osm.pbf --nkv keyValueList="amenity.school" --wx schools.osm
nov. 18, 2021 11:55:56 P. M. org.openstreetmap.osmosis.core.Osmosis run
INFORMACIÓN: Osmosis Version 0.47
nov. 18, 2021 11:55:56 P. M. org.openstreetmap.osmosis.core.Osmosis run
INFORMACIÓN: Preparing pipeline.
nov. 18, 2021 11:55:56 P. M. org.openstreetmap.osmosis.core.Osmosis run
INFORMACIÓN: Launching pipeline execution.
nov. 18, 2021 11:55:56 P. M. org.openstreetmap.osmosis.core.Osmosis run
INFORMACIÓN: Pipeline executing, waiting for completion.
nov. 18, 2021 11:55:56 P. M. org.openstreetmap.osmosis.core.pipeline.common.ActiveTaskManager waitForCompletion
GRAVE: Thread for task 1-rbf failed
java.lang.NoClassDefFoundError: com/google/common/util/concurrent/MoreExecutors
    at org.openstreetmap.osmosis.pbf2.v0_6.PbfReader.run(PbfReader.java:87)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.MoreExecutors
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    ... 2 more

nov. 18, 2021 11:55:56 P. M. org.openstreetmap.osmosis.core.Osmosis main
GRAVE: Execution aborted.
org.openstreetmap.osmosis.core.OsmosisRuntimeException: One or more tasks failed.
    at org.openstreetmap.osmosis.core.pipeline.common.Pipeline.waitForCompletion(Pipeline.java:146)
    at org.openstreetmap.osmosis.core.Osmosis.run(Osmosis.java:92)
    at org.openstreetmap.osmosis.core.Osmosis.main(Osmosis.java:37)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchStandard(Launcher.java:321)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:234)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
    at org.codehaus.classworlds.Launcher.main(Launcher.java:47)

请问是什么原因导致该问题,该如何解决?

问题原因

你通过系统软件源安装的0.47版本osmosis存在打包缺陷,缺少运行必需的Google Guava工具库依赖,无法正常加载PBF文件读取所需的类,是Ubuntu系列发行版(Linux Mint基于Ubuntu开发)该版本osmosis包的已知问题。

可行解决方案
  • 方案一:补全依赖修复现有安装
    1. 先安装缺失的guava库:
    sudo apt install libguava-java
    
    1. 编辑osmosis启动脚本,将guava库加入类路径。打开/usr/bin/osmosis文件,找到CLASSPATH相关配置行,追加:/usr/share/java/guava.jar后保存即可。
  • 方案二:使用官方预编译版本
    1. 先卸载现有有问题的版本:
    sudo apt remove --purge osmosis
    
    1. 下载osmosis官方预编译包(所有依赖已内置),解压后将解压目录下的bin文件夹路径加入系统环境变量,即可正常使用。
  • 方案三:换用更轻量的osmctools工具实现相同需求
    如果你只需要完成简单的OSM数据筛选,可使用功能匹配、运行速度更快的osmfilter工具替代:
    1. 安装工具包:
    sudo apt install osmctools
    
    1. 执行筛选命令:
    osmconvert sample_osmosis.osm.pbf --out-o5m | osmfilter --keep="amenity=school" --out-osm > schools.osm
    

内容的提问来源于stack exchange,提问作者antecessor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:27:01