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

程序员驿站

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

 
 
 

日志

 
 

ArcSDE for ST_Geometry的ST_Buffer的单位问题  

2015-02-06 08:47:32|  分类: ST查询 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

ArcSDE for ST_Geometry的ST_Buffer的单位问题

 ArcSDE  iarcgis.com 

导语

今天又有用户咨询ST_Buffer的单位问题,这个问题以前我也没有怎么测试过,统一的回答就是ST_Buffer的缓冲半径单位需要根据用户传入几何图形对象的投影单位而定。
比如如果他的投影单位为西安80,那么单位就是米,如果投影单位为WGS84,那么单位就是度。

问题出来了,当用户使用WGS84的时候,又希望缓冲为100米半径,怎么才能得到正确的结果。答复就是自己讲米与度的单位进行转化,但是说的简单,具体的转换好像在网上根本找不到。

解决方案

ArcGIS for Desktop有一个Buffer的ArcToolbox工具,这个工具非常好,因为不管是什么投影方式,系统支持不同单位的缓冲半径。这个Desktop进行了实时处理。

如果使用ST_geometry的st_buffer来做该怎么完成呢?

相关原理

因为用户使用的是地理投影,单位就是度,但是Buffer单位为米,那么我们可以讲地理投影动态投影成平面投影,然后用户米的单位做Buffer,缓冲结果后,然后再动态投影为地理投影。

概要操作

如果使用ST_transform进行投影转化,建议使用同一椭球体进行转化,因为比较简单,直接调用函数即可。如果是不同椭球体,ArcGIS10.1的该函数已经支持了该操作,但是操作比较麻烦,

具体参考:相关链接

 

本例就使用同一椭球体。

  • 源投影:WGS84 WKID:4326
  • 目标投影:Web墨卡托 WKID:3857

那么我就直接使用st_transform和st_buffer相结合的方式来完成,将wgs84转化为web墨卡托,然后进行buffer,然后再将web墨卡托转化为wgs84。
本例就是针对点图层p的点做1000000米的缓冲分析。

insert into po(objectid,shape) values(2,sde.st_transform (sde.st_buffer(sde.st_transform ( (select  shape from p),3857),1000000),4326));

精度操作

但是,概要操作不是很精确,因为我测试的点是随机的,如果我的目标地方在比如中国河南三门峡义马市的某个地方,我希望对某个点进行buffer,那么如果同一个椭球体,那么WGS84地理投影我需要转换为UTM某个对应于中国河南三门峡义马市的某个投影文件(具体哪一个我也不太清楚),如果不同椭球体,我可以转换到高斯克吕格的西安80的三度带中央经线117,那样的转换要比概要操作更加精确一些。

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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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