如何将点文本转换为几何

时间:2014-05-07 05:47:51

标签: postgresql postgis

我在我的数据库中安装了postgis。现在我的数据库中有1个区域((-79.4609576808001,43.9726680183837))  我希望此区域转换为几何类型。我在谷歌上搜索过,发现St_geomfromText会将文本转换为几何类型。

我的查询如下:

SELECT ST_GeomFromText(region,4326) from "erpAssets";

但是它给出了错误,它表示没有函数匹配st_geomfromtext

2 个答案:

答案 0 :(得分:8)

您也可以使用ST_MakePoint,它可能更干净,因为您不必将纬度和经度值连接为文本。将其与ST_SetSrid结合使用可将坐标参考系统设置为4326,例如

Select ST_SetSrid(ST_MakePoint(lon, lat),4326) from sometable;

将返回几何类型。请注意,顺序是lon / lat(x / y),这是造成很多混乱的原因,因为人们在日常讲话中说lat / lon。

当您使用已知文本(WKT)格式的几何图形时,ST_GeomFromText通常更有用,例如

Select ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))', 4326);

如果您的数据实际上是在表格中((-79.4609576808001,43.9726680183837))并且您不想按照我的建议将其拆分,那么使用ST_GeomFromText作为一个点的正确格式是:

Select ST_GeomFromText('POINT(-79.4609576808001 43.9726680183837)', 4326)

其中SRID是可选的,但建议使用。

有关详细信息,请参阅http://en.wikipedia.org/wiki/Well_Known_Text

答案 1 :(得分:0)

看起来ST_GeomFromText期待一个字符串,而不是一个变量。 Is ST_GeomFromText better than providing direct geometry?提到函数是不可变的。

这个问题提供了一种从变量构建字符串的方法。 Insert PostGIS Object (e.g. ST_GeomFromText) from row variables in plpgsql script

所以看起来Chris Traver的解决方案应该适合你:

ST_GeomFromText('POINT(' || row_data.longitude || ' ' || row_data.latitude || 
 ' ' || row_data.altitude || ')', 4326)

所以你只需要访问该点的x和y部分。 ST_X(point)ST_Y(point)将分别返回PostGIS中某个点的x和y坐标,但我不知道region是什么数据类型,我不认为这一点类型。