APEX开发实践(21):APEX地图进阶开发(二)
今天发APEX地图进阶开发第二弹。这次要实现的功能是,通过在地图上画定区域(圆圈),在交互表中显示区域内的相关数据。
实现的思路是,通过APEX地图自带的Circle功能,获取选定区域的GEO数据作为交互表的查询条件。
第一步:要把地图“圆形工具”属性打开。

第二步:新建一个隐藏的项P3_CIRCLE_GEO,用作中间参数的传递。这里要注意,APEX的项不能存放对象数据(GEOMETRY),只能存放CLOB。所以在传递参数的时候要进行两次数据类型转义,GEOMETRY转CLOB,然后CLOB转GEOMETRY。下面会讲到。
第三步:创建一个动态操作。当启用圆形工具划圈后,把划圈内的GEO数据以CLOB的类型传递给P3_CIRCLE_GEO。并刷新查询表。
-
定义动态操作事件为“已更改地图”。然后增加一个客户端条件发条件(javascript)捕捉划圈的动作。
this.data && this.data.changeType === "circle-drawn"![image]()
-
当条件为“真”时,定义两个动作。
第一个动作:获取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_GEOwhere :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


浙公网安备 33010602011771号