如何在PG :: prepare中使用ST_GeomFromText? (红宝石)

时间:2013-09-08 06:34:54

标签: sql ruby postgresql pg

我遇到与PG::prepareST_GeomFromTextPOINT相关的语法时遇到问题。

这有效:

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText('POINT(0 0)', 4326), $1 )%

conn.prepare('statement1', sql)

工作:

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText('POINT($1 $2)', 4326), $3 )%

conn.prepare('statement1', sql)

错误:

in `prepare': ERROR:  could not determine data type of parameter $1 (PG::IndeterminateDatatype)

1 个答案:

答案 0 :(得分:2)

而不是:

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText('POINT($1 $2)', 4326), $3 )%
conn.prepare('statement1', sql)

试试这个:

sql = %Q%insert into #{table_name} (latlong, place_name) values (ST_GeomFromText($1, 4326))%
conn.prepare('statement1', sql)

在此示例中,POINT(long lat)字符串表示为单个值$1

CONN.exec_prepared( 'statement1', [ "POINT(long lat)", foobar ]

当PostGIS尝试解析您的上述语句时会发生整个问题,它会尝试使用$1 $2创建一个几何不起作用的几何体,并为您提供您现在熟悉的错误。而是在准备好语句后将WKT(众所周知的文本)POINT(long lat)作为单个值传递。