Make Query Layer在Model Builder中的使用

前两天碰到一个关于在 Model Builder 中使用 Make Query Layer 工具的问题,“如何把Make Query Layer结果输入到下一个工具中?”

TIPS: 什么是 Query Layer?

在ArcMap中,我们可以通过定义SQL语句创建Query Layer,来查询存储在DBMS中的空间数据或者非空间数据。 每次在ArcMap中显示或使用Query Layer时,都会执行查询,因此无需生成数据的副本或快照便可显示最新的信息,这尤其适用于处理频繁更改的动态信息。 Query Layer功能适用于 ArcGIS支持的所有DBMS。
~ 详请点这里看 帮助

下面通过一个实例先来说明下Query Layer的使用场景。

为了阐述方便,我找了一份数据稍作修改来模拟这个问题,数据位于基于Oracle的ArcSDE数据库,一个空间数据为点要素类,一个非空间表。

点数据表示事件,每发生一次事件(例如报警电话)就记录一个点,假设理想情况下同一个地址的事件都是重合点,如下图高亮的记录; 非空间表中记录了各个地址的某项分值(例如警力配备得分)。

打开脑洞,假设你是警察局长,需求是,获取每个有完整信息的地址(例如,点位于路的左侧或右侧的信息)的报警电话数,并对比警力配备分值,用于后续的工作,例如指挥调配或者空间统计工作等等。这时,使用Query Layer是个好选择。


Query Layer 返回的记录集可以是包含空间信息的 Feature Query Layer ,也可以是非空间信息的 StandAlone Table。 那么,其实在回到文章开头的问题,“如何把Make Query Layer结果输入到下一个工具中?” 这取决于“下一个工具” 接受的输入数据的类型是什么。


假如后续工作中需要用到空间数据,例如进行热点分析,评估下犯罪高发区,那么就需要查询SHAPE空间字段。 如果忽略了空间字段,普通的非空间表是没办法将记录集传递给后续空间处理的工具的。

Make Feature Layer 中的 SQL语句:

select  c.SHAPE,
        c.ADDRESS,
        count(c.ADDRESS) as CallNum, 
        min(s.SCORE) as MinScore, 
        c.POINT_X, 
        c.POINT_Y
from SDE.kikita_Calls c 

left join SDE.kikita_ScoreTable s 
on c.ADDRESS=s.ADDRESS

where c.AV_SIDE in ('R','L')

group by c.SHAPE,c.ADDRESS,c.POINT_X, c.POINT_Y
order by CallNum DESC


附一张结果图:


Also available Here .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值