我更新到 OS X Mavericks,并尝试再次设置一个工作流程,将个人 OSM 数据(使用 JOSM 软件创建)转换为 Tilemill 地图。
为此,我使用 osm2pgsql 用我的 OSM 文件填充 postgres/postgis 数据库。在更新之前,相同的工作流程运行良好。
我使用 Postgresql.app 版本 9.3.0.0 和 osm2pgsql 版本 0.84.0
当我启动 osm2pgsql 命令时,我收到此错误:
osm2pgsql SVN version 0.84.0 (64bit id space)
Using projection SRS 900913 (Spherical Mercator)
Setting up table: coast_point
...
Reading in file: ../src/misc/00_Coast.osm
delete_node failed: ERROR: prepared statement "delete_node" does not exist
(7)
Arguments were: -476852,
Error occurred, cleaning up
所以,有一个“delete_node”错误,我真的不知道为什么。我试图将负“id”值更改为正值,但我有同样的错误。
这是导致错误的 OSM 文件的第一行:
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' upload='true' generator='JOSM'>
<node id='-476852' action='modify' visible='true' lat='-4.660264310091712' lon='11.79785544887142' />
<node id='-476850' action='modify' visible='true' lat='-4.659760277426281' lon='11.78306037634432' />
...
以前工作的所有文件都出现相同的错误。
我在osm2pgsql github上打开了一个错误报告,但是这个论坛不是很活跃,所以我不希望从那里得到任何帮助。
我在 osm2pgsql 代码中发现 delete_node 部分位于 osm2pgsql/middle-pgsql.c 文件中:
"PREPARE get_node (" POSTGRES_OSMID_TYPE ") AS SELECT lat,lon,tags FROM %p_nodes WHERE id = $1 LIMIT 1;\n"
"PREPARE get_node_list(" POSTGRES_OSMID_TYPE "[]) AS SELECT id, lat, lon FROM %p_nodes WHERE id = ANY($1::" POSTGRES_OSMID_TYPE "[])",
"PREPARE delete_node (" POSTGRES_OSMID_TYPE ") AS DELETE FROM %p_nodes WHERE id = $1;\n",
.copy = "COPY %p_nodes FROM STDIN;\n",
.analyze = "ANALYZE %p_nodes;\n",
.stop = "COMMIT;\n"
(...)
pgsql_execPrepared(node_table->sql_conn, "delete_node", 1, paramValues, PGRES_COMMAND_OK );
如果您有任何想法,非常欢迎您!
谢谢
格雷格