又到了每年一度的圣诞节了。圣诞老人今年开始向各个国家发放礼物了。他驾驶着自己的雪橇挨个国家发放礼物了。我们收集了去世界过个国家的首都的地理位置信息,并按照一定的顺序来发放礼物。我们可以轻松地使用 Elastic Stack 中的 Kibana 来创建一个 Maps 可视化来展现圣诞老人的行动轨迹。在这个展示中,我将使用最新的 Elastic Stack 8.5.3 来进行展示。
圣诞老人使用 Kibana Dashboards 驾驶他的雪橇_哔哩哔哩_bilibili
圣诞老人使用 Kibana Dashboards 驾驶他的雪橇
准备数据
你可以在地址 GitHub - liu-xiao-guo/geojson-world: geoJSON files of all Capitals and Countries of the world。在这个仓库中,它含有世界各个国家的首都的地理位置信息。我们首先从这个文件 capitals.geojson 进行处理。含有如下格式的数据:
"type": "FeatureCollection",
"features": [{
"properties": {
"country": "Bangladesh",
"city": "Dhaka",
"tld": "bd",
"iso3": "BGD",
"iso2": "BD"
},
"geometry": {
"coordinates": [90.24, 23.43],
"type": "Point"
},
"id": "BD"
}
我们其实可以通过 Maps 来展示这个数据,尽管在我们的用例中不使用它:
这样我们就可以看到每个国家的首都在哪里了。
我们需要自己对这个数据处理,并形成如下 NDJSON 格式的数据:
{"country":"Bangladesh","city":"Dhaka","tld":"bd","iso3":"BGD","iso2":"BD","location":{"coordinates":[90.24,23.43],"type":"Point"},"@timestamp":"2022-12-24T16:15Z"}
{"country":"Belgium","city":"Brussels","tld":"be","iso3":"BEL","iso2":"BE","location":{"coordinates":[4.2,50.5],"type":"Point"},"@timestamp":"2022-12-25T00:45Z"}
在处理的过程中,你可以使用 NDJSON converter 来进行转换。最终的文件我存放在 capital-city-data.ndjson 文件中。这个格式便于在 Kibana 中进行上传。请注意上面的每个文档的格式:
{
"country":"Bangladesh",
"city":"Dhaka",
"tld":"bd",
"iso3":"BGD",
"iso2":"BD",
"location":{
"coordinates":[
90.24,
23.43
],
"type":"Point"
},
"@timestamp":"2022-12-24T16:15Z"
}
它含有一个 geo_point 的数据 location.coordinates,以及一个时间戳字段 @timestamp。
导入数据
我们使用 Kibana 自带的工具 Upload file 来写入数据:
在上面,我们需要修改 @timestamp 及 location 两个字段的类型。点击 Import 按钮:
上面显示我们有 113 个数据被写入到 Elasticsearch 中。我们点击上面的 View index in Discover 按钮:
从上面我们可以看出来,共有 113 个文档。它的时间范围是 2022年 12 月 24 日 20:10 分开始,终于 2022 年 12 月 25 日 21:50。也就是在这个时间范围里圣诞老人开始驾驶自己的雪橇周游各个国家的首都。
使用 Maps 来追寻圣诞老人
我们接下来创建一个 dashboard 来追寻圣诞老人的足迹:
在上面,我们选择下载的 santa 的图像来作为我们定制的图像。
这样我们就完成了整个地图的设计。
接下来,我们使用 Maps 的播放功能来展示 Santa 的行走轨迹:
如果我们的时间间隔选择的足够小,使得我们在显示的窗口中只有仅有一个数据,那么我们就可以完美地展现圣诞老人的行走轨迹。
大家有没有觉得,如果我们把这个应用到新冠疫情的人员轨迹上,是不是也非常有用啊 :)