在商业活动中,信息决定一切。随着企业门户的出现,获取相关信息已经变得象登录一个网站并使用一个口令那样简单。企业门户已经不仅仅是自定义的执行仪表板,而成为一种必不可少的背景,所有最终用户(员工、市民和客户等等)可以通过它立即获得所需的信息,而不必安装特别的软件(除一个标准浏览器外)、使用特定的操作系统和/或设备或者打开多个窗口。
对于位置信息而言同样如此。在先前的一篇文章(“在企业报表中使用位置信息”)中,我指出“位置信息无处不在;可以在各种公司、所有行业,以及几乎世界上每一个机构和部门中找到位置信息。”随着该文章的发表和像 2005 年位置技术与商务智能大会这样场合中对基于位置的智能的推崇,从未如此明显地表明,找出位置数据中的模式(就像它与关系数据共存一样)即使不是必需的,也是越来越重要。现在,管理人员、分析人员和市民都需要了解与位置有关的信息,并且他们希望随时都可以获得这些信息。
现在,我们有能力满足这些需求。随着企业门户逐渐成为所有机构和各行业的标准,找到将不同信息和应用程序集成到所有门户框架中的新方法已经变得非常必要。在某种意义上,门户的确切定义应该是:“一个汇集内容、应用程序和服务的地方”(Laura Ramos,Forrester Research,“门户定义更新:发展成为协作业务平台”,2002 年 12 月 18 日),而不必重新定义或重新开发内容、应用程序和/或服务。
因此,为了能够将内容、应用程序和服务汇集到门户以实现共享,企业门户供应商们已经协助通过了两个以通过 portlet 共享这些内容为中心的新门户标准:用于远程 Portlet 的 OASIS Web 服务 (WSRP) 和 Java 规范请求 168 (JSR 168)。因为这些新标准使得将所有信息和应用程序作为 portlet 进行共享变得很容易,所以将位置加入方程式也就变得容易了 — 如在商务智能 portlet 的旁边构建位置 portlet(地图)。
在本文中,我将讨论如何使用诸如 WSRP 和 JSR 168 等开放标准来开发那些将位置信息与应用程序(如地理地图)合并在一起的 portlet。本文介绍的所有 portlet 代码都可以注册到支持 portlet 标准 WSRP 和 JSR 168 的任何供应商的门户解决方案中。
定义地图
以下示例使用 Oracle 应用服务器 MapViewer (Oracle MapViewer) 和 Oracle JDeveloper 10g 来定义和开发基于 Web 的动态地图。虽然从理论上讲,使用任何基于 Web 的地图制作技术都可以获得同样的效果,但是使用 Oracle MapViewer 会更简单,这是因为它提供 Java 和 XML API 以及一个 JavaServer Page 标记库,所以任何人(从初学的开发人员到较高级的开发人员)都将发现,将地图集成到现有的和新的开发项目中是何等简单(而且功能相当强大)。有关更多信息(包括下载和安装说明),请参见 http://www.oracle.com/technology/products/mapviewer/index.html。
在我的上一篇文章“在企业报表中使用位置信息”中,我讲述了如何使用地图定义工具和/或 Oracle SQL*Plus 为 Oracle MapViewer 定义地图。出于连贯性和简单性考虑,本文使用同一示例(包括 OE 模式中所的示例数据,这些数据最初是在 Oracle 示例:“进行基于位置的分析”建立起来)。
与其他地图呈现工具一样,Oracle MapViewer 使用样式(颜色、标记、线、面积、文本、符号以及高级样式)和主题(有时称为图层)的概念来创建动态地图。这些属性的定义以及实际地图的定义以 XML 格式和位置信息一起存储在数据库中。
要创建属性和/或地图定义,可以对数据库执行标准 SQL 插入/更新操作,如:
SQL> insert into USER_SDO_STYLES values( 'V.PIECHART1', 'ADVANCED', null, '<?xml version="1.0" ?> <AdvancedStyle> <PieChartStyle pieradius="10"> <PieSlice name="A" color="#ffff00" /> <PieSlice name="B" color="#000000" /> <PieSlice name="H" color="#ff00ff" /> <PieSlice name="I" color="#0000ff" /> <PieSlice name="W" color="#ffffff" /> </PieChartStyle> </AdvancedStyle>', null, null);
或者可以使用所提供的地图定义工具(见图 1),它可以为您完成大部分工作。
图 1:地图定义工具 |
Oracle Internet 应用服务器附带的标准 Oracle MapViewer 下载或部署包含一组样式、主题、基本地图和示例代码。对于我们的示例而言,您只需复制一个基本地图、添加两个主题即可。因为您可以使用 SQL 和工具访问数据库中的地图定义,所以复制地图定义的最简单方法就是执行一个 SQL 语句,如下所示。(在执行语句之前,请仔细看看与 Oracle MapViewer 相关的视图 user_sdo_styles、user_sdo_themes 和 user_sdo_maps,以更好地理解它们的工作原理。)
SQL> insert into user_sdo_maps 2 values('WAREHOUSES_AND_CUSTOMERS', 'customers and warehouses', 3 (select definition from user_sdo_maps where name='DENSITY_MAP')); 1 row created. SQL> commit; Commit complete.
现在您就有一个名为 WAREHOUSES_AND_CUSTOMERS 的新基本地图了,您将使用地图定义工具向它添加一些主题。首先,切换到包含 mapdef.jar 的目录,执行以下命令连接到存储着我们地图定义的 Oracle 数据库实例:
java -classpath mapdef.jar;d:\oracle\ora92\jdbc\lib\classes12.jar -Dhost="localhost" -Dsid="orcl" -Dport="1521" oracle.eLocation.console.GeneralManager
接着,创建两个主题,CUSTOMERS 和 WAREHOUSES(见图 2 和图 3)。
图 2:创建 CUSTOMERS 主题 |
图 3:创建 WAREHOUSES 主题 |
在创建 customers 和 warehouses 主题后,将它们添加到我们新的 WAREHOUSES_AND_CUSTOMERS 基本地图中(见图 4)。
图 4:创建 WAREHOUSES_AND_CUSTOMERS 地图定义 |
请注意 Min Scale 元素和 Max Scale 元素,它们用于定义根据请求的缩放级别在给定地图上显示哪些主题。在更新地图定义(通过单击 Update 按钮)后,您可以开始使用它们来构建基于客户请求的动态地图了。测试我们的地图是否可用的一个简单方法就是把这个新地图定义的名称 WAREHOUSES_AND_CUSTOMERS 插入我们的 Oracle MapViewer 演示应用程序中。为此,切换到我们的 Oracle MapViewer 简单地图客户端(Oracle MapViewer URL 上的 mapclient.jsp),输入必要的值(见图 5)。
图 5:演示地图客户端 |
请注意,mapclient.jsp 示例应用程序还会显示向 Oracle MapViewer 服务器发出的执行请求 — 这是任何客户端或开发语言都能够发出的 XML 请求。如果所有的定义和连接值都正确,则会根据请求构建一幅地图(或者是一个指向地图图像的 URL)。
[1] [2] [3] [4] 下一页