文档章节

利用st_geometry进行图形叠加分析

翻
 
发布于 2016/11/18 17:24
字数 720
阅读 199
收藏 0

首先看一下st_geometry进行图形叠加分析语句:

SELECT T.*
  FROM SOURCETABLE S, TARGETTABLE T
 WHERE (SDE.ST_INTERSECTS(T.SHAPE, S.SHAPE) = 1)
   AND (S.OBJECTID = 18133);


 /*  SDE.ST_INTERSECTS(T.SHAPE, S.SHAPE) = 1
 这里面的参数位置需要注意,目标表shape在前,原表shape在后,这样能加快查询速度
 主要看最后的查询条件(S.OBJECTID = 18133)
 假如这里的条件是(T.OBJECTID = 18133),
 那么就要反过来SDE.ST_INTERSECTS(S.SHAPE, T.SHAPE) = 1
 */

该语句表示的是SOURCETABLE 表中OBEJCTID=18133的图形数据与TARGETTABLE 表中所有的图形数据进行叠加,最终返回的是存在叠加目标表(TARGETTABLE )中的数据的所有字段。

在一般的需求中,叠加分析除了要返回目标表数据的一些字段外通常还要求返回叠加面积、叠加坐标,修改一下对应的sql:

SELECT SDE.ST_AREA(SDE.ST_TRANSFORM(S.SHAPE, 2)) SAREA, --分析图形数据面积
       SDE.ST_ASTEXT(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE, 2),
                                         SDE.ST_TRANSFORM(S.SHAPE, 2))) OVERLAPCOORDS, --叠加坐标
       SDE.ST_AREA(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE, 2),
                                       SDE.ST_TRANSFORM(S.SHAPE, 2))) OVERLAPAREA, --叠加面积
       T.*
  FROM SOURCETABLE S, TARGETTABLE T
 WHERE (SDE.ST_INTERSECTS(T.SHAPE, S.SHAPE) = 1)
   AND (S.OBJECTID = 18133);

上面讲的是两个表之间的叠加,当然可以传入一个WKT对某个表进行叠加分析,再来个sql:

SELECT SDE.ST_AREA(SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))', 2)) SAREA,
       SDE.ST_ASTEXT(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE, 2),
                                         SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))',
                                                         2))) OVERLAPCOORDS,
       SDE.ST_AREA(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(SHAPE, 3),
                                       SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))',
                                                       2))) OVERLAPAREA,
       T.*
  FROM TARGETTABLE T
 WHERE (SDE.ST_INTERSECTS(T.SHAPE,
                          SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))',
                                          2)) = 1);

利用这种语句可以直接传入WKT然后与TARGETTABLE表中的图形进行叠加分析,但是这样的分析有可能是由于sql语句长度的限制导致无法执行。不过在使用程序(例如Java JDBC)执行这种sql语句一般是通过setClob之类的方法来赋值后执行就不会产生sql语句长度的问题,又但是通过setClob来赋值后执行对坐标比较多的图形的时候也会带来程序性能问题。所以这种分析最好通过先将要分析的图形存储到临时图形表中,然后通过两个表叠加进分析。

最后来一个直接通过sql存储一条图形数据的语句

INSERT INTO GEOMETRYTABLE
  (OBJECTID, SHAPE)
VALUES
  (1, SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))', 2));

以上用到的st_geometry函数解释:

ST_GEOMETRY(wkt clob, srid integer):创建一个ST_GEOMETRY对象

ST_INTERSECTS(geometry, geometry):判断两个几何对象是否相交,返回1为相交

ST_TRANSFORM(geometry,srid):将二维 ST_Geometry 数据转换为空间参考 ID (SRID) 所指定的空间参考

ST_AREA(geometry) :面积量测

ST_ASTEXT(geometry) :获取几何对象的WKT,返回的是CLOB

ST_INTERSECTION(geometry, geometry) :获取两个几何对象相交的部分

其中空间参考SRID可以在SDE用户下的ST_SPATIAL_REFERENCES表中找到对应的坐标系。

 

© 著作权归作者所有

共有 人打赏支持
翻

粉丝 3
博文 30
码字总数 11593
作品 0
东莞
私信 提问
利用st_geometry进行图形叠加分析--结合mybatis

在上一遍利用stgeometry进行图形叠加分析文章的基础上,结合mybatis操作stgeometry,主要简单实现一下三个功能:利用st_geometry两个表之间图形表的叠加分析、WKT与图形表的叠加分析、将WKT...

2016/11/21
146
0
基于PostGIS的高级应用(3)--线性参考

一 线性参考干啥用的   如果直接写个“高大上”的定义结果往往是一脸懵逼的,也不知道为什么要定义这么一个概念。其实线性参考技术在我们生活中是非常常见的,比如打开高德,百度地图的App...

会哭的鳄鱼
08/30
0
0
简析服务端通过GT导入SHP至PG的方法

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG库以及发布至geoserv...

李晓晖
2016/11/24
0
0
PostgreSQL+PostGIS 的使用

阅读目录 一、PostGIS中的几何类型 二、 PostGIS中空间信息处理的实现 三、 PostGIS中的常用函数 四、 PostGIS示例 回到顶部 一、PostGIS中的几何类型 PostGIS支持所有OGC规范的“Simple Fe...

技术mix呢
2017/11/07
0
0
Data Lake Analytics的Geospatial分析函数

0. 简介 为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial Consortium’s (OGC) OpenG...

julian.zhou
11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据学习有哪几个步骤

目前大数据行业异常火爆,不少人都对大数据充满了兴趣,其中有大部分人都从没接触过大数据,对于应该如何学习大数据一头雾水。大数据学习并不是高深莫测的,虽然它并没有多简单,但是通过努力...

董黎明
12分钟前
0
0
shell习题_3

1:监控httpd的进程;每隔10s检测一次服务器的httpd的进程数,如果大于500则自动重启httpd服务;并检测是否启动成功; 如果没有正常启动还需要再启动一次,最大不成功数超过五次立即发邮件给管理...

芬野de博客
12分钟前
0
0
Android 9.0 优势探讨

我们来谈论一下 Android。尽管 Android 只是一款内核经过修改的 Linux,但经过多年的发展,Android 开发者们(或许包括正在阅读这篇文章的你)已经为这个平台的演变做出了很多值得称道的贡献...

问题终结者
29分钟前
1
0
vue 组件使用中的一些细节点

细节一 基础例子 运行结果: 以上大家都懂,这边就不多说,回到代码里,有时候我们需要 tbody 里面每一行是一个子组件,那我们代码可以怎么写呢?我们可以这样写,定义一个全局组件,如下: ...

peakedness丶
36分钟前
2
0
vue 之 css module的使用方法

动手之前先配置项目,网上很多文章说需要下载css-loader插件,Vue中的vue-loader已经集成了 CSS Modules,因此删掉也能正常运行 在vue.config.js中添加如下配置 `css: {``loaderOptions: ...

前端小攻略
39分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部