注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

创建地理空间变换

通过Pipeline Builder,您可以加载、变换和运用地理空间数据。如果您的地理空间工作流尚未被Pipeline Builder的当前功能支持,请参考Foundry的传统地理空间文档在代码库中变换您的数据。

建模地理空间数据

逻辑类型

Pipeline Builder使用逻辑类型的概念在内部建模地理空间数据,这是一种基础类型(字符串、整数、布尔值、数组、结构)加上对表示数据的额外约束。例如,Geometry类型被定义为一个必须是有效GeoJSON的字符串,而GeoPoint必须是一个包含经度在-180180之间和纬度在-9090之间的结构体,且两者都包含在内。支持类型的完整列表可以在下方找到。

Pipeline Builder中的所有逻辑类型都是其基础类型的继承者;例如,几何体可以作为一个期望输入类型为字符串的表达式的输入,但反之则不行。要从基础类型转换为扩展该基础类型的特定逻辑类型,您可以使用“逻辑类型转换”表达式,它将对数据应用与该逻辑类型相关的约束,并将无法通过此验证的值设为null。表达式指定逻辑类型作为输入和输出的能力确保了当一个地理空间特定表达式需要一个GeoJSON字符串时,将会接收到一个GeoJSON字符串。

支持的地理空间类型

Pipeline Builder当前支持以下地理空间类型:

  • GeoPoint: 一个由longitudelatitude组成的结构,其中longitude-180180之间的双精度数,latitude-9090之间的双精度数,两者都包含在内。GeoPoint必须是符合WGS:84或EPSG:4326坐标参考系统(CRS)的有效(x, y)坐标。
  • Geometry: 一个遵循GeoJSON规范的字符串化JSON数据块。个别坐标预计采用WGS:84/EPSG:4326格式,如同GeoPoint类型。
  • H3Index: 一个表示有效H3六边形索引的字符串。
  • LatLonBoundingBox: 一个由minLatminLonmaxLatmaxLon组成的结构表示的边界框,其中每个条目都是一个有效的GeoPoint,并且maxLat > minLatmaxLon > minLon
  • Ontology GeoPoint: 一个与Ontology的GeoPoint属性类型兼容的字符串,符合格式{lat},{lon},其中-90 <= lat <= 90-180 <= lon <= 180
  • MGRS: 一个表示有效MGRS(军事网格参考系统)坐标的字符串。

加载地理空间数据

Pipeline Builder支持多种不同的地理空间数据变换和表达式。

  • GeoPoint:
    • 构建GeoPoint列: 接受lat,lon对,验证上述界限,并将其转换为GeoPoint表示。
    • 从坐标系统(CRS)创建GeoPoint: 接受一个x,y对和一个坐标参考系统,将该(x,y)投影到WGS:84,然后构建一个GeoPoint表示。支持从EPSG数据库中的大多数坐标系统转换,包括所有UTM区域。
  • Geometry:
    • 解析已知文本(WKT): 将已知文本(WKT)字符串转换为几何逻辑类型。非必填地提供一个源坐标系统标识符,将源CRS转换为WGS:84,如果WKT尚未在WGS:84中。
    • 标准化Geometry: 给定一个WGS:84格式的GeoJSON字符串,标准化以下属性:正确顺序(右手法则)、闭合环、重复移除和点的恒定维度。
    • 从Shapefile中提取行: 给定一个原始shapefile的数据集,解析每个shapefile为包含每个条目几何和属性的行。输出数据集将有一个几何列以及用户列出的每个属性列。可以为非WGS:84数据集指定坐标参考系统。
    • 从GeoJSON中提取行: 给定一个原始GeoJSON文件的数据集,解析每个shapefile为包含每个条目几何和属性的行。输出数据集将有一个几何列以及用户列出的每个属性列。可以为非WGS:84数据集指定坐标参考系统。

还有其他表达式可以在上述两种类型之间进行转换,并将它们转换为H3索引、MGRS、边界框和Ontology GeoPoint格式。

在关于坐标参考系统和投影的文档中了解更多关于地理空间数据格式的信息。

变换地理空间数据

一旦您填充了Pipeline Builder的地理空间类型列,您就可以利用专门针对地理空间数据的变换。大多数变换(除了地理合并)目前在流式和批处理工作流中都支持。下面列出了一些亮点。

几何比较

  • 交集
  • 差异
  • 对称差异
  • 并集(列和聚合)

球面几何

  • 两点之间的哈弗赛因/大圆距离
  • 反向哈弗赛因距离(给定起点、距离和方位角,计算终点)
  • 几何的面积/质心/长度

H3

  • 获取某个分辨率下的H3六边形的邻居
  • 用H3六边形覆盖某个分辨率下的多边形

复杂形状近似

  • 椭圆/圆
  • 范围扇(环形扇区)
  • 给定几何的凸包

地理空间合并

Pipeline Builder支持以下地理空间合并:

几何交集合并

Pipeline Builder的几何交集合并需要两个数据集,每个数据集必须有一个几何类型的列。几何交集合并不接受Ontology GeoPoint或GeoPoint作为输入类型。在应用合并之前,我们建议标准化几何列并明确筛选出不需要在输出中的null值。如果管道中有不确定性或其他合并,我们建议在地理合并之前添加一个检查点。

Pipeline Builder可以合并中等大小几何的数据集(大约最多34个点),假设输出行数增加两倍,支持每侧最多100万行。对于偏斜数据,合并可以支持一侧最多2.5亿行,另一侧最多1.6千行。随着几何大小的增加,稳定性可能会下降。合并可以始终支持将一个巨大的几何(大约40k点)与最多50万行的数据集合并。更大规模可能会间歇性成功,但不被正式支持。

输出行数与交叉合并相当的几何交集合并可能导致合并中的稳定性下降。

作为几何交集合并的替代方案,配置为“几何相交”的交叉合并筛选可能提供更稳定的内存使用。然而,这种方法可能导致搭建时间急剧增加。另一个替代方案是在代码库中使用geospatial-tools PySpark库。请联系您的Palantir代表以获取更多信息。

几何距离合并

Pipeline Builder的几何距离合并需要两个数据集,每个数据集必须有一个几何类型的列,一个大于零的距离值,以及一个将决定提供的距离单位的坐标参考系统字符串。例如,如果为坐标参考系统提供“epsg:4326”,则假定距离以度为单位。与交集合并类似,我们建议标准化几何列,并明确筛选出不需要在输出中的null值。如果管道中有其他合并或不确定性,请在合并前添加一个检查点。

Pipeline Builder可以合并小几何的数据集(每个大约最多8个点),假设合并结果行数增加两倍,支持每侧最多100万行。当输出行数与交叉合并相当时,稳定性可能会下降。

作为几何距离合并的替代方案,配置了几何缓冲区和“几何相交”筛选的交叉合并可能在行数增加较大的情况下提供更稳定的内存使用。然而,这种方法可能在大多数情况下导致搭建时间急剧增加。

几何最近邻(KNN)合并

Pipeline Builder的几何最近邻合并需要两个数据集:一个几何的base数据集和一个点的neighbors数据集。k整数参数配置为每个基础几何查找的最近邻数量。需要一个坐标参考系统来确定如何计算和比较基础几何和邻居点之间的距离。结果将是组合的行集,其中每一行包含一个GeoPoint,该GeoPoint是离基础几何最近的k个点之一。平局被任意打破,结果无特定顺序返回。

请注意,这个合并有两个要求:

  • neighbors数据集中的所有GeoPoints必须能够适应执行器和驱动程序的内存。这目前是一个硬性要求,限制了合并的可扩展性。如果您的应用案例需要分发neighbors数据集,请联系您的Palantir代表。

  • Foundry目前仅接受neighbors数据集中的GeoPoint逻辑类型,以限制内存消耗。如果在合并的neighbors一侧需要非点几何,请联系您的Palantir代表。

实际上,Pipeline Builder支持k值适中(< 5),neighbors数据集中有多达数十万行,基础数据集中有100万几何。当两个数据集都有数十万行时,Pipeline Builder可以支持更大的k值。在这种情况下,查找多达几百个最近邻应该会很快完成。增加输入规模超出此点可能会间歇性成功,但目前不在一般支持范围内。

故障排除

如果您的合并遇到稳定性问题,请使用以下步骤进行补救:

  1. 在合并之前删除不必要的列。
  2. 简化输入几何(例如,您可以为大型几何使用更粗的粒度吗?)
  3. 垂直扩展;手动选择具有更多内存的驱动程序和执行器计算配置文件。
  4. 将最大输入数据集拆分为大约2500万行的集合,然后在单独的搭建中将结果联合在一起。
  5. 减少输出中的行数(即左右几何之间的交集数)。

预览变换结果

完成在Pipeline Builder中的数据变换后,您可以在地图上直观地验证这些变换的结果。在常规预览窗格中,选择您希望在地图上预览的单元格(单元格必须来自上述地理空间类型之一的列)。右键单击并选择打开地理预览

从预览窗格中打开地理预览。

一个新的预览选项卡将会出现,显示在地图上绘制的选定单元格。

选定单元格的地理预览。

在Ontology中使用地理空间数据

Pipeline Builder的地理空间功能旨在与平台上的下游数据无缝集成。

  • Ontology
    • Builder的几何列类型与Ontology的地理形状类型兼容,但请确保在将列映射到Builder中的对象之前应用“标准化几何”表达式。这确保了地理形状数据在索引到Ontology中时会通过验证。
    • 虽然当前的GeoPoint逻辑类型不能直接在Ontology中使用,但点可以在索引之前轻松转换为“Ontology GeoPoint”类型(等同于Ontology的地理哈希类型)。
  • 数据集
    • 地理空间类型数据在Builder管道的输出数据集中持久化,因此如果您从该数据集创建下游Builder管道,您的数据将仍保留其正确的逻辑/地理空间类型。
  • 地理时序同步
    • 您可以将GeoPoint和几何列映射到地理时序同步输出,以便在下游应用程序(如地图应用程序)中渲染点和几何。所有地理时序同步输出必须有一个GeoPoint列,指示与每行对应的观察位置。请查阅地理时序输出文档以获取有关如何在集成中配置地理空间属性的更多详细信息。