Postgres从9.5升级到9.6与查询Osmosis(用于处理OpenStreetMap数据的命令行Java应用程序)相关的处理时间非常慢.特别是将本地osm数据库与主osm repo同步(Postgis 2.3 from 2.2).同步过去每天都发生,平均花费大约500秒.升级后,48小时后仍然没有结束.我注意到与之前相比,对象处理时间非常慢(低于零)(下面的日志记录).我很确定问题出在Postgres更新上.无法弄清楚要解决的问题.pg_stat_activity提供以下查询(当前):
UPDATE ways w
SET linestring = (
SELECT ST_MakeLine(c.geom) AS way_line
FROM (
SELECT n.geom AS geom
FROM nodes n
INNER JOIN way_nodes wn ON n.id = wn.node_id
WHERE (wn.way_id = w.id)
ORDER BY wn.sequence_id ) c )
WHERE w.id IN (
SELECT w.id
FROM ways w
INNER JOIN way_nodes wn ON w.id = wn.way_id
WHERE wn.node_id = $1
GROUP BY w.id )
Run Code Online (Sandbox Code Playgroud)
更新后的日志记录:
Oct 31, 2017 12:23:59 PM org.openstreetmap.osmosis.core.Osmosis run
INFO: Osmosis Version 0.45 …Run Code Online (Sandbox Code Playgroud) 我下载并解压了 OpenStreetMap 源文件(见这里)。我现在有一个 400GB 的 XML 源文件,我想 (1) 将数据插入 MySQL 表或(2) 将其导出到 SQL 文件,这无关紧要。
通常是否可以在数据库/SQL 文件中导入整个文件,如果是,如何导入?我在哪里可以找到表/数据库结构?有没有人已经尝试过?
非常感谢!
我设法从 OSM 下载了一个行星文件,并使用 osmconvert 将其转换为 o5m 格式,并从中删除了所有作者信息,以保持文件较小。我试图从全世界的这个数据库中获取每个 POI,所以我对城市、城镇、高速公路、道路等不感兴趣,只对便利设施感兴趣。
首先,我尝试通过使用 osmosis 来实现这一点,它似乎设法做我想做的事,只是它总是内存不足,导致文件太大而无法处理。(我可以将文件拆分成更小的文件,但如果可能的话,我想避免这种情况)。
我尝试使用 osmfilter 进行试验,在那里,我设法过滤掉了每个包含名为 amenity 的标签的节点,但是我有几个无法解决的问题:
一种。如果我使用以下命令:
osmfilter planet.o5m -v --keep-tags="amenity=" -o=amenities.osm
Run Code Online (Sandbox Code Playgroud)
它保留所有节点,并过滤掉名称中没有舒适性的每个标签。
湾 如果我使用这个命令:
osmfilter planet.o5m -v --keep-tags="all amenity=" -o=amenities.osm
Run Code Online (Sandbox Code Playgroud)
它现在过滤掉所有没有便利性标签的节点,但也过滤掉匹配节点中的所有附加标签,其中包含我需要的信息(例如,兴趣点的名称或描述)
C。如果我使用这个命令:
osmfilter planet.o5m -v --keep-tags="all amenity= all name=" -o=amenities.osm
Run Code Online (Sandbox Code Playgroud)
过滤掉标签中包含名称或便利设施的每个节点,这给我留下了几个命名的城市或高速公路(我不需要的数据)。
我也尝试用 AND 运算符将其分开,但它说,在过滤标签时我不能使用 AND 运算符。知道我怎么能达到预期的结果吗?
尾注:我运行的是 Windows 7 系统,所以没有基于 Linux 的程序可以帮助我:|
我正在openstreetmap上做一个项目,因此为了实现路由机制,我试图实现osrm引用1,但是当我试用时mkdir -p build; cd build; cmake ..,我得到一个错误说:
"CMake错误:源目录"/ home/user1"似乎不包含CMakeLists.txt".
我该怎么做才能解决这个问题!