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

KQL查询geo_point_in_polygon动态多边形参数报错问题排查

解决KQL中geo_point_in_polygon的动态类型参数报错问题

问题根源

你之前的查询里,polygon变量是一个单行列的表对象,但geo_point_in_polygon函数需要的是标量dynamic类型值,两者类型不匹配导致报错。而直接定义dynamic(...)时,变量本身就是标量,所以能正常运行。

解决方案

核心是把从表中获取的多边形数据,从表对象转换为标量dynamic值,具体步骤如下:

  1. 用toscalar()函数提取表中的单个值,将表转换为标量
  2. 如果原表的Value字段是字符串类型(而非dynamic),需额外用parse_json()把字符串转为dynamic格式

修正后的完整查询

let polygon = toscalar(
    adt_dh_FerrovialTwins_westeurope
    | where ModelId == "dtmi:ferrovial:domain:models:v1:acopiotemploraltwin;1"
      and Key == "localizacion"
    | top 1 by Id
    | project Value
);

// 若Value字段存的是字符串格式的GeoJSON,替换上面的polygon定义为:
// let polygon = parse_json(toscalar(
//     adt_dh_FerrovialTwins_westeurope
//     | where ModelId == "dtmi:ferrovial:domain:models:v1:acopiotemploraltwin;1"
//       and Key == "localizacion"
//     | top 1 by Id
//     | project Value
// ));

adt_dh_FerrovialTwins_westeurope
| where ModelId == "dtmi:ferrovial:domain:models:v1:camiondetierrastwin;1"
    and Key == "localizacion"
| extend lon=(Value).geometry.coordinates[0], lat= (Value).geometry.coordinates[1]
| project todecimal(lon), todecimal(lat), Id
| where geo_point_in_polygon(lon, lat, polygon)
| summarize count() by Id, hash = geo_point_to_s2cell(lon, lat, 7)
| project geo_s2cell_to_central_point(hash), Id, count_
| render piechart with (kind=map)

额外检查

可以用以下语句确认Value字段的类型:

adt_dh_FerrovialTwins_westeurope | getschema

如果结果里Value的DataType是string,就必须用parse_json()转换;如果是dynamic,直接用toscalar()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:55:27