【问题标题】:bigquery geojson concat multiple rows from same user to a single rowbigquery geojson 将同一用户的多行连接到单行
【发布时间】:2021-10-04 16:27:19
【问题描述】:

如何将来自同一用户的多行合并到一个 geojson 格式的行中,我尝试了 order by 但没有运气。这是我正在使用的示例代码,我也仅限于在此数据库上选择

SELECT rh.routeid, st_asgeojson(st_geogpoint(locs.lon, locs.lat)   
FROM demo.routebatches RB, demo.route R
cross join UNNEST(locations) as locs
where EXTRACT (date FROM TIMESTAMP_MILLIS (CAST(locs.date as INT64))) =  "2017-03-10" and rh.cycleID = 'aff9bb7b-3b92-4620-bc50-1152edefe04c'
order by routeID
limit 100

这给出了这个结果,其中来自同一 routeid 的多个 long 和 lats 不按 routeid 排序。我该如何解决?

Geojson 可以,但我也会采用这种格式,它来自超集中的 deck.gl 路径

【问题讨论】:

    标签: sql google-bigquery gis apache-superset


    【解决方案1】:

    这里有两个问题:

    1. 如何对路线中的位置进行排序。你写where multiple long and lats from the same routeid are not ordered by routeid - 但这是一个令人困惑的陈述。所有这些点 (same routeid) 都有相同的 routeid,那么如何订购它们 by routeid?您可能希望它们在 routeid 组中进行排序,但您需要一个不同的字段来对它们进行排序。

    2. 您需要将 routeid 中的所有点组合成一个线串,而不是将每个点分开。

    此外,尚不清楚实际的输入模式是什么,以及 routebatches 表与路由表的关系如何,如果您澄清一下会有所帮助。 locations 字段是否属于 RB 或 R 表?在没有任何谓词的情况下连接 RB 和 R 表的方式使每个 RB 行与每个 R 行交叉连接。

    看起来locations 记录有一个以毫秒为单位的date 字段 - 如果我们可以按此字段排序,我会使用类似

    SELECT 
      rh.routeid, 
      st_asgeojson(st_makeline(
        array_agg(st_geogpoint(locs.lon, locs.lat) order by locs.date)))
    FROM demo.route R cross join UNNEST(locations) as locs
    where 
      EXTRACT (date FROM TIMESTAMP_MILLIS (CAST(locs.date as INT64))) =  "2017-03-10" 
      and rh.cycleID = 'aff9bb7b-3b92-4620-bc50-1152edefe04c'
    GROUP BY routeID
    order by routeID
    limit 100
    

    首先,我们按 routeId 分组,然后我们聚合 (array_agg) 这条路线中的所有点,创建一个包含所有按时间戳排序的点的数组。 st_makeline 从这个数组构建一个线串,然后您可以将其转换为 geojson。

    另外,请参阅这篇文章,该文章从公共 NOAA 数据创建类似的线串: https://mentin.medium.com/longest-hurricane-eeb6844d65ed

    【讨论】:

    • 感谢您的帮助,成功了。也许您也可以提供帮助,我如何从中删除双引号? json_extract_array(st_asgeojson(st_makeline(array_agg(st_geogpoint(locs.lon, locs.lat) order by locs.date))),'$.coordinates') 作为 geo 给出这个结果 ["[-8.6359,40.6371716666667]", " [-8.63589166666667,40.637165]”、“[-8.63589333333333,40.6371583333333]”、“[-8.63589,40.637165]”、“[-8.635888333666666]”
    猜你喜欢
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 2021-12-07
    • 2012-05-30
    • 2011-02-22
    相关资源
    最近更新 更多