【问题标题】:function makepoint postgresql 9.1 error postgis函数 makepoint postgresql 9.1 错误 postgis
【发布时间】:2014-07-26 13:04:49
【问题描述】:

将 postgres 8.4 迁移到 9.1 并将我的项目移动到新服务器我收到此错误

错误:函数 makepoint(unknown, unknown) 不存在第 4 行:distance_sphere(makepoint('14.2995419','41.0310868'),mak... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。

谷歌搜索我发现这可能是 postgis 的问题...... 然后我遵循了本指南 http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS20Ubuntu1204src 和我在服务器上安装了所有东西......

没有任何作用...而且我有发疯的危险... 有谁知道怎么解决!?

【问题讨论】:

  • 可能是ST_distance_sphere?
  • @DrColossos 是对的,ST_MakePoint 也是对的。我认为所有或至少大部分 PostGIS 空间函数都获得了 ST_ 前缀。

标签: postgresql ubuntu ubuntu-12.04 postgresql-9.1 postgis


【解决方案1】:

如前所述,这些函数以前称为“makepoint”和“distance_sphere”,但后来以“ST_”前缀重命名(ST =“空间类型”)。

一个非常简单的解决方案是将legacy.sql 函数添加到您的template_postgis(如果使用)或您的目标数据库中,使用类似:

sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/legacy.sql

【讨论】:

  • 有趣的想法,将解决 OP 的直接问题。根据我的经验,干净升级通常会更好,并且一些功能会在新版本中得到增强。
【解决方案2】:

从错误来看,您似乎将您的观点用引号括起来,因此抱怨未知,未知。 ST_Makepoint 将期望两个双精度数字作为输入。您还应该在所有空间函数前加上 ST_,如 cmets 中所述。

如果您从 psql 提示符运行以下命令:

\df ST_MakePoint

您将看到支持的 3 个版本,分别为 2、3 和 4 维度,均采用双精度。

例如:

select st_distance_sphere(st_makepoint(14.2995419,41.0310868), st_makepoint(15.2995419,40.0310868)) as dist;

返回 139665.10 米

对于物有所值,ST_ 被认为是符合标准的。 Oracle 在其所有空间函数之前使用 ST_,Postgres/Postgis 也是如此,MySQL 同时支持 ST_ 和直接函数名称,并且微软在 SQL Server 2008 中实现空间 sql 时决定完全删除下划线,因此您有 STUnion。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 2012-04-27
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多