我在无法插入点的PostGIS螺母中创建了一个表。

查询出了什么问题?

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中从数字列applong更新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

#2 楼

如果您使用的是Java客户端,那么我的建议是使用二进制类型来传输数据。从内存来看,与ST_AsEWKT方法相比,进行此更改后,性能记录提高了10%。