PostgreSql操作geometry

GIS开发对数据的操作,主要是对空间数据的操作。PostgreSql提供了一些处理空间数据的函数,操作起来是比较方便的。下面就记录一下,最近做项目里面用到的一些,也是比较常用的。

空间数据

介绍这些函数之前,先了解一下什么是空间数据。空间数据是指用来表示空间实体的位置、形状、大小及其分布特征诸多方面信息的数据,它可以用来描述来自现实世界的目标,它具有定位、定性、时间和空间关系等特性。空间数据是一种用点、线、面以及实体等基本空间数据结构来表示人们赖以生存的自然世界的数据。简单来说,操作空间数据主要是对点、线、面等基本结构的操作。

地图上的图层有面图层、点图层和线图层之分,就拿一个城市的地图来说,该城市的公园图层就相当于面图层,因为可能需要表示公园有多大;一个城市医院或者银行的分布可以看做是点图层;城市的道路交通可以认为是线图层。

这些空间数据可以在数据库中存储,存储时可以是geometry格式;也可以以文件的形式存储,存储成shape文件。在数据库中存储时,geometry是以十六进制串组成的,表示的是几何形状。shape文件存储时,对应点线面分别由三种类型,point、line、polygon,这是单一的类型,对应联合的类型又有multipoint、multiline、multipolygon,所以说,shape文件存储的是wkt类型的数据。本篇博客暂且把空间数据分为这两种类型:geometry和wkt。

函数操作

在系统中我们用的地图插件是Openlayer,它对地图的操作是操作wkt数据,所以就涉及到geometry和wkt的转换。

st_geomfromtext(wkt,坐标系参数):该方法是把wkt格式数据转换成geometry类型,参数有两个,第一个是wkt类型的数据,第二个是坐标系参数。

st_astext(geometry):该方法是把geometry类型数据转换成wkt格式数据,参数只有一个,是geometry类型的数据。

图层是由各个图斑构成的,如果要在地图上定位某个图斑,就需要获取这个图斑的中心点坐标。

st_centroid(geometry):这个方法是获取这个geometry的中心点,参数是要获取中心点的geometry。

st_x(point):该方法是获取点的x坐标,它操作的对象是一个点。

st_y(point):该方法是获取点的y坐标,它操作的对象也是一个点。

有时我们需要实现两个图斑相交,也可以用函数执行。

st_intersects(geometry,geometry):该方法是实现两个图斑相交,传入的参数是两个图斑的geometry。

跟这个方法类似的还有好多函数,比如判断两个图斑是否相交,返回一个布尔值;或者获取两个图斑相交的geometry和不相交的geometry。

如果要使图斑联合,则需要union函数。

st_union(geometry):如果一个图层表中存储好多图斑,其中有一列名为geom,存储的是各个图斑的geometry,那么st_union(geom)就是将该图层的所有图斑联合成一个,得到的结果就是multi类型的数据。

如果要查看某个图斑方圆多少米之内的情况,就要对该图斑进行缓冲。

st_buffer(geometry,长度):该方法是对某个图斑进行缓冲,传入要缓冲的geometry,在传入缓冲的距离即可。

postgresql数据库经纬度转geometry

1、在postgresql数据库中,如果字段类型是geometry,更新该字段为经纬度(坐标),可以尝试采取以下脚本:

注意:108.658463 代表经度 34.1437代表纬度 中间没有逗号

update table set geom = ST_GeomFromText('POINT(108.658463 34.1437)', 4490) where id = 123

2、一组几何坐标:

注意:此时关键字为 POLYGON

 update building set geom = ST_GeomFromText('POLYGON((121.415703 31.172893,121.415805 31.172664,121.416127 31.172751,121.41603 31.172976,121.415703 31.172893))',4490) where id = 123

3、如果想要看geom的经纬度坐标:

SELECT ST_AsText(geom) FROM table where id = 123

4、获取几何地理图形的中心坐标点

select ST_AsText(ST_Centroid(geometry)) from 

————————————————
版权声明:本文为CSDN博主「灰白色可乐」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fengyao1995/article/details/53730417

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Java 中,PostgreSQL 中的 `geometry` 类型通常被映射为 `PGgeometry` 类型。`PGgeometry` 是由 `org.postgis` 包提供的一个类,它表示 PostGIS 中的几何对象。 要使用 `PGgeometry` 类型,需要在项目中包含 PostGIS 的相关依赖。如果使用 Maven 管理项目,可以在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.postgis</groupId> <artifactId>postgis-jdbc</artifactId> <version>2.5.1</version> </dependency> ``` 使用 `PGgeometry` 类型可以很方便地将 PostgreSQL 中的 `geometry` 类型与 Java 中的数据类型相互转换。例如,假设有一个 `mytable` 表,其中包含一个名为 `geom` 的 `geometry` 列,可以使用以下代码从数据库中检索该列的值: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import org.postgis.PGgeometry; public class GeometryExample { public static void main(String[] args) throws Exception { // Connect to the database String url = "jdbc:postgresql://localhost/mydatabase"; String user = "myusername"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password); // Prepare and execute a SELECT statement String sql = "SELECT geom FROM mytable"; PreparedStatement stmt = conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery(); // Process the results while (rs.next()) { PGgeometry geom = (PGgeometry) rs.getObject("geom"); // Do something with the geometry object // ... } // Clean up rs.close(); stmt.close(); conn.close(); } } ``` 在这个例子中,`rs.getObject("geom")` 方法返回一个 `Object` 类型的对象,需要将其转换为 `PGgeometry` 类型的对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值