有效的WKT线串的正则表达式?

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

到目前为止,我有以下内容:

 select WKT, column1, column2
  from table
 where REGEXP_CONTAINS(WKT, r"-?(?:\.\d+|\d+(?:\.\d*)?)") is true

这可以解决大多数情况,但是我仍然遇到以下错误:

ST_GeogFromText failed: Linestring should have at least two unique points, but had 1

如何使用regex过滤掉Google BigQuery中的all无效LINESTRING?我不能使用ST_NUMPOINTS(),因为它需要一个GEOGRAPHY对象,并且如果该字符串无效,则无法将其转换为GEOGRAPHY

编辑:WKT LINESTRING具有以下格式:LINESTRING (x1 y1, x2 y2, x3 y3, ..., xn yn),其中每个(xn, yn)对表示第n个纬度/经度对。

regex google-bigquery gis wkt
2个回答
1
投票

不要使用REGEXP-它不可能解决所有问题。例如。 WKT的纬度可能大于90度,这会导致ST_GeogFromText失败,但几乎无法在REGEXP中发现。

使用SAFE prefix代替,当输入无效时,它使函数返回NULL而不是查询失败。这可以为您提供确切的验证!

select SAFE.ST_GeogFromText('foo')
NULL

0
投票

尝试以下原始正则表达式的扩展名

WHERE REGEXP_CONTAINS(WKT, r'LINESTRING \((?:(?:\.\d+|\d+(?:\.\d*)?) (?:\.\d+|\d+(?:\.\d*)?)(?:, |\))){2,}')
© www.soinside.com 2019 - 2024. All rights reserved.