使用样式文件通过 osm2pgsql 仅导入点特征
Import only point features with osm2pgsql using style file
我很新osm2pqsgl
。我已经为整个欧洲下载了一个 osm.pbf
文件,我想将此数据添加到我的 Postgres
数据库中。但是,我只对 points
感兴趣,没有 linestrings
也没有 polygon
,并且在 points
内我只对这些标签及其信息感兴趣(例如 denomination
, 或 name
)
- 自然https://wiki.openstreetmap.org/wiki/Key:natural
- 历史性https://wiki.openstreetmap.org/wiki/Key:historic
- 传承https://wiki.openstreetmap.org/wiki/Key:heritage
- 宗教https://wiki.openstreetmap.org/wiki/Key:religion
- 旅游业https://wiki.openstreetmap.org/wiki/Key:tourism
我已经将 style
文件从 osm2pgsql
编辑到这个
node,way historic text polygon
node,way natural text polygon
node,way religion text linear
node,way tourism text polygon
- 如何从具有
osm2pgsql
的 osm.pbf
文件中仅导入 Point
特征?
- 如何仅导入具有特定
tag
的 Point
特征,例如从具有 osm2pgsql
的 osm.pbf
文件导入 tourism
?
不确定 osm2pgsql
是否可以即时完成,但是您可以使用 osmosis for filtering the input files. Another option would be osmium。
另一方面,我不确定先验丢弃多边形是否是一个正确的假设。您可以在建筑物(或其他多边形)上找到很多 tourism
、religion
等标签。我建议为它们计算质心,然后 union
它们一起计算。
我最终使用了 osm2pgsql
中的 flex output
选项并创建了一个 .lua
文件。这里用 tag
religion
.
local tables = {}
-- this creates the table for point and its columns
tables.religion = osm2pgsql.define_node_table('religion_point', {
{ column = 'osm_type', type = 'text', not_null = true },
{ column = 'name', type = 'text', not_null = true},
{ column = 'geom', type = 'point' },
}, { schema = 'public' })
-- tags we don't need
local function clean_tags(tags)
tags.odbl = nil
tags.created_by = nil
tags.source = nil
tags['source:ref'] = nil
return next(tags) == nil
end
function osm2pgsql.process_node(object)
-- We are only interested in religion details
-- replace here with the tag you want to import i.e. natural, historic, ...
if not object.tags.religion then
return
end
clean_tags(object.tags)
-- Using grab_tag() removes from remaining key/value saved to Pg
local osm_type = object:grab_tag('religion')
local name = object:grab_tag('name')
tables.religion:add_row({
osm_type = osm_type,
tags = json.encode(object.tags),
name = name,
geom = { create = 'point' }
})
end
然后 运行 它与
$ osm2pgsql -c -d <DATABASENAME> -U postgres -H localhost -O flex -S ./<NAME>.lua ./<FILENAME>.osm.pbf
脚本来源
我很新osm2pqsgl
。我已经为整个欧洲下载了一个 osm.pbf
文件,我想将此数据添加到我的 Postgres
数据库中。但是,我只对 points
感兴趣,没有 linestrings
也没有 polygon
,并且在 points
内我只对这些标签及其信息感兴趣(例如 denomination
, 或 name
)
- 自然https://wiki.openstreetmap.org/wiki/Key:natural
- 历史性https://wiki.openstreetmap.org/wiki/Key:historic
- 传承https://wiki.openstreetmap.org/wiki/Key:heritage
- 宗教https://wiki.openstreetmap.org/wiki/Key:religion
- 旅游业https://wiki.openstreetmap.org/wiki/Key:tourism
我已经将 style
文件从 osm2pgsql
编辑到这个
node,way historic text polygon
node,way natural text polygon
node,way religion text linear
node,way tourism text polygon
- 如何从具有
osm2pgsql
的osm.pbf
文件中仅导入Point
特征? - 如何仅导入具有特定
tag
的Point
特征,例如从具有osm2pgsql
的osm.pbf
文件导入tourism
?
不确定 osm2pgsql
是否可以即时完成,但是您可以使用 osmosis for filtering the input files. Another option would be osmium。
另一方面,我不确定先验丢弃多边形是否是一个正确的假设。您可以在建筑物(或其他多边形)上找到很多 tourism
、religion
等标签。我建议为它们计算质心,然后 union
它们一起计算。
我最终使用了 osm2pgsql
中的 flex output
选项并创建了一个 .lua
文件。这里用 tag
religion
.
local tables = {}
-- this creates the table for point and its columns
tables.religion = osm2pgsql.define_node_table('religion_point', {
{ column = 'osm_type', type = 'text', not_null = true },
{ column = 'name', type = 'text', not_null = true},
{ column = 'geom', type = 'point' },
}, { schema = 'public' })
-- tags we don't need
local function clean_tags(tags)
tags.odbl = nil
tags.created_by = nil
tags.source = nil
tags['source:ref'] = nil
return next(tags) == nil
end
function osm2pgsql.process_node(object)
-- We are only interested in religion details
-- replace here with the tag you want to import i.e. natural, historic, ...
if not object.tags.religion then
return
end
clean_tags(object.tags)
-- Using grab_tag() removes from remaining key/value saved to Pg
local osm_type = object:grab_tag('religion')
local name = object:grab_tag('name')
tables.religion:add_row({
osm_type = osm_type,
tags = json.encode(object.tags),
name = name,
geom = { create = 'point' }
})
end
然后 运行 它与
$ osm2pgsql -c -d <DATABASENAME> -U postgres -H localhost -O flex -S ./<NAME>.lua ./<FILENAME>.osm.pbf
脚本来源