用于空间分析的网格系统
本文档介绍了在 BigQuery 中使用地理空间网格系统(例如 S2 和 H3)来按标准化地理区域整理空间数据的用途和方法。此外,本文档还介绍了如何为应用选择合适的网格系统。本文档适用于在 BigQuery 中处理空间数据和执行空间分析的所有人。
空间分析概览和使用挑战
空间分析有助于显示实体空间中实体(商店或住宅)与事件之间的关系。将地球表面作为物理空间的空间分析称为地理空间分析。BigQuery 包含地理空间地图项和函数,可让您大规模执行地理空间分析。
许多地理空间用例都涉及汇总本地化区域内的数据,并比较这些区域的统计汇总数据。这些本地化区域在空间数据库表中表示为多边形。在某些情况下,此方法称为统计地理学。为了更好地生成报告、进行分析和空间索引编制,需要对确定地理区域范围的方法进行标准化。例如,零售商可能希望分析其商店所在地区或其考虑开设新商店的地区的受众特征随时间的变化情况。或者,保险公司可能希望通过分析特定区域的普遍自然灾害风险,更好地了解房产风险。
由于许多地区都制定了严格的数据隐私保护法规,因此包含位置信息的数据集需要进行去标识化或部分匿名化,以帮助保护数据中所代表个人的隐私。例如,您可能需要对包含未偿抵押贷款数据的数据集执行地理位置信用集中风险分析。如需对数据集进行去标识化处理,使其符合合规性分析要求,您需要保留与房源位置相关的信息,但应避免使用特定地址或经纬度坐标。
在上述示例中,这些分析的设计者面临以下挑战:
- 如何绘制您要分析其随时间变化的区域边界?
- 如何使用现有的行政区划边界(例如人口普查区或多分辨率网格系统)?
本文档旨在通过介绍每种方案、最佳实践以及帮助您避免常见错误来解答这些问题。
选择统计区域时常见的误区
房地产销售、营销活动、电子商务配送和保险政策等商家数据集适合进行空间分析。这些数据集通常包含看似方便的地理空间联接键,例如人口普查小区、邮政编码或城市名称。包含人口普查小区、邮政编码和城市表示法的公共数据集随处可见,因此很容易被用作统计汇总的行政区划边界。
虽然这些行政区划和其他行政区划在名义上很方便,但也存在缺点。此外,这些边界在分析项目的早期阶段可能非常有效,但在后续阶段可能会出现缺点。
邮政编码
邮政编码用于在世界各地的不同国家/地区传送邮件,由于其广泛应用,因此通常用于引用空间和非空间数据集中的位置和区域。我们之前提到的抵押贷款示例中,数据集通常需要先去标识化,然后才能执行下游分析。由于每个房源地址都包含邮政编码,因此可以访问邮政编码参考表,这使得邮政编码成为空间分析的联接键的便捷选项。
使用邮政编码时的一个缺点是,它们不是以多边形表示的,并且没有单一正确的邮政编码区域来源。此外,邮政编码无法很好地反映真实的用户行为。美国最常用的邮政编码数据来自美国人口普查局 TIGER/Line Shapefile,其中包含一个名为 ZCTA5 (Zip Code Tabulation Area) 的数据集。此数据集大致表示了从邮件投递路线派生出的邮政编码边界。不过,有些邮政编码代表的是单独的建筑物,没有任何边界。其他国家/地区也存在此问题,因此很难构建一个包含权威邮政编码边界的单个全球事实表,该边界可在多个系统和数据集中使用。
此外,全球没有统一的邮政编码格式。有些是数字,介于 3 到 10 位数之间,有些是字母数字。 国家/地区之间也存在重叠,因此需要将原产国与邮政编码一起存储在单独的列中。有些国家/地区不使用邮政编码,这进一步增加了分析的复杂性。
人口普查区、城市和县
有些行政区(例如人口普查区、城市和郡)没有权威边界,例如,在大多数情况下,城市的边界都是由政府机关确定的。美国普查局和大多数其他国家/地区的同类机构对人口普查小区进行了明确定义。
使用这些行政区划边界和其他行政区划边界的缺点是,它们会随时间而变化,并且在地理位置上并不一致。县和城市会合并或分离,有时还会更名。美国的人口普查小区每十年更新一次,其他国家/地区的人口普查小区更新时间各不相同。令人困惑的是,在某些情况下,地理边界可能会发生变化,但其唯一标识符保持不变,这使得很难分析和了解一段时间内的变化。
一些行政边界常见的另一个缺点是,它们是没有地理层次结构的离散区域。除了将各个区域相互比较之外,常见的要求是将这些区域本身的汇总数据与其他汇总数据进行比较。例如,实现 Huff 模型的零售商可能希望使用多个距离来运行此分析,这些距离可能与企业其他地方使用的行政区不一致。
单分辨率网格和多分辨率网格
单分辨率网格由离散单元组成,与包含这些单元的较大区域没有地理关系。例如,邮政编码与较大行政区划边界(例如可能包含邮政编码的城市或郡)的地理关系不一致。对于空间分析,了解不同区域之间的相互关系非常重要,而无需深入了解定义区域多边形的历史和法律。
多分辨率网格有时也称为分层网格,因为每个缩放级别的单元格都会在较高缩放级别细分为更小的单元格。多分辨率网格由包含在较大单元中的明确定义的单元层次结构组成。例如,人口普查小区包含街区组,而街区组包含街区。这种一致的分层关系对于统计汇总非常有用。例如,通过计算某个选区包含的所有街区组的收入的平均值,您可以显示包含这些街区组的该人口普查选区的平均收入。而使用邮政编码则无法实现这一点,因为所有邮政区域都位于单一分辨率下。由于没有标准化的方法来定义相邻地块或比较不同国家/地区的收入,因此很难将某个地块的收入与其周围地块的收入进行比较。
S2 和 H3 网格系统
本部分简要介绍了 S2 和 H3 网格系统。
S2
S2 几何图形是由 Google 开发并于 2011 年面向公众发布的开源分层网格系统。您可以使用 S2 网格系统为每个单元格分配一个唯一的 64 位整数,以便对空间数据进行整理和编入索引。分辨率分为 31 个级别。每个单元格都表示为一个方形,专用于对球形几何图形(有时称为地理)执行操作。每个方块都细分为四个较小的方块。邻居遍历(即识别相邻 S2 单元的能力)定义不太明确,因为方形可以有 4 个或 8 个相关邻居,具体取决于分析类型。以下是多分辨率 S2 网格单元的示例:
BigQuery 使用 S2 单元格为空间数据编制索引,并公开多个函数。例如,S2_CELLIDFROMPOINT
会返回包含给定级别地球表面上某个点的 S2 单元 ID。
H3
H3 是由 Uber 开发并供 Overture Maps 使用的开源分层网格系统。分辨率有 16 个级别。每个单元格都表示为一个六边形,并且与 S2 一样,每个单元格都分配有唯一的 64 位整数。在可视化覆盖墨西哥湾的 H3 单元格示例中,较小的 H3 单元格并未完全包含在较大的单元格中。
每个单元格都会细分为七个较小的六边形。此细分不是完全准确的,但对于许多用例来说已经足够了。每个单元格与六个相邻单元格共用一条边,从而简化了相邻遍历。例如,在每个级别,有 12 个五边形,它们与五个邻居共享一条边,而不是六个。虽然 BigQuery 不支持 H3,但您可以使用 适用于 BigQuery 的 Carto Analytics Toolbox 为 BigQuery 添加 H3 支持。
虽然 S2 库和 H3 库都是开源的,并且均采用 Apache 2 许可,但 H3 库提供了更详细的文档。
HEALPix
天文学领域常用的另一种球体网格化方案称为分层等面积等纬度像素化 (HEALPix)。HEALPix 与分层像素深度无关,但计算时间保持不变。
HEALPix 是一种分层等面积球体像素化方案。它用于表示和分析天球(或其他)数据。除了计算时间恒定之外,HEALPix 网格还具有以下特点:
- 网格单元格是分层的,其中会维护父子关系。
- 在特定层次结构中,单元格的面积相同。
- 这些单元遵循等纬度分布,从而提高了频谱方法的性能。
BigQuery 不支持 HEALPix,但有许多语言实现,包括 JavaScript,这可以方便地在 BigQuery 用户定义的函数 (UDF) 中使用。
每种索引编制策略的使用场景示例
本部分提供了一些示例,可帮助您评估哪种网格系统最适合您的用例。
许多分析和报告用例都涉及可视化,这既可以作为分析本身的一部分,也可以用于向业务利益相关方报告。这些可视化内容通常以 Web Mercator 格式呈现,这是 Google 地图和许多其他 Web 地图应用使用的平面投影。如果直观呈现起着至关重要的作用,H3 单元格会提供主观上更好的直观呈现体验。S2 单元(尤其是在较高纬度)往往比 H3 更容易出现失真,并且在平面投影中显示时,与较低纬度的单元格不一致。
H3 单元格可简化实现,其中邻居比较在分析中发挥着重要作用。例如,对城市各个区域进行比较分析有助于确定哪个位置适合开设新零售店或配送中心。该分析需要对给定单元的属性进行统计计算,并将其与相邻单元进行比较。
S2 单元格在具有全球性质的分析(例如涉及测量距离和角度的分析)中能发挥更好的作用。Niantic 的 Pokemon Go 利用 S2 单元来确定游戏资产的位置和分布方式。S2 单元的确切划分属性可确保游戏资产能够均匀分布在全球各地。
后续步骤
- 如需了解空间聚类的最佳实践,请参阅 BigQuery 上的空间聚类 - 最佳实践。
- 了解如何根据不完美的数据创建空间层次结构。
- 了解 GitHub 上的 S2 几何图形。
- 了解 GitHub 上的 H3 几何图形。
- 请参阅使用 H3、BigQuery 和 Earth Engine 的示例。