GeoMesa Cassandra快速入门

本教程是使用Cassandra开始使用GeoMesa的最快、最简单的方法。它是通向其他教程的一个很好的垫脚石,这些教程提供了如何使用GeoMesa的越来越复杂的示例。

关于本教程

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

  1. 建立新的(静态)SimpleFeatureType

  2. 准备Cassandra表以存储此类数据

  3. 创建数千个SimpleFeature示例

  4. 将这些SimpleFeature写入Cassandra

  5. 查询给定的地理矩形、时间范围和属性过滤器,写出结果集中的条目

  6. 使用Geoserver可视化数据(可选)

先决条件

在开始之前,您必须安装并配置以下软件:

  • Java JDK 1.8

  • Apache Maven 3.6 or later

  • GitHub客户端

  • 一辆卡桑德拉 3 实例,单机版或集群版

  • 同时拥有CREATE-TABLE和WRITE权限的Cassandra用户(独立实例无需)

创建Cassandra命名空间

您需要在Cassandra中有一个名称空间来包含教程表格。执行此操作的最简单方法是使用 cqlsh 随Cassandra发行版提供的工具。开始 cqlsh ,然后键入:

cqlsh>  CREATE KEYSPACE geomesa WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor' : 3};

这将创建一个名为“geomesa”的密钥空间。这是Cassandra内部的顶级名称空间,它将为GeoMesa提供一个放置其所有数据的地方,包括空间要素数据和相关元数据。

下载并构建教程

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

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

警告

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

若要确保快速入门适用于您的环境,请修改 pom.xml 为Cassandra等设置适当的版本。

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

$ mvn clean install -pl geomesa-tutorials-cassandra/geomesa-tutorials-cassandra-quickstart -am

运行教程

在命令行上,运行:

$ java -cp geomesa-tutorials-cassandra/geomesa-tutorials-cassandra-quickstart/target/geomesa-tutorials-cassandra-quickstart-$VERSION.jar \
    org.geomesa.example.cassandra.CassandraQuickStart \
    --cassandra.contact.point <host:port>             \
    --cassandra.keyspace <keyspace>                   \
    --cassandra.catalog <table>                       \
    --cassandra.username <user>                       \
    --cassandra.password <password>

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

  • <host:port> the hostname and port your Cassandra instance is running on. For Cassandra standalone this will be localhost:9042. More information on how to find your connection is available here

  • <keyspace> keyspace your table will be put into. If you followed the instructions above, this will be geomesa. More information on how to setup keyspaces is available here

  • <table> 将接受这些测试记录的目标表的名称。此表不应存在或应为空

  • <user> 有权创建、读取和写入表的Cassandra用户的名称

  • <password> (可选)前述Cassandra用户的密码

或者,您也可以指定快速入门在完成时删除其数据。使用 --cleanup 标志,当您运行以启用此行为时。

运行后,您应该会看到以下输出:

Loading datastore

Creating schema: GLOBALEVENTID:String,Actor1Name:String,Actor1CountryCode:String,Actor2Name:String,Actor2CountryCode:String,EventCode:String,NumMentions:Integer,NumSources:Integer,NumArticles:Integer,ActionGeo_Type:Integer,ActionGeo_FullName:String,ActionGeo_CountryCode:String,dtg:Date,geom:Point

Generating test data

Writing test data
Wrote 2356 features

Running test queries
Running query BBOX(geom, -120.0,30.0,-75.0,55.0) AND dtg DURING 2017-12-31T00:00:00+00:00/2018-01-02T00:00:00+00:00
01 719024896=719024896|UNITED STATES|USA|SENATE||042|2|1|2|2|Texas, United States|US|2017-12-31T00:00:00.000Z|POINT (-97.6475 31.106)
02 719024888=719024888|SENATE||UNITED STATES|USA|043|2|1|2|2|Texas, United States|US|2017-12-31T00:00:00.000Z|POINT (-97.6475 31.106)
03 719024892=719024892|UNITED STATES|USA|DEPUTY||010|4|1|4|3|Abbeville, South Carolina, United States|US|2017-12-31T00:00:00.000Z|POINT (-82.379 34.1782)
04 719024891=719024891|UNITED STATES|USA|||010|2|1|2|3|Ninety Six, South Carolina, United States|US|2017-12-31T00:00:00.000Z|POINT (-82.024 34.1751)
05 719024894=719024894|UNITED STATES|USA|DEPUTY||010|2|1|2|3|Abbeville County, South Carolina, United States|US|2017-12-31T00:00:00.000Z|POINT (-82.4665 34.2334)
06 719024887=719024887|DEPUTY||||010|4|1|4|3|Abbeville County, South Carolina, United States|US|2017-12-31T00:00:00.000Z|POINT (-82.4665 34.2334)
07 719024893=719024893|UNITED STATES|USA|DEPUTY||010|6|1|6|3|Abbeville County, South Carolina, United States|US|2017-12-31T00:00:00.000Z|POINT (-82.4665 34.2334)
08 719024895=719024895|UNITED STATES|USA|EMPLOYEE||010|2|1|2|3|Ninety Six, South Carolina, United States|US|2017-12-31T00:00:00.000Z|POINT (-82.024 34.1751)
09 719024889=719024889|SENATE||UNITED STATES|USA|043|2|1|2|3|Washington, District of Columbia, United States|US|2017-12-31T00:00:00.000Z|POINT (-77.0364 38.8951)
10 719024897=719024897|UNITED STATES|USA|SENATE||042|2|1|2|3|Washington, District of Columbia, United States|US|2017-12-31T00:00:00.000Z|POINT (-77.0364 38.8951)

Returned 669 total features

Running query BBOX(geom, -120.0,30.0,-75.0,55.0) AND dtg DURING 2017-12-31T00:00:00+00:00/2018-01-02T00:00:00+00:00
Returning attributes [GLOBALEVENTID, dtg, geom]
01 719024888=719024888|2017-12-31T00:00:00.000Z|POINT (-97.6475 31.106)
02 719024896=719024896|2017-12-31T00:00:00.000Z|POINT (-97.6475 31.106)
03 719024892=719024892|2017-12-31T00:00:00.000Z|POINT (-82.379 34.1782)
04 719024891=719024891|2017-12-31T00:00:00.000Z|POINT (-82.024 34.1751)
05 719024887=719024887|2017-12-31T00:00:00.000Z|POINT (-82.4665 34.2334)
06 719024893=719024893|2017-12-31T00:00:00.000Z|POINT (-82.4665 34.2334)
07 719024895=719024895|2017-12-31T00:00:00.000Z|POINT (-82.024 34.1751)
08 719024889=719024889|2017-12-31T00:00:00.000Z|POINT (-77.0364 38.8951)
09 719024897=719024897|2017-12-31T00:00:00.000Z|POINT (-77.0364 38.8951)
10 719024884=719024884|2017-12-31T00:00:00.000Z|POINT (-77.0364 38.8951)

Returned 669 total features

Running query EventCode = '051'
01 719024909=719024909|||MELBOURNE|AUS|051|10|1|10|4|Melbourne, Victoria, Australia|AS|2018-01-01T00:00:00.000Z|POINT (144.967 -37.8167)
02 719024963=719024963|||CITIZEN||051|6|2|6|4|City Of Sydney, New South Wales, Australia|AS|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
03 719025168=719025168|AUSTRALIAN|AUS|||051|18|1|10|4|Sydney, New South Wales, Australia|AS|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
04 719025178=719025178|AUSTRALIA|AUS|COMMUNITY||051|20|2|20|4|Sydney, New South Wales, Australia|AS|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
05 719025965=719025965|MIDWIFE||||051|10|1|10|4|Sydney, New South Wales, Australia|AS|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
06 719025248=719025248|BUSINESS||||051|10|1|10|1|Australia|AS|2018-01-01T00:00:00.000Z|POINT (135 -25)
07 719025509=719025509|COMMUNITY||AUSTRALIA|AUS|051|2|1|2|1|Australia|AS|2018-01-01T00:00:00.000Z|POINT (135 -25)
08 719025555=719025555|DENMARK|DNK|||051|2|1|2|1|Australia|AS|2018-01-01T00:00:00.000Z|POINT (135 -25)
09 719025634=719025634|FIJI|FJI|||051|2|1|2|1|Fiji|FJ|2018-01-01T00:00:00.000Z|POINT (178 -18)
10 719025742=719025742|KING||||051|22|3|22|3|San Diego, California, United States|US|2018-01-01T00:00:00.000Z|POINT (-117.157 32.7153)

Returned 138 total features

Running query EventCode = '051' AND dtg DURING 2017-12-31T00:00:00+00:00/2018-01-02T00:00:00+00:00
Returning attributes [GLOBALEVENTID, dtg, geom]
01 719024909=719024909|2018-01-01T00:00:00.000Z|POINT (144.967 -37.8167)
02 719024963=719024963|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
03 719025168=719025168|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
04 719025178=719025178|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
05 719025965=719025965|2018-01-01T00:00:00.000Z|POINT (151.217 -33.8833)
06 719025248=719025248|2018-01-01T00:00:00.000Z|POINT (135 -25)
07 719025509=719025509|2018-01-01T00:00:00.000Z|POINT (135 -25)
08 719025555=719025555|2018-01-01T00:00:00.000Z|POINT (135 -25)
09 719025634=719025634|2018-01-01T00:00:00.000Z|POINT (178 -18)
10 719025742=719025742|2018-01-01T00:00:00.000Z|POINT (-117.157 32.7153)

Returned 138 total features

Done

看《守则》

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

  • createDataStore 从输入配置中获取数据存储实例

  • createSchema 在数据存储中创建架构,作为写入数据的前提条件

  • writeFeatures 使用 FeatureWriter 将要素写入数据存储区

  • queryFeatures 对数据存储区运行多个查询

  • cleanup 删除示例数据并处置数据存储实例

QuickStart使用GDELT数据的一小部分。将数据解析为GeoTools SimpleFeature的代码包含在 org.geomesa.example.data.GDELTData

  • getSimpleFeatureType 创建 SimpleFeatureType 表示数据

  • getTestData 解析嵌入的TSV文件以创建 SimpleFeature 对象

  • getTestQueries 说明了使用CQL(GeoTools的上下文查询语言)的几种不同的查询类型

可视化数据(可选)

有两个选项可以查看此快速入门获取的数据。最简单的选择是使用 export 指挥GeoMesa Cassandra工具分发。对于更适合生产的示例,您也可以竖起一个Geoserver并将其连接到您的Cassandra实例。

使用宣传单可视化数据

警告

要成功运行此命令,您必须有一台连接到Internet的计算机,以便访问外部传单资源。

这个 export 命令是GeoMesa Cassandra命令行工具的一部分。要使用该命令,请确保已按照中所述安装了命令行工具 设置Cassandra命令行工具 。这个 export 命令提供了 leaflet 格式,该格式将要素导出到您可以在Web浏览器中打开的单张地图。要生成地图,请从GeoMesa Cassandra工具分发目录运行以下命令:

bin/geomesa-cassandra export    \
    --output-format leaflet     \
    --contact-point <host:port> \
    --key-space <keyspace>      \
    --catalog <table>           \
    -f gdelt-quickstart         \
    -o <filename>.html          \
    --user <user>               \
    --password <password>

其中的连接参数与您在快速入门过程中上面使用的参数相同。要查看地图,只需在Web浏览器中打开该命令提供的URL即可。如果您点击地图右上角的菜单,您可以启用和禁用热图和要素层以及提供的两个基本层。

使用宣传单可视化快速入门数据

使用宣传单可视化快速入门数据

使用Geoserver可视化数据

您可以使用Geoserver访问和可视化存储在GeoMesa中的数据。要使用Geoserver,请下载并安装版本 2.22.2 。然后按照中的说明操作 在Geoserver中安装GeoMesa Cassandra 以启用GeoMesa。

向Geoserver注册GeoMesa商店

使用您的用户和密码凭据登录到Geoserver。点击“商店”和“添加新商店”。选择 Cassandra (GeoMesa) 矢量数据源,并填写所需参数。

基本店铺信息:

  • workspace 这取决于您的Geoserver安装

  • data source name pick a sensible name, such as geomesa_quick_start

  • description this is strictly decorative; GeoMesa quick start

连接参数:

  • 这些参数值与您在运行本教程时在命令行上提供的参数值相同;它们描述了如何连接到数据所在的Cassandra实例

点击“保存”,Geoserver将在您的Cassandra表中搜索任何由GeoMesa管理的要素类型。

发布该层

Geoserver应该识别 gdelt-quickstart 要素类型,并应将其显示为可发布的图层。点击“发布”链接。

您将被带到“编辑层”屏幕。您需要为数据边框输入值。在这种情况下,您可以单击链接以根据数据计算这些值。

完成后,请单击“保存”按钮。

瞧一瞧

点击左手边沟中的“层预览”链接。如果在结果的第一页上看不到快速启动图层,请在搜索框中输入刚创建的图层的名称,然后按 <Enter>

一旦你看到你的层,点击“OpenLayers”链接,这将打开一个新的标签。您应该会看到类似于下图的红点集合:

使用Geoserver可视化快速入门数据

使用Geoserver可视化快速入门数据

调整显示

以下是你可以使用可视化效果的几种简单方法:

  • 点击显示屏中的一个红点,Geoserver将报告地图区域下方的详细记录。

  • 按住Shift键并单击以高亮显示地图中要放大到的区域。

  • 点击预览窗口左上角的“切换选项工具栏”图标。屏幕的右侧将包括一个“Filter”文本框。请输入 EventCode = '051', and press on the "play" icon. The display will now show only those points matching your filter criterion. This is a CQL filter, which can be constructed in various ways to query your data. You can find more information about CQL from GeoServer's CQL tutorial