❤️将Postgres几何格式转换为WKT❤️

该文章讨论了如何在Postgres数据库中将存储为特定格式的多边形几何体列转换为Well-Known Text (WKT)格式。通过使用ST_AsText函数,可以将几何列转换为易于读取的WKT表示,从而简化数据操作。示例还展示了如何转换为其他格式,如WKB、GeoJSON、GML和KML。

stackoverflow上看见一篇文章,记录下:❤️原文地址❤️

问题

我有一个Postgres表,它将多边形几何体以特定的格式存储在一列中,类似这样-

0103000020E61000000100000004000000B8627F336B1554405DD602FFA2733A40B8627FA7601554403851F8EBC7723A40B8627FC38F15544036D539E90B733A40B8627F336B1554405DD602FFA2733A40

我知道如何使用 ST_AsText 将这个值转换为WKT,这将得到多边形(Lat Long)。但我想把整列转换成WKT格式。

如何做到这一点?

谢谢!

回答
你试过这个吗?

SELECT ST_AsText(your_geom_column) FROM your_table

在下面的示例中,我将向您展示几种序列化几何图形的方法—两个点编码为4326(WGS84)的数据示例:

CREATE TEMPORARY TABLE tmp (geom GEOMETRY);
INSERT INTO tmp VALUES ('SRID=4326;POINT (1 2)'),
                       ('SRID=4326;POINT (2 4)');

几何图形为 WKB (默认):

SELECT geom FROM tmp;

                        geom                        
----------------------------------------------------
 0101000020E6100000000000000000F03F0000000000000040
 0101000020E610000000000000000000400000000000001040

几何图形如 WKT 和 EWKT (带空间参考系的WKT):

SELECT ST_AsText(geom),ST_AsEWKT(geom) FROM tmp;

 st_astext  |      st_asewkt       
------------+----------------------
 POINT(1 2) | SRID=4326;POINT(1 2)
 POINT(2 4) | SRID=4326;POINT(2 4)

如果你喜欢的话。。

GeoJSON

SELECT ST_AsGeoJSON(geom) FROM tmp;
             st_asgeojson             
--------------------------------------
 {"type":"Point","coordinates":[1,2]}
 {"type":"Point","coordinates":[2,4]}

… 甚至

GML

SELECT ST_AsGML(geom) FROM tmp;
                                     st_asgml                                      
-----------------------------------------------------------------------------------
 <gml:Point srsName="EPSG:4326"><gml:coordinates>1,2</gml:coordinates></gml:Point>
 <gml:Point srsName="EPSG:4326"><gml:coordinates>2,4</gml:coordinates></gml:Point>

… 谷歌地球的爱好者也有他们的乐趣!几何图形如

KML

SELECT ST_AsKML(geom) FROM tmp;

                   st_askml                    
-----------------------------------------------
 <Point><coordinates>1,2</coordinates></Point>
 <Point><coordinates>2,4</coordinates></Point>

❤️原文地址❤️

PostgreSQL 中处理地理空间数据通常会涉及到将经纬度换为几何对象,比如点、线或面,以便于进行空间分析。Shapefile是一种常见的用于存储地理空间数据的文件格式,但它是基于一种叫做 Well-Known Text (WKT) 或者 Well-Known Binary (WKB) 的标准来表示几何。 如果你想从 PostgreSQL 的经纬度数据(通常是 `POINT` 或 `GEOMETRY` 类型)换为 Shapefile,你需要执行以下步骤: 1. **查询数据**:首先,从数据库中提取含有经纬度信息的表或列。例如,假设有一个名为 `locations` 的表,其中有一个字段 `geom` 存储经纬度坐标。 ```sql SELECT * FROM locations WHERE geom IS NOT NULL; ``` 2. **换到 WKT/WKB**:利用 PostGISPostgreSQL 的内置地理空间扩展)函数,可以将几何对象换为 WKTWKB 格式。如将 `POINT` 换为 WKT: ```sql SELECT ST_AsText(geom) AS wkt geometry_column FROM locations; ``` 3. **导出到 Shapefile**:创建一个临时表或视图,包含换后的 WKT 数据,然后使用 `ST_GeoJSON_to_shapefile()` 函数将数据导出为 Shapefile。请注意这个函数不是官方提供的,可能需要自定义脚本或者第三方工具(如 ogr2ogr 或 shp2pgsql)。 ```sql CREATE TEMPORARY TABLE temp_shapefile ( id serial PRIMARY KEY, wkt geometry(Geometry, 4326) -- 使用适当的投影 ); INSERT INTO temp_shapefile (wkt) SELECT ST_SetSRID(ST_MakePoint(longitude, latitude), 4326) FROM locations; -- 这里只是一个示例,实际操作可能需要用到ogr2ogr或其他工具 COPY (SELECT ST_AsBinary(wkt) FROM temp_shapefile) TO '/path/to/output.shp' WITH CSV HEADER; ``` 4. **清理临时表**:导出完成后,记得删除临时表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值