用于空间分析的网格系统
本文档介绍在 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 单元)的定义不太明确,因为正方形可以有四个或八个相关相邻项,具体取决于分析类型。以下是多分辨率 S2 网格单元的示例:
BigQuery 使用 S2 单元将空间数据编入索引并公开多个函数。例如,S2_CELLIDFROMPOINT
会返回 S2 单元 ID,该 ID 包含地球表面上给定级别的点。
H3
H3 是 Uber 开发的开源分层网格系统,由 Overture Maps 使用。分辨率有 16 个级别。每个单元均表示为六边形,并且与 S2 一样,每个单元分配有一个唯一的 64 位整数。在关于覆盖墨西哥湾的 H3 单元可视化的示例中,较小的 H3 单元并未完全包含在较大的单元中。
每个单元格会细分为七个小六边形。细分并不精确,但足以满足许多使用场景的需求。每个单元格与六个相邻单元格共用一条边,从而简化了相邻遍历。例如,在每个级层,有 12 个五边形,它们与五个相邻项(而不是六个)共用一个边。虽然 BigQuery 不支持 H3,但您可以使用适用于 BigQuery 的 Carto Analytics 工具箱为 BigQuery 添加 H3 支持。
虽然 S2 和 H3 库都是开源的,并且可通过 Apache 2 许可获得,但 H3 库的文档更详细。
HEALPix
天文学领域常用的另一种球体网格化方案称为分层等面积等纬度像素化 (HEALPix)。HEALPix 与分层像素深度无关,但计算时间保持不变。
HEALPix 是球体的分层等面积像素化方案。它用于表示和分析天体(或其他)球体的数据。除了恒定计算时间之外,HEALPix 网格还具有以下特征:
- 网格单元是分层的,其中父子关系得以维持。
- 在特定层次结构中,单元的区域相同。
- 这些单元遵循等纬度分布,从而提高了频谱方法的性能。
BigQuery 不支持 HEALPix,但有许多语言实现,包括 JavaScript,这可以方便地在 BigQuery 用户定义的函数 (UDF) 中使用。
每种索引编制策略的示例用例
本部分提供了一些示例,可帮助您评估哪种网格系统最适合您的用例。
许多分析和报告使用场景都涉及可视化,作为分析本身的一部分或向业务利益相关方报告。这些可视化效果通常呈现在 Web Mercator 中,这是 Google 地图和许多其他网页地图应用使用的平面投影。如果可视化发挥着重要作用,则 H3 单元格可以提供主观更好的可视化体验。S2 单元(尤其是在纬度较高的单元)往往比 S3 看起来更失真,并且在以平面投影呈现时,与纬度较低的单元不一致。
H3 单元简化了实现,其中相邻比较在分析中发挥着重要作用。例如,对城市各个区域之间的比较分析可能有助于确定哪个位置适合开设新的零售店或分销中心。分析需要对给定单元与其相邻单元进行比较的属性进行统计计算。
S2 单元在全局性的分析(例如涉及距离和角度测量的分析)中表现更佳。Niantic 的 Pokemon Go 利用 S2 单元来确定游戏资产的位置和分布方式。S2 单元的确切划分属性可确保游戏资产能够均匀分布在全球各地。
后续步骤
- 如需了解空间聚簇的最佳做法,请参阅 BigQuery 上的空间聚簇 - 最佳做法。
- 了解如何根据不完整的数据创建空间层次结构。
- 了解 GitHub 上的 S2 几何图形。
- 了解 GitHub 上的 H3 几何图形。
- 请参阅使用 H3、BigQuery 和 Earth Engine 的示例。