注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员驿站

淘宝店:http://shop106888457.taobao.com

 
 
 

日志

 
 

ArcMap中使用ArcPy实现Geometry与WKT的相互转换  

2014-11-22 10:50:56|  分类: ST查询 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在Web GIS迅猛发展的今天,使用浏览器来进行交互以其方便性、快捷性被广大用户所推崇,那么在传输格式方面,都已比较简单的JSON或者WKT来解决网络带宽带来的数据压力。


在ArcGIS10.2版本,已经提供了Geometry与JSON的相互转换,而且在现实业务中,Geometry与WKT的相互转换也比较多见。例如在ArcSDE环境中,用户可以使用Esri或者原生提供的函数来进行转换。

  1. SQL> select sde.st_astext(shape) from city where objectid<8;  
  2.   
  3. SDE.ST_ASTEXT(SHAPE)  
  4. ---------------------------------------------------------------------  
  5.   
  6. POINT Z ( 116.38094000 39.92361500 0.00000000)  
  7. POINT Z ( 117.20350000 39.13111900 0.00000000)  
  8. POINT Z ( 114.48978000 38.04512800 0.00000000)  
  9. POINT Z ( 112.56935000 37.87111300 0.00000000)  
  10. POINT Z ( 111.66330000 40.82094200 0.00000000)  
  11. POINT Z ( 123.41168000 41.79661600 0.00000000)  
  12. POINT Z ( 125.31543000 43.89256300 0.00000000)  
  13.   
  14. 已选择7行。  

如果数据格式并非存储在SDE中,而是存储在文件格式中,怎么获得相关的WKT呢?



一:Geometry2WKT

1:比如下面存储在FGDB的三个多边形

ArcMap中使用ArcPy实现Geometry与WKT的相互转换 - dingtao-wgs - 程序员驿站

 


2:创建一个TEXT类型的字段来存储WKT串,注意这个字段的长度,如果你的要素包含点比较多的话,长度可能要求比较高。我创建的字段名称为wkt,字段长度为4000.



3:创建好字段之后,打开要素类的属性表,然后选择wkt字段,右键选择Field Calculator选项

ArcMap中使用ArcPy实现Geometry与WKT的相互转换 - dingtao-wgs - 程序员驿站

 


4:打开字段计算器,选择Python,输入wkt=!SHAPE.wkt!

ArcMap中使用ArcPy实现Geometry与WKT的相互转换 - dingtao-wgs - 程序员驿站

 

注意:!SHAPE!是Python的固有写法,而且ArcPy也提供了其他函数,比如json、wkb、area等

http://resources.arcgis.com/en/help/main/10.2/index.html#/Geometry/018z00000070000000/



5:执行之后,我们可以看到wkt字段已经存储了这些Geometry转换后的wkt串文本信息。而且在转换过程中,并不需要ArcMap开启编辑。

ArcMap中使用ArcPy实现Geometry与WKT的相互转换 - dingtao-wgs - 程序员驿站

 


用途:其实使用这种方法不仅仅可以获得相关图形的WKT,也可以变相的为文件存储的数据保存历史。

意思很明白,在编辑数据之前,我可以把原来的数据以WKT存储在某个字段中,如果编辑后发现编辑的有问题,可以使用接下来介绍的WKT2Geometry方法把图形还原回来。



二:WKT2Geometry


在进行ST_Geometry的使用或者测试过程中经常会碰到这种情况

  1. select ssdl, t.shape.minx x, t.shape.miny y  
  2.   from GX_FM_PT t  
  3.  where sde.st_within(t.shape,sde.st_polyfromtext('polygon((119.91009745117188 31.763774721679688,119.91198954101563 31.763774721679688,119.91198954101563 31.765422670898438,119.91009745117188 31.763774721679688,119.91009745117188 31.763774721679688))',9)) = 1  

用户使用了一个WKT串来生成一个Geometry对象来进行空间查询,首先我需要验证这个WKT是什么样子的,是否正确,是否可能有查询结果,我就需要将WKT串转换成Geometry看一下,那么该功能就需要用户掌握了。


例如上面的截图,我希望将ObjectID=2的三角形更新为ObjectID=1的四边形,那我获得了ObjectID=1的WKT串就可以实现上述操作。

(该例子仅仅说明转换方法)



1:打开属性表,选中ObjectID=2的要素,然后选择SHAPE字段右键

ArcMap中使用ArcPy实现Geometry与WKT的相互转换 - dingtao-wgs - 程序员驿站

 



2:打开字段计算器,使用ArcPy提供的类FromWKT,里面输入字符串类型的WKT串

ArcMap中使用ArcPy实现Geometry与WKT的相互转换 - dingtao-wgs - 程序员驿站

 


3:执行之后可以看到相关图形已经发生了变化



  评论这张
 
阅读(533)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017