BigQuery 无法识别形状多边形

问题描述 投票:0回答:1

我有一些多边形正在尝试上传到 BigQuery。多边形基于点(纬度和经度)和半径创建

shapely
,即
polygon = shapely.geometry.Point(lng, lat).buffer(r)
。首先使用
geojson.dumps(mapping(polygon))
将它们转换为 geojson 数据框,然后上传到 BigQuery,最后使用
SELECT SAFE.st_geogfromgeojson(polygon, make_valid => TRUE) FROM table_name
转换为 GEOGRAPHY 类型。

但是,作为此过程的一部分,某些条目变为 NULL(上传的数据框中没有缺失值)。我怀疑这与 BigQuery 没有完全识别形状良好的多边形有关,并且无效的多边形被自动删除。

有没有办法确保这种情况不会发生?

python google-bigquery
1个回答
0
投票

您使用的查询具有

SAFE.
前缀 - 其设计正是为了允许发生这种情况,并将 BigQuery 无法接受的内容转换为 NULL。

删除

SAFE.
前缀,查询将失败,并且您应该收到一个错误,描述为什么某些内容无法转换为
Geography
类型。

我通常做的是创建一个失败的表:

CREATE TABLE tmp.failures AS
SELECT geoid, polygon
FROM table_name
WHERE polygon IS NOT NULL 
 AND SAFE.st_geogfromgeojson(polygon, make_valid => TRUE) IS NULL

这会创建一个仅失败的表 - 原始多边形不为 NULL 的行,但结果为 NULL。然后,您可以通过删除

SAFE.
前缀并检查错误消息,使用诸如

之类的查询来一一检查每个失败行的原因
SELECT st_geogfromgeojson(polygon, make_valid => TRUE)
WHERE geoid = 12345
© www.soinside.com 2019 - 2024. All rights reserved.