写BUG的派大星

Patrick Star

  • 首页
  • 归档

  • 搜索
设计模式 Gis Kafka Druid 微信小程序 Java 开源项目源码 物体识别 机器学习 Mybatis 微服务 Feign OpenVPN CSS Streamsets CDH SpringCloud SpringBoot maven 分布式 Shell Tree Linux js WebSocket 多线程 集群 Hadoop 大数据 JDK ElasticSearch MySQL 数据库 Redis Http Nginx

PostGis常用空间函数

发表于 2020-12-24 | 分类于 数据库 | 0 | 阅读次数 552

WKT

WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定

WKT对象格式

  1. POINT(0 0) ——点
  2. LINESTRING(0 0,1 1,1 2)——线
  3. POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) ——面
  4. MULTIPOINT(0 0,1 2) ——多点
  5. MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) ——多线
  6. MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) ——多面
  7. GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4))) ——几何集合

WKT相关函数

st_astext(geometry) Geometry转为WKT字符串

保存在数据库中的空间信息相关字段是Geometry类型,如果直接查看的话,会是

0106000020E61000000100000001030000000100000005000000AC071B8ADAE85A409847702325DD41406414E638D5E85A4028CAE37824DD4140C83AFA04D5E85A409806BE6F2ADD41406CED5B52DAE85A40B021BD1D2BDD4140AC071B8ADAE85A409847702325DD4140

这样的字符串。

若这个字段叫geom,则使用select st_astext(geom) from table_name;将Geometry转为WKT字符串进行查询

image-20201224143938712

st_geomfromtext(string,int) WKT字符串转为Geometry

第二个参数是可选的,代表SRID。

如

insert into table_name(geom) values(st_geomfromtext('POLYGON((107.354261 35.563713,107.354261 35.873718,107.914218 35.873718,107.914218 35.563713,107.354261 35.563713))', 4326))

在空间数据库的上下文中,用来描述几何的定义空间被称为空间参照系(Spatial Reference System,简称 SRS)。空间参照系至少定义以下内容:

  • 基础坐标系的测量单位(度、米等)
  • 最大坐标值和最小坐标值(也称为边界)
  • 缺省线性测量单位
  • 数据是平面数据还是椭球体数据
  • 用于将数据转换为其它 SRS 的投影信息

每个空间参照系均有一个标识符,称为空间参照标识符(Spatial Reference Identifier,简称 SRID)。当 执行操作时(如确定一个几何是否与另一个几何相接触),将使用 SRID 查找空间参照系定义,以确保正确执行对空间参照系的计算。

因此个人感觉可以简单理解为坐标系。

SRID空间参照系
0缺省值,代表二维坐标系
4326WGS84 提供的地球球体坐标系
1000004326WGS84 提供的平面坐标系

st_contains(geomtry, geomtry) 判断包含关系

如果后面的图形在前面的图形内部,返回1,否则返回0

如

select id, name from table_name where st_contains(st_geomfromtext('POLYGON((107.354261 35.563713,107.354261 35.873718,107.914218 35.873718,107.914218 35.563713,107.354261 35.563713))', 4326),geom)

st_x(geometry)、st_y(geometry) 仅返回Geometry的x/y坐标

如select st_x(geom) from table_name

st_point(double,double) 构建一个点

如st_point(1,1)

其他函数

  1. 获取线/面对象四至 st_xmin(geom)、st_ymin(geom)、st_xmax(geom)、st_ymax(geom)
  2. 计算两点之间距离 st_distance(geom,geom) / st_distance(wkt,wkt)
  3. 计算线的长度 st_length(geom) / st_length(wkt)
  4. 计算面积 st_area(geom) / st_area(wkt)
  5. 缓冲区计算 st_buffer(geom,distance) / st_buffer(wkt,distance)
  • 本文作者: Patrick
  • 本文链接: https://www.write1bug.cn/archives/postgis常用空间函数
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 设计模式 # Gis # Kafka # Druid # 微信小程序 # Java # 开源项目源码 # 物体识别 # 机器学习 # Mybatis # 微服务 # Feign # OpenVPN # CSS # Streamsets # CDH # SpringCloud # SpringBoot # maven # 分布式 # Shell # Tree # Linux # js # WebSocket # 多线程 # 集群 # Hadoop # 大数据 # JDK # ElasticSearch # MySQL # 数据库 # Redis # Http # Nginx
Java中通过druid修改sql中表名、别名
SpringBoot Admin接入
  • 文章目录
  • 站点概览
Patrick

Patrick

不是在改BUG,就是在写BUG。

52 日志
9 分类
36 标签
RSS
E-mail
Creative Commons
© 2018 — 2023 Patrick
人生如逆旅|我亦是行人
鲁ICP备18043140号-1