pointInPolygon 函数统计德国境内的基站数量,并借助 ClickHouse 智能体将结果在地图上可视化。
前置条件
要完成本教程,您需要:- 一个 ClickHouse Cloud 账户 (注册即可获得 300 美元免费额度)
- 一个 ClickHouse Cloud 服务
加载示例数据
本教程使用的数据集来自 ,这是全球最大的蜂窝基站开放数据库。
截至 2021 年,该数据集收录了全球数千万条蜂窝基站记录,包括基站的地理坐标,以及国家/地区代码、网络等元数据。
- 在 ClickHouse Cloud 左侧菜单的下拉列表中选择您的服务
- 选择 Data sources
- 点击 Add sample data 卡片
- 选择 Cell Towers (1.1 GB) 数据集
- 将目标数据库设为
default,然后点击Import dataset
查看 schema
- 从左侧菜单中选择 SQL console
- 点击主页图标旁的 + 选项卡,新建一个查询
- 在 SQL 编辑器中输入以下查询,然后点击 Run:
lon 和 lat 表示。执行简单查询
运行以下查询,按类型查看蜂窝基站数量:接下来,按移动国家/地区代码 (MCC) 统计蜂窝基站的数量:可以看到,蜂窝基站数量最多的国家对应的 MCC 分别为 310、262 和 250。
你可以使用字典,将 创建字典后,即可使用它返回相同的列表,并在 MCC 旁边显示对应的国家名称:
mcc 列中的数值替换为对应的国家名称:Query
Response
接入地理空间数据
您可能还想知道某个特定地理区域内有多少个蜂窝基站。
针对这一用例,ClickHouse 提供了许多实用的地理函数,例如 现在将德国 (本土) 轮廓的坐标插入表中:现在,可以使用
pointInPolygon 函数。假设您想了解德国境内共有多少个蜂窝基站。
创建一个名为 germany 的表,其中只包含一个 polygon 类型的列:pointInPolygon 函数查询德国本土境内共有多少个蜂窝基站:Query
Response
可选:使用 ClickHouse 智能体可视化数据
接下来,我们希望将这些数据可视化。以下是一次可选的示例运行:ClickHouse 智能体是由模型驱动的 Beta 功能,因此每次运行时,其执行计划、工具调用 trace 和输出都可能有所不同。
ClickHouse 智能体让您可以通过对话轻松查询和探索 ClickHouse 数据,无需自行编写 SQL 或编排逻辑。
智能体会理解您的意图、规划步骤、调用您已配置的工具,并将结果返回给您。在左侧菜单底部,点击组织名称下方的 ClickHouse agents,即可打开 ClickHouse 智能体。
您可以通过聊天向 ClickHouse 智能体发送消息。
输入“Visualize cell towers within Germany on a map using the
default.cell_towers and default.germany tables”,然后点击发送。
在某次运行中,智能体执行了以下步骤:- 在
mcc_country_dict中查找德国的移动国家代码 (MCC) ,得到 MCC262。 - 使用
pointInPolygon统计落在germany多边形内且mcc = 262的基站数量,结果为 2,588,635 个。这一数字略少于上文的计数,因为额外的mcc过滤器排除了位于多边形内、但注册在其他国家的基站。 - 智能体没有逐一绘制 260 万个点,而是对
lon和lat进行舍入,将基站归入 0.1° × 0.1° 的网格,共生成 4,821 个单元。它还核验了各单元计数之和恰好为 2,588,635,确保分箱过程中没有数据丢失或重复计数。 - 从
germany中获取多边形,将其作为轮廓叠加在网格上,并采用对数色标,使密集的城市单元和稀疏的乡村单元都能清晰呈现。
后续步骤
在本教程中,您将 OpenCelliD 蜂窝基站数据集加载到 ClickHouse Cloud 中,查看了其 schema,并对数千万行数据运行了聚合查询。 您创建了一个字典,为数值型的mcc 列补充国家名称;将德国的轮廓存储为多边形,并使用 pointInPolygon 统计了德国境内的基站数量。
最后,您借助 ClickHouse 智能体将这一问题直接转化为一张密度地图,无需亲自编写聚合或绘图代码。
接下来,您可以:
- 向智能体继续提问。 例如,询问
LTE和GSM等不同制式的基站密度有何差异,或者哪些城市的NR基站最多。您可以将常用的提示词保存到提示词库中,或在智能体构建器中构建专用智能体。 - 比较不同国家。 插入其他国家的多边形,并对每个国家运行相同的
pointInPolygon查询。借助您创建的字典,可以为结果标注国家名称。 - 使用 H3 或 geohash 对基站进行分桶。 智能体使用的是简单的舍入网格。ClickHouse 还提供 H3 和 geohash 函数,可生成层级化的单元,非常适合可缩放的地图。
- 探索其他数据集。 纽约出租车数据集同样包含上车和下车坐标,示例数据集索引页中还列出了更多数据集。