使用PostGIS的ST_AsGeoJSON时出现错误

4

当我尝试运行下面的命令时:

SELECT ST_AsGeoJSON(the_geom)

我能帮助您进行翻译。以下是需要翻译的内容:

我收到了以下错误信息:

HINT: Could not choose a best candidate function. You might need to add explicit type casts.

我在将数据库备份并恢复到本地新的数据库后,收到了这个错误消息。 您有什么解决问题的建议吗?我浏览了网络并发现一个可能的解决方法是运行“postgis_upgrade_20_minor.sql”文件。(https://groups.google.com/forum/#!topic/postgis-users/qrk4FD-k5H8) 但是我不知道那是什么,也不知道在哪里可以找到这个文件(因为我对SQL和PostGIS非常不熟悉)。

1
也许这是一个显而易见的问题,但是 the_geom 的类型是几何类型?此外,如果您在 pgAdmin 中查看,是否可以看到 ST_AsGeoJSON 函数 - 它默认会在 public 模式中 - 或者从 psql 提示符运行 \df ST_AsGeoJSON。如果您已经正确安装了它,应该有四个版本。 - John Powell
1个回答

8

问题在于由于还原操作,你现在有了名为“ST_AsGeoJSON”的模糊函数。您可以运行以下查询进行检查:

select * from pg_proc where proname = 'st_asgeojson'

在干净的安装中,该操作应返回五行。但是很可能会返回更多...
解决方法是运行“postgis_upgrade_20_minor.sql”文件。这个文件包含了一系列SQL命令,可以清理异常的st_asGeoJSON函数等问题。在Windows系统中,它位于您的postgresql安装下的“share/contrib/postgis-[version]”目录中。在我的案例中,完整路径为“C:\Program Files\PostgreSQL\9.3\share\contrib\postgis-2.1\postgis_upgrade_21_minor.sql” - 您的路径可能因您的操作系统和正在使用的Postgresql和Postgis版本而异。
如果您正在使用PGAdmin,则可以连接到您的数据库并打开一个SQL窗口。打开该SQL文件,您可以运行整个文件,或滚动到底部,选择以“DROP FUNCTION IF EXISTS ST_AsGeoJson”开头的命令并仅运行这些命令。
再次执行“select * from pg_proc where proname = 'st_asgeojson'”,以查看是否产生了改变。
祝你好运!
[编辑] 如果您找不到文件,则以下是从.sql文件中复制函数删除命令。
DROP FUNCTION IF EXISTS ST_AsGeoJson(geometry); -- this one changed to use default args 
DROP FUNCTION IF EXISTS ST_AsGeoJson(geography); -- this one changed to use default args 
DROP FUNCTION IF EXISTS ST_AsGeoJson(geometry,int4); -- this one changed to use default args 
DROP FUNCTION IF EXISTS ST_AsGeoJson(geography,int4); -- this one changed to use default args 
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geometry); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geography); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geometry,int4); -- this one changed to use default args
DROP FUNCTION IF EXISTS ST_AsGeoJson(int4,geography,int4); -- this one changed to use default args

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - maRtin
如果你使用的是Windows系统,你可以使用Windows搜索来尝试查找SQL文件。不过,我会编辑我的回复并添加命令以删除这些函数。 - mlinth
当我以我的主用户运行pgsql时,我看到13行,但由于我不是所有者,它不允许我删除该函数。然而,当我作为postgres用户运行时,只有5行,并且删除命令返回函数不存在。有什么建议吗? - Todd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接