GeoMesa变换示例

本教程介绍如何使用GeoTool选择和修改从查询返回的属性。

关于本教程

本着简单的精神,本教程中的代码只做了几件小事:

  1. 演示针对GeoMesa的基本查询

  2. 演示针对GeoMesa的投影查询

  3. 演示针对GeoMesa的转换查询

这些术语可能是模棱两可的,因此我们接下来将对它们进行描述。

背景

GeoMesa允许用户执行 relational projections 在查询结果上。投射是一个过载的术语;当我们在这里使用它时,我们指的是关系意义。虽然投影也可以修改属性的值,但在本教程中,我们将把这样的修改称为转换,以使事情更清晰。

投影和变换具有以下用途和优势:

  1. 子集到指定列-减少返回结果的网络开销

  2. 重命名指定的列-动态更改数据模式

  3. 根据一个或多个原始属性计算新属性-将派生字段添加到结果

在可能的情况下,投影和转换在后端集群中并行应用,从而使它们非常快。它们类似于map-duce作业中的map任务。转换也是可扩展的;开发人员可以实现新功能,并使用 Geotools

备份存储的选择

本教程将使用几个不同的后端。为简单起见,本教程的其余部分将假定使用HBase。或者,您可以使用Acumulo、Cassandra、Redis或GeoMesa文件系统数据存储区。如果不使用HBase,本教程其余部分中的命令将略有不同。

先决条件

在开始之前,您必须具备以下条件:

  • Java JDK 1.8

  • Apache Maven 3.6 or later

  • GitHub客户端

  • 完成GeoMesa快速入门,供您选择后端

警告

本教程将使用您在最初的快速入门中编写的数据,因此请确保您首先完成了该操作。

下载并构建教程

在您的计算机上选择一个合理的目录,然后运行:

$ git clone https://github.com/geomesa/geomesa-tutorials.git
$ cd geomesa-tutorials

警告

确保下载或检出与您的GeoMesa版本对应的教程项目版本。看见 关于教程版本 了解更多详细信息。

要确保本教程适用于您的环境,请修改 pom.xml 为HBase、Hadoop等设置适当的版本。

为了便于使用,该项目构建了一个捆绑的构件,该构件在单个JAR中包含所有必需的依赖项。要构建,请运行:

$ mvn clean install -pl geomesa-tutorials-hbase/geomesa-tutorials-hbase-transforms -am

备注

模块名称将根据后端的选择而有所不同。

运行教程

在命令行上,运行:

$ java -cp geomesa-tutorials-hbase/geomesa-tutorials-hbase-transforms/target/geomesa-tutorials-hbase-transforms-$VERSION.jar \
    org.geomesa.example.hbase.transformations.HBaseQueryTutorial \
    --hbase.zookeepers <zookeepers>                              \
    --hbase.catalog <table>

其中,您可以提供以下参数:

  • <zookeepers> HBase ZooKeeper法定人数。如果您在独立模式下安装了HBase,这将是 localhost 。请注意,对于大多数用例,最好将 hbase-site.xml 从GeoMesa类路径上的集群,而不是指定ZooKeeper。

  • <table> 保存快速入门数据的表的名称

备注

路径、类名和必需的参数将根据后端选择的不同而有所不同。

该代码将使用各种投影和变换来查询GeoMesa,并打印结果。

看《守则》

源代码对于本教程来说是可以访问的。主要逻辑包含在泛型 org.geomesa.example.transformations.GeoMesaQueryTutorialgeomesa-tutorials-common 模块,它与数据存储区无关。一些相关的方法:

  • basicQuery 执行基本筛选器,而不执行任何其他选项。所有属性都在数据集中返回。

  • basicProjectionQuery 执行基本筛选器,但指定要返回的属性子集。

  • basicTransformationQuery 执行基筛选器并转换返回的属性之一。

  • renamedTransformationQuery 执行基本筛选器并转换其中一个属性,并在单独的派生属性中返回它。

  • mutliFieldTransformationQuery 执行基本筛选器并将两个属性转换为单个派生属性。

  • geometricTransformationQuery 执行基本过滤器,并通过缓冲将从点返回的几何体转换为多边形。

列出了其他变换函数 here

Please note that currently not all functions are supported by GeoMesa.

无投影的基本查询

此查询不使用任何投影或转换。请注意,所有属性都在结果中返回。

Query query = new Query(simpleFeatureTypeName, cqlFilter);

具有两个属性的投影的查询

此查询使用投影来仅返回‘Actor1Name’和‘geom’属性。

String[] properties = new String[] { "Actor1Name", "geom" };
Query query = new Query(simpleFeatureTypeName, cqlFilter, properties);

Sample Output

演员1名称

Geom

美国

点(32 49)

使用属性转换进行查询

此查询对‘Actor1Name’属性执行转换,以更方便用户的格式打印它。

String[] properties = new String[] { "geom", "Actor1Name=strCapitalize(Actor1Name)" };
Query query = new Query(simpleFeatureTypeName, cqlFilter, properties);

Sample Output

Geom

演员1名称

积分(30.5167 50.4333)

美国

具有派生属性的查询

此查询基于‘Actor1Name’和‘Actor1Geo_FullName’属性的联接创建一个名为‘Derired’的新属性。例如,这可以用来显示事件的参与者和位置。

String property = "derived=strConcat(Actor1Name,strConcat(' - ',Actor1Geo_FullName))";
String[] properties = new String[] { geom, property };
Query query = new Query(simpleFeatureTypeName, cqlFilter, properties);

Sample Output

Geom

派生的

积分(30.5167 50.4333)

美国-基辅、基辅、米斯托、乌克兰

使用几何变换进行查询

此查询对返回的点执行几何变换,并按固定量对其进行缓冲。例如,这可以用来估计特定事件周围的影响区域。

String[] properties = new String[] { "geom", "derived=buffer(geom, 2)" };
Query query = new Query(simpleFeatureTypeName, cqlFilter, properties);

Sample Output

Geom

派生的

第三点(30.5167-50.4333)

多边形(32.5167-50.4333,32.478270560806465-50.04311935596775,32.36445906502257-49.66793313526982,32.17963922460509-49.3221595339608,31.930913562373096,49.01908643762691,31.627840466039206,48.77036077539491,31.28206686473018,48.58554093497743,30.906868644032256,48.4747172943919354,30.5167,48.4333,30.126519355967744,48.472943954,29.75131333526934943,77.770533960798,78.77036077539498,108246437637660419086462691,30.126519355967744,48.4729439954,29.751333526934943,77.77729.77036077539498,10246437637660419086462691,38.126519355942297744,48.47176843954,29.75133352699882,48.585540934943,77729.770360775739498,102464646376376376604190864626691,33598592292292292292248.4333,48.471729439954,29.7513133352699882,48.585540934943,7777729.770360733975498。28.5167:50.4333、28.55512943919354:50.82348064403226、28.668940934977428:51.198666864730185、28.85376077539491:51.54444046603921、31.102486437626908、51.8475135623731、*29.405559533960798、52.09623922460509、*29.751333135269824、52.281059065022575、:30.126519355967748、52.39487056080647、*30.5167000000004、52.4333、*30.90686800644032263、52.3948705604780646、31.282068630630186、52.1059065022575、31.61.27840640660924509、31.9309562377571.81372375、32.167000000000042263、52.3948705604780646、31.282068630630186、52.1059065022575、31.62784046603921、52.3948705607757551.81372375、32.33090000000032263、52.394870560464680646、31.282068660630186、52.1059069065022575、31.6278406266021、31.930956237757551.81372375、32.31.2770000000000422663、52.3948705604647646、31.282068668630186、52.1059069022575、31.627840466026021、31.930956237757551.8137237306、31.31.277000000000000422263、52.39487056044680646、31.282068660630186、52.1059065022575、31.61.2784046650225(32.5167(50.4333))