如何将几何数据字符串转换为度?

时间:2012-12-03 11:08:26

标签: postgresql geometry postgis

查询SELECT geom FROM myLayer;我在表中得到一个2公里长的字符串,我希望我可以将它转换为弧度值以便稍后处理它们。这是我得到的一个例子:

"01060000000100000001030000000100000005000000000070AC9FB81841000053BF535551410000303295B8184100001A6053555141000060FE8EB818410000670654555141000090399AB8184100004C6854555141000070AC9FB81841000053BF53555141"

2 个答案:

答案 0 :(得分:3)

您所看到的是PostGIS内部存储几何图形的表示。你需要使用类似ST_AsText或ST_ASEWKT的东西(见http://www.postgis.org/docs/ST_AsEWKT.html

所以,对你来说, SELECT ST_ASEWkt(geom) FROM myLayer;

要以弧度为单位,我可能要做的是将其投影到十进制度数据(即WGS84),分别剥离x和y坐标并转换它们(假设这是点几何)。所以,例如: SELECT ST_X(ST_Transform(geom, 4326))*3.14/180, ST_Y(ST_Transform(geom,4326))*3.15/180 FROM myLayer;

希望这有帮助。

答案 1 :(得分:2)

您有投影坐标,并且您想要提供地理(未投影)坐标。我愿意打赌你想要度数而不是弧度,所以一个共同的目标SRID是4326.使用ST_Transform重新投影数据:

SELECT ST_Transform(geom, 4326) AS geom_in_degrees
FROM your_table;

请注意,应为源几何列设置SRID。如果没有,那就有问题。


在进一步的理论说明中,要将度数坐标转换为弧度(我从未见过这个!),您可以将坐标从原点(0,0)缩放π/ 180。这可以使用仿射变换函数或它的助手ST_Scale

来完成
SELECT ST_Scale(
         ST_SetSRID(ST_Transform(geom, 4326), 0),
         pi()/180.0, pi()/180.0) AS geom_in_radians
FROM your_table;;