英文:
Lua config throwing error in metamethods?
问题
在尝试使用osm2pgsql将数据加载到pgsql数据库时遇到以下错误:
错误:执行Lua函数'osm2pgsql.process_node'失败:test.lua:183:未知字段'as_point'
调用堆栈:
[C]: 在函数'error'中
[string "..."]:178: 在元方法'__index'中
相关的第178行位于tables.node:insert()方法内,调用了geom = object:as_point()。
我能想到的唯一可能原因是资源有限(即只有1GB内存的树莓派,但osm.pbf文件也相当小)。
感谢任何帮助。
英文:
getting the following error when attempting to load data into pgsql database with osm2pgsql:
ERROR: Failed to execute Lua function 'osm2pgsql.process_node': test.lua:183: unknown field 'as_point'
stack traceback:
[C]: in function 'error'
[string "..."]:178: in metamethod '__index'
The associated line 178 is just inside the tables.node:insert() method calling the geom = object:as_point().
The only thing I can think of is the limited resources available (i.e. a rpi with 1gb of memory but the osm.pbf file is quite small as well.)
Any help is appreciated.
答案1
得分: 1
as_point
函数似乎是在更新的版本中添加的。我目前使用的版本是 1.6.0,因此必须稍微调整我的 Lua 脚本。你可以在 osm2pgsql git 历史记录 中找到旧的语法。
在版本 1.6.0 中有效的 Lua 脚本示例:
local tables = {}
tables.public_transport_stop = osm2pgsql.define_table({
name = 'public_transport_stop',
ids = { type = 'node', id_column = 'osm_id' },
columns = {
{ column = 'tags', type = 'jsonb' },
{ column = 'geom', type = 'point', projection = 4326, not_null = true },
},
schema = 'osm'
})
function osm2pgsql.process_node(object)
if object.tags.railway == 'station' then
tables.public_transport_stop:add_row({
tags = object.tags
})
end
}
英文:
The as_point
function seems to been added in a newer version. I am currently using the version 1.6.0 and therefore had to adjust my lua script a bit. You can find the old syntax via the osm2pgsql git history.
Example lua script that works in version 1.6.0:
local tables = {}
tables.public_transport_stop = osm2pgsql.define_table({
name = 'public_transport_stop',
ids = { type = 'node', id_column = 'osm_id' },
columns = {
{ column = 'tags', type = 'jsonb' },
{ column = 'geom', type = 'point', projection = 4326, not_null = true },
},
schema = 'osm'
})
function osm2pgsql.process_node(object)
if object.tags.railway == 'station' then
tables.public_transport_stop:add_row({
tags = object.tags
})
end
end
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论