博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用st_geometry进行图形叠加分析
阅读量:5818 次
发布时间:2019-06-18

本文共 2571 字,大约阅读时间需要 8 分钟。

hot3.png

首先看一下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表中找到对应的坐标系。

 

转载于:https://my.oschina.net/u/351612/blog/790486

你可能感兴趣的文章
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
vSphere 6将于2月2日全球同步发表
查看>>
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
IntPtr 转 string
查看>>
学生名单
查看>>
(转) 多模态机器翻译
查看>>