查询出了什么问题?
CREATE TABLE app (
p_id INTEGER PRIMARY KEY
);
SELECT AddGeometryColumn('app','the_geom','4326','POINT',2);
INSERT INTO app(p_id, the_geom) VALUES(2, POINT(-71.060316, 48.432044));
最后一次查询后它显示了一些错误。.
ERROR: column "the_geom" is of type geometry but expression is of type point
LINE 1: ...SERT INTO app(p_id, the_geom) VALUES(2, POINT(-71....
^
HINT: You will need to rewrite or cast the expression.
********** Error **********
ERROR: column "the_geom" is of type geometry but expression is of type point
SQL state: 42804
Hint: You will need to rewrite or cast the expression.
Character: 53
我已经检查了我的PostGIS版本。
SELECT PostGIS_full_version();
我得到以下输出。.
"POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS"
#1 楼
您将SQL和WKT(知名文本)混淆了。 WKT类似于描述形状的几何语言,但不是SQL,它是查询和操作数据库的语言。在SQL查询中使用WKT时,它必须是文本,并且不能与SQL混合。如果正确格式化WKT(删除“,”)并设置一个SRID。对于此方法,
ST_GeomFromText(wkt, srid)
效果很好:INSERT INTO app(p_id, the_geom)
VALUES(2, ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));
如果列具有经度/纬度的数值,则可以直接创建POINT几何:
ST_SetSRID(ST_MakePoint(long, lat), 4326);
检查手册中的其他几何构造函数。
应@ vik86的要求,可以在表
the_geom
中从数字列app
和long
更新lat
。 q4312079q使用:UPDATE app SET
the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);
评论
您能否详细说明一下此功能,“如果您的列具有经度为数字的经度,则可以直接创建POINT几何:ST_SetSRID(ST_MakePoint(long,lat),4326);”现在,我有一个表,其中包含经度和纬度,要使用PostGIS api,我需要点格式。因此想知道如何使用此功能更新点列。谢谢维克拉姆
– Vik86
2012-12-28 22:51
@ Vik86查看更新的答案
– Mike T
13年1月2日在20:21