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

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

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

 

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

image

 

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

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

 

  1. 定义动态操作事件为“已更改地图”。然后增加一个客户端条件发条件(javascript)捕捉划圈的动作。
    this.data && this.data.changeType === "circle-drawn"

    image

     

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

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

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

 

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

 

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

第四步新建一张交互表(试过经典表,有些问题)。然后表的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的关系说明可以参阅下图:

image

 

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

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

image

posted @ 2026-01-08 14:19  搬砖的徐大爷  阅读(1)  评论(0)    收藏  举报