将点插入PostGIS?


49

我在无法插入点的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"

Answers:


84

您将SQLWKT(众所周知的文本)混淆了。WKT类似于描述形状的几何语言,但不是SQL,它是查询和操作数据库的语言。在SQL查询中使用WKT时,它必须是text,并且不能与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从数字列更新longlat使用:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);

您能否详细说明一下此功能,“如果您的列具有经度为数字的经度,则可以直接创建POINT几何:ST_SetSRID(ST_MakePoint(long,lat),4326);”现在,我有一个表,其中包含经度和纬度,要使用PostGIS api,我需要点格式。因此想知道如何使用此功能更新点列。感谢Vikram
Vik86

@ Vik86查看最新答案
Mike T

1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.