使用postgis数据库进行多边形裁切线
背景:有一份polyline的基础数据,有一个多边形,求出多边形内的所有polyline
PostGIS参考手册: http://postgis.net/docs/reference.html
1、polyline数据表、qgis可视化


2、polygon数据表、qgis可视化


3、使用ST_Covers,求出所有完全包含在面内的线,有一部分线是被多边形穿过了,此部分线是没有在covers里的

SELECT f.geom FROM "freeway" f LEFT JOIN area r ON 1 = 1 WHERE ST_Covers (r.geom, f.geom) = 't'

4、获取多边形边界(ST_Boundary)和polyline的相交的线(ST_Intersects),并用边界分割(ST_Split)这些线,此时结果为GEOMETRYCOLLECTION,需要提取(ST_Dump)几何图形组件的集合(GEOMETRYCOLLECTION)中的图形,涉及到的函数如下:
ST_Boundary(geometry geomA)
ST_Intersects(geometry geomA , geometry geomB )
ST_Split(geometry input , geometry blade)
ST_Dump(geometry geom)
SELECT
(ST_Dump (ST_Split (l.geom, ST_Boundary (rr.geom)))).geom
FROM
(
SELECT
f.geom
FROM
"freeway" f
LEFT JOIN area r ON 1 = 1
WHERE
ST_Intersects (ST_Boundary (r.geom), f.geom) = 't') l
LEFT JOIN area rr ON 1 =1

5、第4步骤分割完成后,一部分线在面内,一部分线在面外,此时:
面内的线与面还有交点,所以ST_Covers不可用
面外的线与面还有交点,所以ST_Intersects不可用
思路为:判断所有线的中心点,中心点在面内,则线段被面完全包含
SELECT f.geom FROM res_3 f LEFT JOIN area r ON 1 = 1 WHERE
ST_Covers (r.geom, ST_Centroid (f.geom)) = 't';

6、把1的查询结果和5的结果union一下,最终结果如下

使用postgis数据库进行多边形裁切线的更多相关文章
- 在IDEA中已经配置postgis数据库驱动并且能在Java类中连接数据库,但在servlet中无法连接数据库且导致Tomcat自动断开连接的解决方案
最近在IDEA中用JDBC连接PostgreSQL数据库时遇到了这样一个奇怪的事情: 从PostgreSQL JDBC Driver官网下载好JDBC驱动之后,在IDEA的Project Struct ...
- GeoServer 发布PostGIS数据库中的栅格数据
1.导入栅格数据 进入PostgreSQL\bin目录,利用raster2pgsql工具导入栅格数据,具体命令如下所示: <!-- 分块,切片存储到PostGIS数据库中 --> rast ...
- postgis数据库文件shapefile导入 dbf file (.dbf) can not be opened.shapefile import failed.
Destination: public.train_polylineSource File: C:\Documents and Settings\Administrator\桌面\ffffff\tra ...
- PostgreSQL数据库的安装与PostGIS的安装(转)
原文:http://lovewinner.iteye.com/blog/1490915 安装postgresql sudo apt-get install postgresql-9.1 postgre ...
- 基于Arcgis Engine 10.2(C#)+PostgreSQL 11(Postgis 3)+pgRouting 3.0实现使用数据库进行路径规划
前言:最近在(被迫)使用ArcGIS Engine10.2(.NET平台)进行二次开发(桌面应用),因为想做一个最短路径查询的功能,而arcgis的网络分析又比较麻烦,于是想到了使用Postgis.但 ...
- PostgreSQL+PostGIS的使用 函数清单
一. PostgreSQL与PostGIS的关系 PostgreSQL 是世界上技术最先进的开源数据库,其前身是1977年一个源于Berkeley名为Ingres的非关系型数据库,其项目领导人为Mic ...
- PostgreSQL+PostGIS 的使用
一.PostGIS中的几何类型 PostGIS支持所有OGC规范的“Simple Features”类型,同时在此基础上扩展了对3DZ.3DM.4D坐标的支持. 1. OGC的WKB和WKT格式 OG ...
- PostGIS导入导出SHP文件常用命令
SHP导入POSTGIS数据库 引用 直接导入数据库 shp2pgsql -I -s 2437 -W GBK shop_point.shp public.ntable | psql -U postg ...
- PostGIS ShapeFile 导入数据
系统环境:WIN10 相关软件:PostgresSQL+PostGIS+QGIS 1.添加postGIS数据扩展 (1).打开PostgresSQL 客户端pgAdmin,在需要导入shp数据的数据库 ...
- [zz] 安装PostGIS(Linux篇)
0.安装PostgreSQL数据库 参考安装PostgreSQL数据库(Linux篇). 1.安装proj4 #tar zxvf proj-4.8.0.tar.gz#cd proj-4.8.0#./c ...
随机推荐
- 题解:洛谷P3745 期末考试(整数三分)
题解:洛谷P3745 期末考试(整数三分) 题目传送门 题目大意:给出 \(n\) 个同学期望出成绩的时间限制 \(a_i\) 和 \(m\) 个学科公布成绩的初始时间 \(t_i\) ,1个同学每多 ...
- html换行的方法
1.使用<br> 1 <html> 2 <body> 3 <p> 4 春眠不觉晓,<br />处处闻啼鸟.<br />夜来风雨声 ...
- Python之JSON用法解析
前景 Python编写HDFS服务安装的过程中,需要将构建好的JSON对象输出到文件,采用那种方式更便捷 方案1 open 函数 def writeExecCmdCheckActionsFile(se ...
- 命运的X
命运的X cjx 生成函数强. 思路 首先,设 \(f_i\) 为添加第 \(i\) 项后满足条件的概率,\(g_i\) 任意添加至第 \(i\) 项的概率. 我们要求的答案: \[ans=\sum_ ...
- Python脚本消费多个Kafka topic
在Python中消费多个Kafka topic,可以使用kafka-python库,这是一个流行的Kafka客户端库.以下是一个详细的代码示例,展示如何创建一个Kafka消费者,并同时消费多个Kafk ...
- VAE变分自编码器Keras实现
变分自编码器(variational autoencoder, VAE)是一种生成模型,训练模型分为编码器和解码器两部分. 编码器将输入样本映射为某个低维分布,这个低维分布通常是不同维度之间相互独立的 ...
- 利用 Java 实现组合式解析器
Ward Cunningham 曾经说过,干净的代码清晰地表达了代码编写者所想要表达的东西,而优美的代码则更进一步,优美的代码看起来就像是专门为了要解决的问题而存在的.在本文中,我们将展示一个组合式解 ...
- 五、FreeRTOS学习笔记-任务创建和删除(动态方式)
1任务控制块:保存任务的一些信息 (STM32的栈是由告高地址向低地址延伸的,由上向下生长) (STM32的堆是由告低地址向高地址延伸的,由下向上生长) 第一步申请内存 如下如所示步骤找到xTaskC ...
- vue之slot和slot-scope
插槽分两类,默认插槽和具名插槽:通俗理解就是默认插槽是没有名称的插槽,具名插槽是有名称的插槽. 何时使用插槽?简单的举个栗子:有2个组件,父组件father,子组件son. 父组件 father &l ...
- MySQL 8.0 为什么会放弃查询缓存?
什么是查询缓存? 查询缓存就是将一次查询结果存储在内存中,假如下一次查询结果在内存中,就直接在内存中读取. 设计初衷 当然是提高性能,通过缓存来减少解析器.优化器.存储引擎的执行时间. MySQL查询 ...