我在我的数据库中安装了postgis。现在我的数据库中有1个区域((-79.4609576808001,43.9726680183837)) 我希望此区域转换为几何类型。我在谷歌上搜索过,发现St_geomfromText会将文本转换为几何类型。
我的查询如下:
SELECT ST_GeomFromText(region,4326) from "erpAssets";
但是它给出了错误,它表示没有函数匹配st_geomfromtext
答案 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
是什么数据类型,我不认为这一点类型。