Kibana怎么做地图?热力图如何配置?

GIS基础理论
Dr.GIS
wowwwai GIS研习社 · 工具流程与项目排障

Kibana怎么做地图?热力图如何配置? 这是很多 GIS 同学在接触 Elastic Stack 时最先遇到的问题:明明 Elasticsearch 里已经有经纬度数据,但在 Kibana 里不是找不到地图入口,就是热力图没有效果、点位不显示、范围缩放后结果不对。本文按实际工作流讲清楚 Kibana 地图制作、geo_point 字段准备、热力图图层配置和常见排错方法。

引言:Kibana怎么做地图,先确认数据能不能被地图识别

Kibana 做地图的核心不是先点哪个按钮,而是先确认 Elasticsearch 索引里存在可识别的空间字段。对 Kibana Maps 来说,最常用的字段类型是 geo_point,它用于存储点坐标,例如门店位置、车辆定位、设备轨迹点、事件发生位置等。

如果你的字段只是普通的 latlon 数字字段,Kibana 可能可以在部分可视化中使用,但在 Maps 里更推荐提前合并为 geo_point。这样才能稳定配置点图、聚合网格、热力图和空间过滤。

Kibana怎么做地图 Kibana热力图配置流程示意图
Kibana 地图与热力图的基本流程:先准备 geo_point 字段,再在 Maps 中添加图层并配置样式。

背景:Kibana 地图适合哪些 GIS 场景

Kibana Maps 更适合做面向检索和分析的 Web 地图,而不是传统 GIS 桌面制图。它的优势是能直接连接 Elasticsearch,对大量日志、位置事件、实时数据进行筛选、聚合和可视化。

常见 GIS 场景包括:

  • 车辆 GPS 点位实时展示。
  • 门店、基站、传感器、告警点分布分析。
  • 按时间筛选事件位置,例如一周内投诉、事故或巡检记录。
  • 大规模点数据的密度分析,也就是 Kibana 热力图配置。
  • 结合属性条件进行空间检索,例如只看某类设备或某个区域内事件。

需要注意的是,Kibana 不是 QGIS 或 ArcGIS Pro 的替代品。它更擅长“搜索、过滤、聚合、监控”,不擅长复杂的拓扑编辑、精细制图和专业空间分析。

原理:Kibana 热力图为什么依赖 geo_point 字段

在 Elasticsearch 中,空间字段通常分为两类:geo_pointgeo_shape。其中 geo_point 表示单个经纬度点,最适合 Kibana 热力图、点位图和空间距离查询;geo_shape 表示线、面、多边形等几何对象,更适合行政区、道路、范围边界等数据。

Kibana 地图图层通常通过 Elasticsearch 的空间字段读取数据。热力图并不是简单把每个点画成一个发光圆,而是把当前地图视野内的点按照空间位置进行密度渲染。点越集中,颜色越热;点越稀疏,颜色越冷。

所以,当 Kibana 热力图不显示时,通常不是颜色选错了,而是以下几类问题:

  • 索引中没有 geo_point 字段。
  • 经纬度顺序写反,导致点跑到海里或世界另一侧。
  • 字段映射已经创建错误,后续再写入数据也不会自动变成空间字段。
  • 时间过滤器范围不对,当前时间窗口内没有数据。
  • 地图缩放级别、热力图半径或权重字段配置不合适。

步骤:Kibana怎么做地图

步骤一:准备包含经纬度的数据

假设你有一份点位数据,包含名称、类型、时间、经度和纬度字段。典型字段如下:

字段名 示例 说明
name 设备A001 点位名称
lon 116.3913 经度
lat 39.9075 纬度
event_time 2026-07-02T10:20:00 事件时间
type alarm 分类属性

在 GIS 中,经纬度通常使用 WGS84 坐标系,也就是 EPSG:4326。Kibana Maps 使用 Web 地图底图展示时,会在显示层面使用 Web Mercator,但你写入 Elasticsearch 的点坐标一般仍然是经纬度。

步骤二:创建 geo_point 映射

在写入数据前,建议先给索引设置字段映射。下面是一个简化示例,把 location 定义为 geo_point

PUT gis_events
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "type": {
        "type": "keyword"
      },
      "event_time": {
        "type": "date"
      },
      "location": {
        "type": "geo_point"
      }
    }
  }
}

写入数据时,geo_point 可以使用多种格式。为了减少歧义,推荐使用对象形式:

POST gis_events/_doc
{
  "name": "设备A001",
  "type": "alarm",
  "event_time": "2026-07-02T10:20:00",
  "location": {
    "lat": 39.9075,
    "lon": 116.3913
  }
}

对象形式的好处是字段含义清楚,不容易把经纬度顺序写反。如果使用数组形式,需要特别注意 Elasticsearch 的 geo_point 数组顺序通常是 [lon, lat]

步骤三:在 Kibana 创建 Data View

数据写入 Elasticsearch 后,需要在 Kibana 中创建 Data View。操作流程通常是:

  1. 进入 Kibana。
  2. 打开 Stack Management
  3. 选择 Data Views
  4. 新建 Data View,例如索引模式填写 gis_events*
  5. 如果有时间字段,选择 event_time 作为时间字段。
  6. 保存后检查字段列表,确认 location 被识别为 geo_point

如果这里看不到 geo_point 字段,后面在 Kibana Maps 中就很难正常添加地图图层。此时应优先检查索引映射,而不是反复调整地图样式。

步骤四:在 Maps 中添加点图层

Kibana 做地图的常规入口是 Maps。创建地图后,可以添加来自 Elasticsearch 的文档图层。

  1. 进入 Maps
  2. 点击创建新地图。
  3. 选择添加图层。
  4. 选择 Elasticsearch 文档或相关数据源。
  5. 选择刚才创建的 Data View。
  6. 空间字段选择 location
  7. 设置点符号颜色、大小和透明度。
  8. 保存图层和地图。

此时你应该能看到点位分布。如果点没有出现在预期城市或区域,优先检查经纬度顺序、坐标范围和时间过滤器。

步骤:Kibana热力图如何配置

步骤一:选择热力图图层类型

在 Kibana Maps 中,热力图通常作为一种点数据的渲染方式或图层样式来配置。不同 Kibana 版本的界面名称可能略有差异,但核心思路一致:选择包含 geo_point 的 Elasticsearch 数据,再把显示方式设置为热力图或密度渲染。

  1. 打开已经创建好的地图。
  2. 点击添加图层。
  3. 选择 Elasticsearch 数据源。
  4. 选择包含 location 字段的 Data View。
  5. 选择热力图或对应的密度图层样式。
  6. 确认空间字段为 location
  7. 应用图层。

步骤二:设置颜色带

热力图颜色带用于表达点密度。常见做法是从冷色到暖色,例如蓝色表示稀疏,黄色或红色表示密集。

配置建议:

  • 点位密度差异明显时,使用蓝到红的渐变色。
  • 如果底图颜色较深,适当提高热力图透明度和亮度。
  • 如果要用于汇报截图,避免使用过多颜色层级,保持图面可读。
  • 不要只看颜色“好不好看”,要检查颜色是否真实反映高密度区域。

步骤三:调整半径和模糊程度

热力图半径决定每个点对周边范围的影响大小。半径太小,热力图会变成零散斑点;半径太大,不同热点会糊在一起,看不出真实聚集区。

建议按地图尺度调整:

  • 城市级点位分析:半径可以适中,重点看街区或片区热点。
  • 全国或省级分布:半径可以稍大,重点看宏观密度。
  • 高精度设备点位:半径不宜过大,否则会掩盖位置差异。

如果热力图看起来“一整片都是红色”,通常说明半径过大、颜色分级过窄,或当前地图视野内点数量过于集中。

步骤四:配置权重字段

默认热力图通常按点数量计算密度。如果每个点还有业务权重,例如订单量、报警次数、人口数量、销售额,可以使用权重字段让高值点对热力图贡献更大。

例如:

  • 事故点:按事故严重程度加权。
  • 门店点:按销售额或客流量加权。
  • 传感器点:按异常次数加权。
  • 人口采样点:按人口数量加权。

使用权重字段时,要确保字段是数值类型。如果权重字段包含空值、字符串或极端异常值,热力图可能出现局部异常过热的问题。

步骤五:结合时间过滤器检查结果

Kibana 的一个重要特点是全局时间过滤器会影响地图结果。如果 Data View 设置了时间字段,那么地图上显示的数据会随时间范围变化。

排查时建议:

  1. 先把时间范围放宽,例如最近一年或全部可用时间。
  2. 确认地图有点后,再逐步缩小时间范围。
  3. 如果热力图突然消失,检查当前时间段是否真的有数据。
  4. 用 Discover 检查同一时间条件下是否能检索到文档。

常见坑:Kibana 地图不显示或热力图异常

坑一:字段不是 geo_point

最常见的问题是 location 字段在 Elasticsearch 里被自动识别成对象、文本或普通数字字段,而不是 geo_point。一旦映射创建错误,后续再写入正确格式也通常不能直接改变已有字段类型。

解决方法是新建正确映射的新索引,然后重新导入或 reindex 数据。

GET gis_events/_mapping

检查结果中应能看到类似:

"location": {
  "type": "geo_point"
}

坑二:经纬度顺序写反

GIS 软件中常见表达是纬度、经度或经度、纬度混用。Elasticsearch 的对象形式清楚写 latlon,不容易出错;数组形式则需要格外小心。

推荐写法:

"location": {
  "lat": 39.9075,
  "lon": 116.3913
}

如果写成 lat: 116.3913lon: 39.9075,纬度超出合理范围时可能直接报错;如果数值刚好都在合法范围内,点可能会跑到错误位置。

坑三:坐标系不是 WGS84 经纬度

很多国内 GIS 数据可能来自 CGCS2000、高斯投影、本地投影或 Web Mercator 米制坐标。如果直接把米制坐标写入 geo_point,Kibana 地图会显示异常,甚至完全看不到点。

写入 Kibana 前应确认:

  • 经度范围大致在 -180 到 180 之间。
  • 纬度范围大致在 -90 到 90 之间。
  • 中国区域经度通常约 73 到 135,纬度约 18 到 54。
  • 如果坐标值类似 12958160、4825907,很可能是 Web Mercator 米制坐标,不应直接作为经纬度。

坑四:时间过滤器把数据过滤没了

很多 Kibana 地图“空白”的原因不是空间字段错误,而是右上角时间范围太窄。尤其是导入历史样例数据时,默认的最近 15 分钟通常查不到任何文档。

建议先在 Discover 中验证索引是否有数据,再回到 Maps 调整图层。

坑五:热力图参数让热点被掩盖

Kibana 热力图配置中,半径、透明度、颜色带、权重字段都会影响结果。如果参数不合适,可能导致热点过度扩散,或者密度差异不明显。

调试顺序建议是:

  1. 先显示普通点图,确认位置正确。
  2. 再切换热力图,确认数据源一致。
  3. 调整时间范围,确认点数足够。
  4. 调整半径和颜色带。
  5. 最后再启用权重字段。

方法比较:Kibana Maps、QGIS 和 WebGIS 热力图怎么选

工具 适合场景 优点 限制
Kibana Maps 日志位置、实时事件、搜索过滤、监控看板 直接连接 Elasticsearch,适合动态筛选和大规模检索 专业制图和复杂空间分析能力有限
QGIS 桌面 GIS 分析、数据清洗、专题制图 空间处理工具丰富,适合检查坐标系和制图输出 实时看板和全文检索能力不如 Elastic Stack
Leaflet 或 OpenLayers 自定义 WebGIS 应用 前端控制灵活,可深度定制交互 需要开发能力,大数据量时要设计瓦片或聚合服务
ArcGIS Pro 专业 GIS 项目、企业制图、空间分析 工具链完整,适合规范化 GIS 生产 与 Elasticsearch 实时检索看板不是同一类工作流

如果你的目标是把 Elasticsearch 中的位置事件快速做成地图看板,Kibana Maps 是合适选择。如果你的目标是做严格的空间统计、投影转换、制图出图,建议先用 QGIS 或 ArcGIS Pro 处理数据,再把结果同步到 Elasticsearch。

检查清单:配置 Kibana 地图和热力图前后要核对什么

  • 索引映射:location 是否为 geo_point
  • 坐标格式:是否使用 WGS84 经纬度。
  • 经纬度顺序:对象格式是否为 latlon,数组格式是否为 [lon, lat]
  • Data View:Kibana 是否正确识别空间字段。
  • 时间字段:全局时间过滤器是否把数据排除了。
  • 普通点图:热力图前是否先验证点位能正常显示。
  • 热力图半径:是否过大或过小。
  • 颜色带:是否能区分高密度和低密度区域。
  • 权重字段:是否为数值类型,是否存在异常值。
  • 地图缩放级别:当前尺度是否适合观察热点。

实务建议:不要一开始就调热力图。先用普通点图确认数据、坐标、时间范围都正确,再切换到热力图配置,这样排错效率最高。

FAQ:Kibana怎么做地图和热力图常见问题

Kibana 做地图必须有 geo_point 字段吗?

如果要在 Kibana Maps 中稳定显示点位、配置热力图和执行空间过滤,建议必须准备 geo_point 字段。单独的经纬度数字字段不如 geo_point 可靠,也不利于后续空间查询。

Kibana 热力图不显示怎么办?

先按顺序检查四件事:索引是否有数据,时间过滤器是否正确,空间字段是否为 geo_point,普通点图是否能显示。如果普通点图都不显示,先不要调热力图样式,应优先排查数据和字段映射。

Kibana 热力图颜色很红,是不是代表一定有问题?

不一定。红色通常表示当前颜色带中的高密度区域。但如果整个视野都是红色,可能是半径过大、颜色分级不合理、权重字段异常,或者地图尺度太小导致点全部聚在一起。

经纬度字段已经存在,为什么 Kibana Maps 找不到?

因为普通数字字段不是空间字段。你需要在 Elasticsearch 映射中定义一个 geo_point 字段,例如 location,并把经纬度写入该字段。已有错误映射通常需要新建索引并重新导入。

Kibana 可以做行政区面数据地图吗?

可以,但点热力图主要依赖 geo_point。如果要展示行政区、范围边界、多边形区域,需要考虑 geo_shape、矢量图层或与外部边界数据结合。具体做法和点热力图不是同一个配置重点。

Kibana 热力图适合做严格的空间统计分析吗?

不完全适合。Kibana 热力图更适合快速发现空间聚集趋势和监控热点。如果要做严谨的核密度分析、空间自相关、缓冲区统计,建议使用 QGIS、ArcGIS Pro、GeoPandas 或 PostGIS 进行专业分析。

结论:先让点位正确,再配置 Kibana 热力图

Kibana怎么做地图?热力图如何配置? 关键可以概括为一句话:先把经纬度数据正确写成 geo_point,再在 Kibana Maps 中添加图层,最后调整热力图半径、颜色带、权重字段和时间过滤器。

实际项目中,最容易出错的不是 Kibana 按钮位置,而是字段映射、坐标系、经纬度顺序和时间范围。建议你每次配置 Kibana 热力图前,都先用普通点图验证位置,再逐步开启热力图样式。这样既能保证地图结果可信,也能减少无效排错时间。