暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

APEX开发实践(十二):APEX地图进阶开发(二)

852

今天发APEX地图进阶开发第二弹。这次要实现的功能是,通过在地图上画定区域(圆圈),在交互表中显示区域内的相关数据。实现的效果如下(留意右边的表):



实现的思路是,通过APEX地图自带的Circle功能,获取选定区域的GEO数据作为交互表的查询条件。


第一步:要把地图“圆形工具”属性打开。



第二步:新建一个隐藏的项P3_CIRCLE_GEO,用作中间参数的传递。这里要注意,APEX的项不能存放对象数据(GEOMETRY),只能存放CLOB。所以在传递参数的时候要进行两次数据类型转义,GEOMETRY转CLOB,然后CLOB转GEOMETRY。下面会讲到。


第三步:创建一个动态操作。当启用圆形工具划圈后,把划圈内的GEO数据以CLOB的类型传递给P3_CIRCLE_GEO。并刷新查询表。


1,定义动态操作事件为“已更改地图”。然后增加一个客户端条件发条件(javascript)捕捉划圈的动作。


this.data && this.data.changeType === "circle-drawn"




2,当条件为“真”时,定义两个动作。

第一个动作:获取GEO数据并以CLOB的类型传给P3_CIRCLE_GEO。javascript如下:


( this.data.circle ? JSON.stringify( this.data.circle.data.geometry ) : "" )


其中json.stringify( )完成数据转义。



第二个动作:刷新查询表 (这步太过简单,所以无文字,无截屏)。


第四步:新建一张交互表(试过经典表,有些问题)。然后表的SQL查询如下:


select ID, NAME, GDP, POP, SPATIAL_point_GEO from SHANGHAI_GEO
where :P3_CIRCLE_GEO is null  or 

sdo_inside (spatial_point_geo, sdo_util.from_geojson(:P3_CIRCLE_GEO)) = 'TRUE'
order by GDP desc


这里有两个函数稍微说一下:

sdo_inside(geo1,geo2):geo1区域落在geo2区域内

sdo_util.from_geojson( ):CLOB类型转GEOMETRY


GEOMETRY的关系说明可以参阅下图:




具体的函数使用方法,请参阅下文:

https://docs.oracle.com/en/database/oracle/oracle-database/21/spatl/spatial-operators-reference.htm



四步完成之后,就能够实现本文开头视频里的操作。是不是很简单?


猛戳下面链接,可以体验一下连续三弹的APEX地图开发的效果。如想索取APEX工作区的用户名和密码,查看具体设置和代码,请在APEX中文社区微信群@徐大爷。


https://apex.oracle.com/pls/apex/xxu/r/%E5%9C%B0%E5%9B%BE%E6%B5%8B%E8%AF%95%E6%A1%88%E4%BE%8B/3?session=9242633920811


=====   End   =====


更多Oracle APEX的知识和技巧,请猛戳下面二维码持续关注微信公众号“APEX中文社区”和“徐大爷的学习笔记”。


APEX中文社区


徐大爷的学习笔记





文章转载自徐大爷的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论