sde用sql实现erase
来源:互联网 发布:掏粪男孩 知乎 编辑:程序博客网 时间:2024/06/04 19:46
概述:
本文讲述基于Arc SDE forOracle实现erase空间分析计算。
实现流程:
1、叠加计算
判断叠加,非叠加部分即为一部分所要结果,叠加部分进入第二步;
2、合并计算
根据objectid进行union计算;
3、差异计算
用原始数据data1和合并计算后的结果进行差异计算,所得的结果即为另一部分所要结果。
相关sde函数介绍:
1、sde.st_intersection(st_geometryshape1, st_geometry shape2)
语法:
参数:(st_geometry shape1, st_geometryshape2)
返回值:st_geometry shape
解释:
Returns a geometry that represents the shared portion of shape1 andshape2.
示意:
2、sde.st_union(st_geometryshape1, st_geometry shape2)
语法:
参数:(st_geometry shape1, st_geometryshape2)
返回值:st_geometry shape
解释:
Returns a geometry that represents the point set union of theGeometries.
示意:
3、sde.st_difference(st_geometryshape1, st_geometry shape2)
语法:
参数:(st_geometry shape1, st_geometryshape2)
返回值:st_geometry shape
解释:
Returns a geometry thatrepresents that part of geometry A that does not intersect with geometry B.
示意:
说明:
看到图3,很多人就开始问了:erase的效果不就是图3的效果吗,为什么还要那么多步?是的,对于两两的geometry来说,difference结果即为我们想要的erase的结果,但是,对于两个图层来说,difference后的结果是整个data2的结果,并且结果中会有一些叠加与重复。为什么会出现这样的结果呢,我想sde的算法实现中,也是两两做的计算,因此,计算的结果就是整个data2的结果。举例:A为data1的一个要素,B、C分别为data2的两个要素,在sde中,difference计算的结果为图4,1和2分别为计算后的结果,并重叠在一起显示,但是实际中,我们想要的及全国是图5。
实现sql实例:
1、计算叠加
insert intohx2q_risk_result_temp(objid,shape)
select *
from (select a.objectid,sde.st_intersection(a.shape, b.shape) as shape
from hx2q_project a, hx2q_landnormb
where a.ptcode = 'm01'
and b.ptcode = 'm01'
and a.status = '开工'
and b.confirm = '已取得'
and a.flag = 0
and b.flag = 0)
where sde.st_area(shape) > 0
2、计算union
3、计算difference
insert intoHX2Q_RISK_RESULT
(objid, ptcode, Shape, objectid)
select a.objectid,
a.ptcode,
sde.st_difference(a.shape, b.shape) asshape,
SDE.version_user_ddl.NEXT_ROW_ID('HX2Q','36') as objectid
from hx2q_project a, hx2q_risk_result_temp b
where a.objectid = b.objid
4、获取非叠加
insert intoHX2Q_RISK_RESULT
(objid, ptcode, Shape, objectid)
select objectid,
ptcode,
shape,
SDE.version_user_ddl.NEXT_ROW_ID('HX2Q','36')
from hx2q_project
where objectid not in (select distinct objidfrom hx2q_risk_result_temp)
and ptcode = 'm01' and flag = 0 and status = '开工'
说明:
1、difference计算中,where后的条件是必须的;
2、union计算是通过后台程序实现的。
- sde用sql实现erase
- ArcEngine 连接sql server sde
- ArcEngine 连接sql server sde
- ArcEngine 连接Sql Server SDE
- sde
- sde
- sde
- erase
- erase
- erase()
- erase
- erase
- erase
- 用SDE发布地图服务
- [IMX6DL]fastboot erase SD分区实现
- 利用SDE的C API对SQL数据库进行操作
- 在Sql Server 2008上安装SDE 9.3
- 不同机器上安装SDE和SQL Server数据库
- AlertDialog中View中的控件设置监听
- RSA key 的转换
- AlertDialog 普通对话框
- 设计模式六大原则(4)-接口隔离原则
- iOS传输Json数据(纯Json)到服务器
- sde用sql实现erase
- Android 二维码编程
- 黑马程序员—Java基础—IO2
- Javascript面试题
- 第九周项目1 猴子选大王【数组版】
- LeetCode300——Longest Increasing Subsequence
- python合并PDF文件
- iOS开发中JSON文件的加载
- 设计模式六大原则(5)-迪米特法则