一个转换polygon的st_astext为标准json的sql解析

先上代码

select replace(replace(replace(replace(replace(replace(replace(replace(replace('('||trim(substr(sde.st_astext(t.shape),instr(sde.st_astext(t.shape),'(')))||')','((((','((('),'))))',')))'),', ','`'),'( ','<'),'`','],['),' ',','),'(','['),'<','['),')',']') from tablex t

以上sql,可以实现把
POLYGON (( 120.111 32.1121, 120.32423 32.1213, 120.32423 32.1213))
转换为
[[[120.111,32.1121],[120.32423,32.1213],[120.32423,32.1213]]]

MULTIPOLYGON ((( 120.111 32.1121, 120.32423 32.1213, 120.32423 32.1213)),(( 120.111 32.1121, 120.32423 32.1213, 120.32423 32.1213)),(( 120.111 32.1121, 120.32423 32.1213, 120.32423 32.1213)))
转换为
[[[120.111,32.1121],[120.32423,32.1213],[120.32423,32.1213]],[[120.111,32.1121],[120.32423,32.1213],[120.32423,32.1213]],[[120.111,32.1121],[120.32423,32.1213],[120.32423,32.1213]]]
从而实现只要是polygon,都是[点串集合]统一的3层[[[数组
分析一下上面的sql实现
第一步sde.st_astext(t.shape) 不多说,st_geometry函数
第二步trim(substr(sde.st_astext(t.shape),instr(sde.st_astext(t.shape),’(’))) 去除前缀的POLYGON或者MULTIPOLYGON
第三步replace(replace(’(’||trim(substr(sde.st_astext(t.shape),instr(sde.st_astext(t.shape),’(’)))||’)’,’((((’,’(((’),’))))’,’)))’) 在第二步上两头都加上了一层括号,然后把4层括号((((替换为3层(((,实现了不论POLYGON还是MULTIPOLYGON 结果的结构统一性,即如果是MULTIPOLYGON 则4层会替换成3层,如果是POLYGON,则3层还是3层
后续几步都是替换步骤
1.先把原来的’, ‘(逗号后有个空格),替换为’`’(或者其他字符只要不是括号点之类的)
2.然后把’( ‘(括号后有个空格)替换为’<’(或者其他字符只要不是括号点之类的)
3.然后把之前1替换的字符替换成’],[’
4.再把2中替换的’<‘换成’[’,其他括号分别对应换成’[’,’]'即可

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值