You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Flux查询InfluxDB经纬度数据并在Grafana Geomap面板展示?

解决Grafana Geomap面板无法显示InfluxDB车辆经纬度数据的问题

第一步:修正Flux查询逻辑

你之前的查询中yield放在了pivot之前,这会导致pivot操作根本不会执行——yield是输出当前结果的节点,后续的转换步骤会被忽略。正确的查询应该把yield放到最后:

from(bucket: v.defaultBucket)
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "1F4F8F26")
  |> filter(fn: (r) => r["_field"] == "Latitude" or r["_field"] ==  "Longitude")
  |> aggregateWindow(every: v.windowPeriod, fn: median)
  |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value")
  |> yield(name: "pivoted_data")

第二步:验证查询结果

在Grafana查询编辑器的「Table」视图下检查输出:

  • 确认每一行同时包含_time、Latitude、Longitude三个字段
  • 排除存在NULL值的行(如果某时间点只有纬度/经度数据,Geomap无法渲染该点),可添加过滤逻辑:
    |> filter(fn: (r) => exists r.Latitude and exists r.Longitude)
    

第三步:正确配置Geomap面板

  1. 新建/打开Geomap面板,在Layers选项卡选择图层类型为Markers
  2. 切换到Data options:
    • 将Latitude field选择为Latitude
    • 将Longitude field选择为Longitude
    • 确认Time field自动关联到_time
  3. 调整Visual options里的标记大小、颜色等,确保标记在地图上可见

第四步:排查数据合法性

  • 检查经纬度数值范围:纬度必须在-90~90之间,经度在-180~180之间,超出范围的数值会被Geomap忽略
  • 确认字段值是数值类型(不是字符串),若存储为字符串需先转换:
    |> toFloat()
    

额外优化(多车辆场景)

如果数据包含多台车辆,需要在pivot的rowKey中加入车辆标识标签(比如VehicleID),确保每个时间点每台车辆的经纬度单独成一行:

|> pivot(rowKey:["_time", "VehicleID"], columnKey: ["_field"], valueColumn: "_value")

内容的提问来源于stack exchange,提问作者mfcss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:10:30