postgreSQL几何类型geometry的简单操作

创建含有几何类型geometry的表

CREATE TABLE geometries (name varchar, geom geometry);

INSERT INTO geometries VALUES 
	('Point', 'POINT(0 0)'), --插入一个点
	('Linestring','LINESTRING(0 0, 1 1,2 1,2 2)'), --插入一条线段
	('Polygon', 'POLYGON((0 0, 1 0, 1 1,0 1,0 0))'),--插入一个多边形必须首位相接
	('PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10,0 10, 0 0),(1 1, 1 2,2 2,2 1,1 1))'), --中间有个洞的多边形
	('Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0,1 1,0 1, 0 0)))'); --一个点和多边形

线段基本操作

ST_AsText:返回一个WKT text

ST_Length:计算线段长度

ST_StartPoint:返回线段开始的第一个坐标点

ST_EndPoint:返回线段最后一个坐标点

ST_NPoints:返回线坐标个数,只对线有用

---------------------线段基本操作----------------------------------	
SELECT name, ST_AsText(geom) FROM geometries;--ST_AsText 作为text文本输出
SELECT ST_AsText(geom) FROM geometries WHERE name = 'Linestring';--将geometry最为text文档输出
SELECT ST_Length(geom) FROM geometries WHERE name = 'Linestring'; --线的长度
select ST_AsText(ST_StartPoint(geom)) from geometries where name = 'Linestring';--将线串的第一个坐标作为点返回
select ST_AsText(ST_EndPoint(geom)) from geometries where name = 'Linestring';--将线串的第一个坐标作为点返回
select ST_NPoints(geom) from geometries where name = 'Linestring';--返回线坐标个数,只对线有用

多边形简单操作

ST_Area:求多边形面积

ST_NRings:返回多边形中环的数量

ST_Perimeter:返回闭环的长度包括内环

ST_ExteriorRing:以线串的形式返回多边形最外面的环

ST_InteriorRingN:以线串形式返回指定的内部环

---------------------多边形简单操作---------------------------------
SELECT ST_AsText(geom) FROM geometries WHERE name like 'Polygon%';
SELECT ST_Area(geom) FROM geometries where name like 'Polygon%';--求多边形面积
select ST_NRings(geom) from geometries where name like 'Polygon%';--返回多边形中环的数量
select ST_Perimeter(geom) from geometries where name like 'Polygon%';--返回闭环的长度包括内环
select ST_AsText(ST_ExteriorRing(geom)) from geometries where name like 'Polygon%';--以线串的形式返回多边形最外面的环
select ST_AsText(ST_InteriorRingN(geom , 1)) from geometries where name like 'Polygon%';--以线串形式返回指定的内部环

集合,可以存放多种类型的图形

ST_NumGeometries:返回集合个数

ST_GeometryN:返回第2个集合对象

ST_Area:集合面积,是分别计算并相加

ST_Length:返回集合中所有线段组成部分的总长度

---------------------集合,可以存放多种类型的图形-------------------
select name , ST_AsText(geom) from geometries where name = 'Collection';
select name , ST_NumGeometries(geom) from geometries where name = 'Collection';--返回集合个数
select ST_AsText(ST_GeometryN(geom , 2)) from geometries where name = 'Collection';--返回第2个集合对象
select name , ST_Area(geom) from geometries where name = 'Collection';--集合面积,是分别计算并相加
select ST_Length(geom) from geometries where name = 'Collection';--返回集合中所有线段组成部分的总长度

其它函数操作

ST_GeometryType:返回一个几何类型

ST_SRID:返回一个几何类型的SRID值

UpdateGeometrySRID:更新表的几何类型的SRID值

ST_NDims:返回一个几何类型的维数

ST_AsGeoJSON:json格式输出

select ST_GeometryType(geom) from geometries;--返回一个几何类型
--srid,指的是空间引用标识符。
select ST_SRID(geom) from geometries;--返回一个几何类型的SRID值

select UpdateGeometrySRID('geometries','geom',26918);--更新表的几何类型的SRID值
select ST_NDims(geom) from geometries;--返回一个几何类型的维数
select * from geometry_columns;--查看视图中的表属性值


select * from spatial_ref_sys where srtext ~* 'beijing';--查询北京的SRID值

select ST_AsGeoJSON(geom) from geometries where name = 'Collection'; --json格式输出
--{"type":"GeometryCollection",
--	"geometries":[
--					{"type":"Point","coordinates":[2,0]},
--					{"type":"Polygon","coordinates":[[[0,0],[1,0],[1,1],[0,1],[0,0]]]}
--				]
--}
--指定SRID
select 'SRID=4326;point(0 0)'::geometry;
select concat('SRID=4326;',ST_AsText(geom))::geometry from geometries where name = 'Point';

srid,指的是空间引用标识符。
空间引用标识符(SRID)

每个空间实例都有一个空间弓|用标识符(SRID)。SRID 对应于基于特定椭圆体的空间引|用系统,可用于平面球体映射或圆球映射。空间列可包含具有不同SRID的对象。然而,在使用SQL Server空间数据方法对数据执行操作时,仅可使用具有相同SRID的空间实例。从两个空间数据实例派生的任何空间方法的结果仅在这两个实例具有相同的SRID (该SRID基于相同的用于确定实例坐标的度量单位、数据和投影)时才有效。SRID 最常见的度量单位为米或平方米。
 

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 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` 类型的对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值