Kibana怎么做地图?热力图如何配置?
Kibana怎么做地图?热力图如何配置? 这是很多 GIS 同学在接触 Elastic Stack 时最先遇到的问题:明明 Elasticsearch 里已经有经纬度数据,但在 Kibana 里不是找不到地图入口,就是热力图没有效果、点位不显示、范围缩放后结果不对。本文按实际工作流讲清楚 Kibana 地图制作、geo_point 字段准备、热力图图层配置和常见排错方法。
引言:Kibana怎么做地图,先确认数据能不能被地图识别
Kibana 做地图的核心不是先点哪个按钮,而是先确认 Elasticsearch 索引里存在可识别的空间字段。对 Kibana Maps 来说,最常用的字段类型是 geo_point,它用于存储点坐标,例如门店位置、车辆定位、设备轨迹点、事件发生位置等。
如果你的字段只是普通的 lat 和 lon 数字字段,Kibana 可能可以在部分可视化中使用,但在 Maps 里更推荐提前合并为 geo_point。这样才能稳定配置点图、聚合网格、热力图和空间过滤。

背景:Kibana 地图适合哪些 GIS 场景
Kibana Maps 更适合做面向检索和分析的 Web 地图,而不是传统 GIS 桌面制图。它的优势是能直接连接 Elasticsearch,对大量日志、位置事件、实时数据进行筛选、聚合和可视化。
常见 GIS 场景包括:
- 车辆 GPS 点位实时展示。
- 门店、基站、传感器、告警点分布分析。
- 按时间筛选事件位置,例如一周内投诉、事故或巡检记录。
- 大规模点数据的密度分析,也就是 Kibana 热力图配置。
- 结合属性条件进行空间检索,例如只看某类设备或某个区域内事件。
需要注意的是,Kibana 不是 QGIS 或 ArcGIS Pro 的替代品。它更擅长“搜索、过滤、聚合、监控”,不擅长复杂的拓扑编辑、精细制图和专业空间分析。
原理:Kibana 热力图为什么依赖 geo_point 字段
在 Elasticsearch 中,空间字段通常分为两类:geo_point 和 geo_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。操作流程通常是:
- 进入 Kibana。
- 打开 Stack Management。
- 选择 Data Views。
- 新建 Data View,例如索引模式填写
gis_events*。 - 如果有时间字段,选择
event_time作为时间字段。 - 保存后检查字段列表,确认
location被识别为geo_point。
如果这里看不到 geo_point 字段,后面在 Kibana Maps 中就很难正常添加地图图层。此时应优先检查索引映射,而不是反复调整地图样式。
步骤四:在 Maps 中添加点图层
Kibana 做地图的常规入口是 Maps。创建地图后,可以添加来自 Elasticsearch 的文档图层。
- 进入 Maps。
- 点击创建新地图。
- 选择添加图层。
- 选择 Elasticsearch 文档或相关数据源。
- 选择刚才创建的 Data View。
- 空间字段选择
location。 - 设置点符号颜色、大小和透明度。
- 保存图层和地图。
此时你应该能看到点位分布。如果点没有出现在预期城市或区域,优先检查经纬度顺序、坐标范围和时间过滤器。
步骤:Kibana热力图如何配置
步骤一:选择热力图图层类型
在 Kibana Maps 中,热力图通常作为一种点数据的渲染方式或图层样式来配置。不同 Kibana 版本的界面名称可能略有差异,但核心思路一致:选择包含 geo_point 的 Elasticsearch 数据,再把显示方式设置为热力图或密度渲染。
- 打开已经创建好的地图。
- 点击添加图层。
- 选择 Elasticsearch 数据源。
- 选择包含
location字段的 Data View。 - 选择热力图或对应的密度图层样式。
- 确认空间字段为
location。 - 应用图层。
步骤二:设置颜色带
热力图颜色带用于表达点密度。常见做法是从冷色到暖色,例如蓝色表示稀疏,黄色或红色表示密集。
配置建议:
- 点位密度差异明显时,使用蓝到红的渐变色。
- 如果底图颜色较深,适当提高热力图透明度和亮度。
- 如果要用于汇报截图,避免使用过多颜色层级,保持图面可读。
- 不要只看颜色“好不好看”,要检查颜色是否真实反映高密度区域。
步骤三:调整半径和模糊程度
热力图半径决定每个点对周边范围的影响大小。半径太小,热力图会变成零散斑点;半径太大,不同热点会糊在一起,看不出真实聚集区。
建议按地图尺度调整:
- 城市级点位分析:半径可以适中,重点看街区或片区热点。
- 全国或省级分布:半径可以稍大,重点看宏观密度。
- 高精度设备点位:半径不宜过大,否则会掩盖位置差异。
如果热力图看起来“一整片都是红色”,通常说明半径过大、颜色分级过窄,或当前地图视野内点数量过于集中。
步骤四:配置权重字段
默认热力图通常按点数量计算密度。如果每个点还有业务权重,例如订单量、报警次数、人口数量、销售额,可以使用权重字段让高值点对热力图贡献更大。
例如:
- 事故点:按事故严重程度加权。
- 门店点:按销售额或客流量加权。
- 传感器点:按异常次数加权。
- 人口采样点:按人口数量加权。
使用权重字段时,要确保字段是数值类型。如果权重字段包含空值、字符串或极端异常值,热力图可能出现局部异常过热的问题。
步骤五:结合时间过滤器检查结果
Kibana 的一个重要特点是全局时间过滤器会影响地图结果。如果 Data View 设置了时间字段,那么地图上显示的数据会随时间范围变化。
排查时建议:
- 先把时间范围放宽,例如最近一年或全部可用时间。
- 确认地图有点后,再逐步缩小时间范围。
- 如果热力图突然消失,检查当前时间段是否真的有数据。
- 用 Discover 检查同一时间条件下是否能检索到文档。
常见坑:Kibana 地图不显示或热力图异常
坑一:字段不是 geo_point
最常见的问题是 location 字段在 Elasticsearch 里被自动识别成对象、文本或普通数字字段,而不是 geo_point。一旦映射创建错误,后续再写入正确格式也通常不能直接改变已有字段类型。
解决方法是新建正确映射的新索引,然后重新导入或 reindex 数据。
GET gis_events/_mapping
检查结果中应能看到类似:
"location": {
"type": "geo_point"
}
坑二:经纬度顺序写反
GIS 软件中常见表达是纬度、经度或经度、纬度混用。Elasticsearch 的对象形式清楚写 lat 和 lon,不容易出错;数组形式则需要格外小心。
推荐写法:
"location": {
"lat": 39.9075,
"lon": 116.3913
}
如果写成 lat: 116.3913、lon: 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 热力图配置中,半径、透明度、颜色带、权重字段都会影响结果。如果参数不合适,可能导致热点过度扩散,或者密度差异不明显。
调试顺序建议是:
- 先显示普通点图,确认位置正确。
- 再切换热力图,确认数据源一致。
- 调整时间范围,确认点数足够。
- 调整半径和颜色带。
- 最后再启用权重字段。
方法比较: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 经纬度。
- 经纬度顺序:对象格式是否为
lat和lon,数组格式是否为[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 热力图前,都先用普通点图验证位置,再逐步开启热力图样式。这样既能保证地图结果可信,也能减少无效排错时间。