Sql ST_GeometryFromText(x)中的WKT无效
我试图使用presto函数Sql ST_GeometryFromText(x)中的WKT无效,sql,gis,presto,Sql,Gis,Presto,我试图使用presto函数ST_GeometryFromText将varchar WKT格式转换为几何体,但出现了此错误 Error running query: Invalid WKT: 0101000020E6100000000000407BF43E40000000203CFA3D40 数据库中的点格式以这种格式存储01010000020E610000000000407BF43E400000203CFA3D40为varchar,我只想将其转换为几何点,我以前在postgis中使用ST_X和
ST_GeometryFromText
将varchar WKT格式转换为几何体,但出现了此错误
Error running query: Invalid WKT: 0101000020E6100000000000407BF43E40000000203CFA3D40
数据库中的点格式以这种格式存储
01010000020E610000000000407BF43E400000203CFA3D40
为varchar
,我只想将其转换为几何点,我以前在postgis
中使用ST_X
和ST_Y
,但在迁移到presto后,这两个函数不受支持。如果您运行
SELECT ST_AsText('0101000020E6100000000000407BF43E40000000203CFA3D40')
…在postgis
中,您将获得点点(30.955005645752 29.9774799346924)
如果要分离经度和纬度,请运行:
SELECT ST_X(ST_AsText('0101000020E6100000000000407BF43E40000000203CFA3D40')), ST_Y(ST_AsText('0101000020E6100000000000407BF43E40000000203CFA3D40'))
我发现答案很简单,只需删除字符串的这一部分
'20E61000'
,一旦删除,函数就可以正常工作,我已经使用了这个函数
ST_GEOMFROMBINARY(FROM_HEX(REPLACE('0101000020E6100000000000407BF43E40000000203CFA3D40', '20E61000')))
它工作得很好,我还使用python Shapley wkb函数验证了答案。
0101000020E610000000000407BF43E400000203CFA3D40
不是有效的几何体文本。您是否尝试过ST_GeomFromBinary
?您可能需要先将字符串转换为二进制,然后再使用它,使用类似\u hex中的
的东西,我在\u hx中尝试过,但遇到错误“错误运行查询:无效形状类型”是的,我在使用postgis时使用过这些函数,但现在我使用的是presto,presto不支持所有这些函数,也不支持所有格式,它只支持这些功能,但是soemthing在格式上是错误的,这就是它不工作的原因,你知道如何解决这个问题吗?哦,我明白了。我不熟悉presto,但Stu AsText似乎是受支持的函数之一。第一个查询成功了吗?这听起来可能很基本,但您的数据是否使用了括号('0101000020E610000000000407BF43E400000203CFA3D40')?从错误消息来看,它们似乎丢失了。上面的格式实际上是HEXEWKB,presto不支持该格式,但不幸的是,它是PostGis的规范输出<代码>选择ST_AsHEXEWKB(ST_AsText('0101000020E610000000000407BF43E4000003CFA3D40')代码>以上输出应与输入相同,并显示格式为HEXEWKB。我还没有找到一个很好的方法在Presto中转换它,但是我正在考虑从中创建一个UDF