使用样式文件通过 osm2pgsql 仅导入点特征

Import only point features with osm2pgsql using style file

我很新osm2pqsgl。我已经为整个欧洲下载了一个 osm.pbf 文件,我想将此数据添加到我的 Postgres 数据库中。但是,我只对 points 感兴趣,没有 linestrings 也没有 polygon,并且在 points 内我只对这些标签及其信息感兴趣(例如 denomination, 或 name)

我已经将 style 文件从 osm2pgsql 编辑到这个

node,way   historic     text         polygon
node,way   natural      text         polygon 
node,way   religion     text         linear
node,way   tourism      text         polygon
  1. 如何从具有 osm2pgsqlosm.pbf 文件中仅导入 Point 特征?
  2. 如何仅导入具有特定 tagPoint 特征,例如从具有 osm2pgsqlosm.pbf 文件导入 tourism

不确定 osm2pgsql 是否可以即时完成,但是您可以使用 osmosis for filtering the input files. Another option would be osmium

另一方面,我不确定先验丢弃多边形是否是一个正确的假设。您可以在建筑物(或其他多边形)上找到很多 tourismreligion 等标签。我建议为它们计算质心,然后 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

脚本来源