云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

企业网站_防御服务器_9元

小七 141 0

企业网站_防御服务器_9元

最近,我参加了Witalij Rudnicki在HANA Spatial上的"代码堵塞"活动,还记得与HANA Spatial一起工作是多么有趣。不久前,我已经建立了一些小的演示应用程序作为对空间的介绍,我决定与社区分享他们。毕竟,共享是关心

所有的代码都可以在GitHub上免费获得:serban petrescu/hana spatial demo。在自述文件中可以找到更详细的设置步骤。在博客的其余部分,我将描述其背后的基本原理,并讨论更有趣的代码片段。

商业故事

让我们想象一个纯粹虚构的故事来支持我们的应用程序:

我们的客户是一家专门从事房屋保险的保险公司。目前,他们所有的数据都在Excel文件中。他们希望将其移动到一个专用系统中,能够将同一区域内的房屋分组在一起。

回顾过去,这种情况可能与实际情况并不遥远。

目标

为了满足客户的需求,我们将执行以下步骤:

从Excel文件(.csv)中获取数据并将其导入HANA。此数据包含:保险单编号(保单的唯一业务密钥)。保单持有人姓名。保险对象的地址。以及保险总额。对房屋地址进行地理编码以获得他们的坐标。构建用于可视化、聚合和集群房屋的应用程序。

技术设置

我们将在HANA试用版MDC上完成所有这些操作,我们将按照"设置试用版SAP HANA MDC实例"SAP开发人员教程中描述的步骤创建。开发本身可以直接在基于Web的工作台上完成。

Google地理编码API是从文本地址获取坐标的一个相当好的工具。要使用它,我们还需要一个API密钥。另外,HANA需要"信任"Google的SSL证书,所以我们需要为它创建一个新的信任存储

数据导入

首先我们需要创建一个CDS实体来存储输入数据:

然后我们可以使用一个表导入文件将数据从CSV移到表本身:

地理编码

正常情况下,我们可以使用HANA的内置功能:地理编码索引和用户定义的地理编码提供者。当我在MDC上编写这些应用程序时,我无法实际更改系统配置以使用自己的提供程序,因此我决定通过XS作业调用我的函数:

粗略地说,下面的代码负责调用Google API:

为了跟踪哪些地址已经被处理,淘客查询,我还添加了一个objectGeocoded标志到CDS实体。

可视化

要在简单的谷歌地图上查看点,我们需要将STïu POINT对象分解为经纬度组件,淘客论坛,并通过OData服务将其公开。

为此,我们可以简单地创建一个简单的CDS视图:

然后将其添加到xsodata服务:

使用一个简单的UI5应用程序,我们得到了一个相当不错的结果观点:

作为奖励,如果我们点击一个观点,我们会得到更多关于它背后的保险单的细节。

数据采集

我们不希望我们的客户总是使用CSV导入。它应该只用于数据的初始"迁移"。

创建新策略时,我们希望帮助客户获得高质量的数据,因此我们构建了一个小UI,数据技术与大数据技术,在创建策略时显示地址的确切位置:

技术上,这个用户界面只是重用了以前已有的地理编码功能。想想自然灾害吧,大数据对比,它们有可能影响到相对较近的大量房屋。对于一家保险公司来说,在同一地区有大量的风险很容易导致灾难。

因为我们不确定客户想要怎样的风险,所以我们构建了三个不同的原型来支持这一点。

第一个原型只是使用谷歌的标记聚类功能。不过,我们并不喜欢它,因为它肯定不会扩展,也不会真正使用HANA的任何东西。另外,我们也不知道每个集群的总保险金额是多少(只是房屋的数量)。

第二个假设用户不需要输入集群的数量,但我们可以决定它。说实话,这个变体之所以存在,是因为在我创建应用程序时,使用计算视图输入参数来代替硬编码的集群计数会导致错误,这使用了内置的KMEANS集群HANA空间特性。

我们也不喜欢这样,因为我们硬编码了集群计数。为了解决计算视图激活错误,我们将代码从视图移动到一个简单的XSJS脚本中(内容基本相同,但集群计数参数化)。最后,我们得到如下结果:

聚合

客户可能还希望手动选择如何将点分组在一起。为了支持这种场景,数据与大数据,我们还创建了两个不同的原型。对于这两个原型,我们希望:

根据某种用户输入将所有点分成两组。显示每组中的点。在这个原型中,我们根据点到用户选择点的距离将点分为两组。如果它们在给定半径和圆心的圆内,则它们在"内"组中,否则它们在"外"。

为了确定这种关系,我们使用下面的查询,该查询使用ST\u距离方法:

同样,我们为聚合值构建一个视图。在这里我们可以考虑这样一个事实,即我们将始终有两个组("内部"和"外部"):

然后我们只需在一个简单的"picker"UI上显示这两组数据:

第二个版本实际上是让用户将区域绘制为多边形。幸运的是,我们可以使用内置的stu CoveredBy谓词来解决这个问题: