将点插入PostGis启用的Postgres数据库

时间:2014-02-19 17:25:03

标签: php postgresql pdo postgis

我有这个(非工作)查询:

"INSERT INTO notes (
         lat, 
         lng, 
         point)
      VALUES (
         :lat,
         :lng,
         ST_GeometryFromText('POINT(:lat :lng)'))"

我正在反对这张桌子:

CREATE TABLE notes
(
  id serial NOT NULL,
  lat real NOT NULL,
  lng real NOT NULL,
  point point NOT NULL,
  CONSTRAINT notes_pkey PRIMARY KEY (id )
)

查询是用PDO(php)编写的,但这不是我想的。我得到的结果是一个例外,声称:

SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "point" is of type point but expression is of type geometry
LINE 8:          $8, $9, $10, $11, $12, ST_GeometryFromText('POINT(:...
                                        ^
HINT:  You will need to rewrite or cast the expression.

如何根据建议投射表达式?

2 个答案:

答案 0 :(得分:1)

看起来您使用的是标准Postgres类型point

"INSERT INTO notes (lat, lng, point)
 VALUES (:lat, :lng, '(:lat, :lng)'::point)"

您可能希望在表格中使用PostGis类型geometry

答案 1 :(得分:0)

目前尚不清楚是否要使用PostgreSQL的point类型或PostGIS的geometry类型。如果是后者,this answer should help out