Elasticsearch:使用反向地理编码在地图上显示自定义区域统计数据

news2024/9/25 11:10:41

在实际的许多应用中,我们可能并不一定按照行政区来进行划分区域,比如我们常说江浙一代,我们可以理解江苏和浙江这两个省合在一起,而不是把它们分开。我们有时也说长江三角区,它可能是跨几个省市的一个区域,而不是单纯的一个行政区。又或者,我们常说中原城市群这样的一个概念,它其实是指的在中原的一些城市一起加起来的一个区域。那么我们该如何对这些区域进行统计呢?

Elastic 地图应用带有预定义的区域,使你可以按指标快速可视化区域。比如你可以显示每个省,市,区的统计数据。Elastic 地图还提供绘制你自己的区域地图的功能。 你可以使用你喜欢的任何区域数据,只要你的源数据包含相应区域的标识符即可。

但是,当你的源数据不包含区域标识符时,你如何映射区域呢? 这就是反向地理编码(reverse gecoding)的用武之地。 反向地理编码是根据要素的位置将区域标识符分配给要素的过程。

在本教程中,你将使用反向地理编码按 Web 流量可视化美国人口普查局联合统计区 (CSA) 区域。你将学到:

  • 上传自定义区域。
  • 使用 Elasticsearch enrich 处理器进行反向地理编码。
  • 创建地图并通过网络流量可视化 CSA 区域

当我们完成了本教程,你将看到如下的一个地图:

很显然在上面的地图中,所显示的 CSA 的各个区域和州的边界是不重合的,但是我们可以显示它们的统计数据。 

在如下的展示中,我将使用最新的 Elastic Stack 8.5.2 来进行展示。

使用反向地理编码在地图上显示自定义区域统计数据

索引网络流量数据

GeoIP 是将 IP 地址转换为经度和纬度的常用方法。 GeoIP 在全球城市层面和选定国家/地区的社区层面大致准确。 它不如手机中的实际 GPS 位置好,但它比国家、州或省精确得多。

在今天的教程中,我们将使用 Kibana 自带的 web logs sample data set 来做练习。网络日志样本数据集有经度和纬度。 如果你的网络日志数据不包含经度和纬度,请使用 GeoIP 处理器将 IP 地址转换为 geo_point 字段。

我们按照如下的步骤来安装 sample data set:

这样我们的 Sample web logs 已经被安装好了。它在 Elasticsearch 中生成一个叫做  kibana_sample_data_logs 的索引。

索引联合统计区域 (CSA) 区域

GeoIP 的详细程度对于推动决策制定非常有用。 例如,假设你想根据用户的位置开展营销活动,或者向高管利益相关者展示哪些都市区正在经历流量上升。美国的这种规模通常被人口普查局称为联合统计区 (CSA)。 CSA大致相当于人们如何直观地想到自己居住在哪个城区。 它不一定与州或城市边界重合。CSA 通常共享相同的电信提供商和广告网络。 新的快餐特许经营权扩展到 CSA,而不是特定的城市或自治市。 基本上,同一个 CSA 的人在同一个宜家购物。

要获取 CSA 边界数据,我们必须访问网站 Census Bureau’s website。然后在该网站下载 cb_2018_us_csa_500k.zip文件。

下载完后,我们对它进行解压缩:

$ pwd
/Users/liuxg/data/custom_regions
$ tree -L 2
.
├── cb_2018_us_csa_500k
│   ├── cb_2018_us_csa_500k.cpg
│   ├── cb_2018_us_csa_500k.dbf
│   ├── cb_2018_us_csa_500k.prj
│   ├── cb_2018_us_csa_500k.shp
│   ├── cb_2018_us_csa_500k.shp.ea.iso.xml
│   ├── cb_2018_us_csa_500k.shp.iso.xml
│   └── cb_2018_us_csa_500k.shx
└── cb_2018_us_csa_500k.zip

我们接下来创建一个 Map:

我们依次按照要求把上面解压缩的文件选择进来,并完成数据的上传:

我们接下来为地图添加一下 Tooltips 字段:

这样当我们把鼠标放到数据上时,我们可以看到它的 GEOID,AFFGEOID 及 NAME 信息。点击上面的 Save & close 按钮:

查看地图,你可以了解人口普查局眼中的都市区是什么。它显然和自然州的边界是不一样的。

反向地理编码

要通过 Web 日志流量可视化 CSA 区域,Web 日志流量必须包含 CSA 区域标识符。 你将使用 Elasticsearch enrich 处理器将 CSA 区域标识符添加到 Web 日志示例数据集中。 如果你的源数据已包含区域标识符,则可以跳过此步骤。

在控制台中,创建一个 geo_match 丰富策略:

PUT /_enrich/policy/csa_lookup
{
  "geo_match": {
    "indices": "csa",
    "match_field": "geometry",
    "enrich_fields": [ "GEOID", "NAME"]
  }
}

这个意思其实就是通过匹配 geometry 这个字段,如果地理位置落在 geometry 所定义的范围,那么就从 csa 索引中提取 GEOID 及 NAME 两个字段并添加到自己的索引中。

要初始化策略,请运行:

POST /_enrich/policy/csa_lookup/_execute

要创建摄取管道,请运行:

PUT _ingest/pipeline/lonlat-to-csa
{
  "description": "Reverse geocode longitude-latitude to combined statistical area",
  "processors": [
    {
      "enrich": {
        "field": "geo.coordinates",
        "policy_name": "csa_lookup",
        "target_field": "csa",
        "ignore_missing": true,
        "ignore_failure": true,
        "description": "Lookup the csa identifier"
      }
    },
    {
      "remove": {
        "field": "csa.geometry",
        "ignore_missing": true,
        "ignore_failure": true,
        "description": "Remove the shape field"
      }
    }
  ]
}

要更新现有数据,请运行:

POST kibana_sample_data_logs/_update_by_query?pipeline=lonlat-to-csa

要在摄取时对新文档运行管道,请运行:

PUT kibana_sample_data_logs/_settings
{
  "index": {
    "default_pipeline": "lonlat-to-csa"
  }
}

针对我们的情况,我们不需要运行上面的这个命令。我们只需要运行上面的 _update_by_query 这个命令即可。运行完后,我们可以在 Discover 中重新查看索引 kibana_sample_data_logs:

我们可以在索引的文档中看到新增加的 csa.GEOID 及 csa.NAME 两个字段。 我们甚至可以把当前的显示调整为:

我们可以看到有些文档没有相应的 GEOID 及 csa.NAME。它们表明它们不在 CSA 所覆盖的范围里。

按 Web 流量可视化组合统计区域 (CSA) 区域

现在我们的网络流量包含 CSA 区域标识符,你将按网络流量可视化 CSA 区域。我们进行如下的操作:

 

  

点击上面的 Add layer 按钮:

  

这样我们就能看出来 Web logs 在各个 CSA 区域里的情况了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/31889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每隔一段时间自动敲键盘的的vbs脚本

1. 上代码 set wscreateobject("wscript.shell") do ws.sendkeys "{TAB}" WScript.Sleep Int(6 *Rnd1)*1000 loop2. 代码解释 每隔1~6秒,按一次TAB键 2.1 循环执行操作代码 do ....操作..... loop2.2 按下Tab键 ws.sendkeys "{TAB}" 即…

HTML5期末大作业商城网页设计与实:(手表 3页)HTML+CSS

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 在线商城购物 | 水果商城 | 商城系统建设 | 多平台移动商城 | H5微商城购物商城项目 | HTML期末大学生网页设计作业 HTML:结构 CSS&#…

python中字典的循环遍历的方式

python开发中经常会用到对于字典、列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式。 注意: python2和python3中,下面两种方法都是通用的。 1、只…

两种数据提取框架的比较(scrapy和webmagic)

背景: 最近北京疫情有点严重,状态是居家办公,又是买菜做饭又是核酸检测心情是无比的烦躁还总是会议,无需发言的会议就边听边写写csdn记录一下。这几天在用Java写一个数据抓取的程序,用于数据分析等等。第一是因为原项目…

十二、虚拟 DOM 和 render() 函数(2)

本章概要 用普通 JavaScript 代替模板功能 v-if 和 v-forv-modelv-on事件和按键修饰符插槽 JSX实例:帖子列表 12.3 用普通 JavaScript 代替模板功能 原先在模板中可以使用的一些功能在 render() 函数中没有再提供,需要自己编写 JavaScript 代码来实现…

docker-Cgroups的资源限制

一、Cgroup的介绍 cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace 隔离起来的资源,还可以 为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。 cpu时间片的概念 …

atoi函数的介绍和模拟实现

今天我来介绍atoi函数和模拟实现atoi函数。 目录atoi和与其功能相似的函数的介绍atoi函数的模拟实现atoi和与其功能相似的函数的介绍 atoi函数是一个将字符串转换为整数值的函数。 由msdn查询可以得知,atoi函数的返回类型是int类型,参数类型是const ch…

用于不同功率的模块式TEC半导体致冷器超高精度温度控制装置

摘要:针对目前TEC半导体制冷器温控装置对高精度、模块化、可编程和远程控制等方面的技术需求,本文提出了一种高性价比的解决方案。解决方案的具体内容是采用模块式结构,以24位AD和16位DA超高精度PID控制器作为基础单元,采用分立模…

不调参,免训练,VisionBank AI OCR新功能升级上线!

应用背景 OCR字符识别,是指对部件或产品上刻印的字符进行确认、辨别、判定的检测识别。此项技术目前已广泛应用于工业自动化生产的产品质量管理环节当中,企业通过为机器视觉检测设备安装OCR系统,快速完成对产品生产日期、保质期、生产批号、…

红色荧光TAMRA alkyne 5-isomer,945928-17-6,5四甲基罗丹明-炔基

TAMRA alkyne,5-isomer反应原理: 红色荧光四甲基罗丹明炔烃可通过铜催化的点击反应与叠氮化合物反应。点击化学的代表反应为铜催化的叠氮-炔基Husigen环加成反应(Copper-Catalyzed Azide–Alkyne Cycloaddition)。点击化学的概念对化学合成领…

线性二分类——机器学习

目录 一、算法思想 二、算法原理 三、算法分析 四、源程序代码 五、运行结果及分析 六、总结 一、算法思想 (1)二分类:表示分类任务有两个类别,比如我们想识别图片中是不是狗,也就是说,训练一个分类器,…

如何使用云服务器搭配宝塔面板搭建Z-blog个人博客系统

之前写过使用过WordPress和Typecho搭建个人博客网站的方法,这篇文章将使用Z-blog搭建个人博客系统,Z-blog相当于WordPress而言,更加小巧,但是依然有着强大的功能,以及丰富的主题和插件,因此也值得很多用户选…

数字图像处理均衡化、规定化例题及解题思路

目录 均衡化 规定化 均衡化 前置知识: rk:表示灰度级 nk:表示第k个灰度级出现的个数 sk:表示用变换函数公式计算映射后的灰度级sk 变换函数公式: 例题: 1.列表写出图像直方图均衡化的过程 2.画出均衡化以后的图像 3.画出原始图像直方图…

如何给PDF解密?建议收藏这些方法

我们在传输接收文件的时候,经常都是以PDF格式进行的,因为PDF格式具有很强的稳定性。那小伙伴们平时接收的时候,会不会发现有些PDF文件为了保密性会进行加密,如果我们经常需要使用它,就需要不断地输入密码,这…

Navicat使用教程

文章目录1.连接数据库1.1 启动MySQL1.2 Navicat连接数据库1.3 操作数据库1.4 导入EXcel表内容1.5 新建查询1.连接数据库 1.1 启动MySQL 使用管理员身份打开命令提示符 net start mysql 启动服务 net stop mysql 关闭服务 1.2 Navicat连接数据库 第一步:连接数据库之前一定要…

基于ZigBee设计的物联网LED控制系统

1. 前言 随着LED照明越来越普及以及移动互联网技术的快速发展,人们对家居生活的网络化、智能化、节能化的需求越来越强烈,将家用电器、照明灯具等模块通过无线网络集成到控制平台,实现智能控制和智能管理,目前智能LED照明已成为IOT中重要的一部分。 本文为了绿色智慧照明…

构建企业级DNS系统(十)搭建Docker容器bind

把bind运行在docker中 伴随着应用微服务化,大量应用跑在了容器之中,为了让容器的管理更可靠、可控并为上层应用提供更好的体验,更快的发布,更灵活的调度,容器云应运而生。 当各种上层应用跑在了容器之中,大…

Linux怎么设置中文语言? centos中文乱码的解决办法

怎么设置Linux系统中文语言?是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码。出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导致的。今天我们就以centos为例…

千亿贴息助科研,维视智造院校实验室建设攻略来了(四)!

01千亿政策贴息助力院校设备升级 近期,关于高校教育信息化的利好政策密集出台。9月7日,国务院常务会议提出对高校、职业院校和实训基地等10大领域设备购置和更新改造新增贷款,实施阶段性鼓励政策,中央财政贴息2.5个百分点&#xf…

【跟学C++】C++STL标准模板库——算法详细整理(下)(Study18)

文章目录1、简介2、STL算法分类及常用函数2.2、变序算法(二)2.2.1 替换算法(2个)2.2.2 排序算法(6个)2.2.3 分区算法(4个)2.2.4 可用于排序容器的算法(3个)3、总结 【说明】 大家好,本专栏主要是跟学C内容,自己学习了这位博主【 …