Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ST_GeometryFromText(x)中的WKT无效_Sql_Gis_Presto - Fatal编程技术网

Sql ST_GeometryFromText(x)中的WKT无效

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和

我试图使用presto函数
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