PostGIS地理查询返回字符串值

时间:2014-07-04 19:42:31

标签: postgresql postgis

我有一个奇怪的问题。我的应用程序上的lonlat列在开发服务器上运行良好 - 它的输出采用POINT(X Y)的形式。但是当我将数据移动到生产服务器时,输出很奇怪!

ActionView :: Template :: Error(未定义方法`lon'代表“0101000020E6100000541B9C887E7A52C02920ED7F80614440”:字符串):

使用SRID:4326编码的lonlat值将被读取为字符串。我几乎可以肯定,在将数据从开发迁移到生产期间,数据存在损坏,因为在迁移之前这不是问题。

有谁知道数据库架构或列可能导致此问题?

3 个答案:

答案 0 :(得分:0)

几何字段将其数据存储为WKB。要查看WKT表示,您需要将查询更改为

select ST_Astext(the_geom) as geometry from table

但是,我不知道为什么在开发中你在WKB二进制数据和WKT字符串之间有某种隐式转换。 ¿你使用的是什么版本的postgres和postgis?

您的应用服务器中有哪些内容?

你正在使用ActiveRecord吗?

答案 1 :(得分:0)

我建议您尝试类似

的内容
float ST_X(geometry a_point);

确保您可以正确读取数据并确定数据字段或其他地方是否存在问题。

如果确定问题与几何列有关,我也会尝试在一个步骤中执行pg_dump

您可以将pg_dump与选项

一起使用
--exclude-table-data=reg_expresion_ _tablename_  
--exclude-table-data=schema.reg_expresion_ _tablename_

这将带来所有架构定义,但排除表数据并仅带来您需要的表中的数据。

答案 2 :(得分:0)

事实证明,当我杀死与服务器的连接以迁移数据时,Rails在重新连接时没有设置架构搜索路径(意味着没有发现postgis扩展)。我不得不重新启动服务器来解决这个问题。