利用GeometryService中的buffer功能做polyline的缓冲区

   最近由于工作中需要对查询出来的polyline做缓冲区,以增加line对象对鼠标点击事件的敏感度。按照网上和esri官方给出的例子,代码如下

private var bufferParameters:BufferParameters=new BufferParameters;

  <esri:GeometryService id="geometryService" url=">

<esri:SpatialReference wkid="4326"  id="sp" />

       bufferParameters.geometries=myLastFeatureArr;
       bufferParameters.unit = GeometryService.UNIT_METER;
       bufferParameters.distances =[200]; // [ 2000, 4000 ];50.0 / 6378137.0 * 180.0 / Math.PI
       bufferParameters.bufferSpatialReference =sp;
       bufferParameters.outSpatialReference =sp;
       geometryService.addEventListener(GeometryServiceEvent.BUFFER_COMPLETE, bufferCompleteHandler);       
       geometryService.buffer(bufferParameters);

 private function bufferCompleteHandler(event:GeometryServiceEvent):void
   {
    geometryService.removeEventListener(GeometryServiceEvent.BUFFER_COMPLETE, bufferCompleteHandler);
       for each (var geometry:Polygon in event.result)
    {
      var graphic:Graphic = new Graphic();
      graphic.geometry = geometry;    }
   }
其中myLastFeatureArr是一个array,里面存放着要做缓冲区的polyline对象。对于GeometryService的url我是自己发布的一个服务,当然你也可以用esri在线的服务。sp 是我声明的一个参考坐标系,我们常用的wgs_84的wkid就是4326,。 这样做完event.result  的结果总是null。纠结了很长时间,我跟官网是的例子基本一样啊。后来同事说好像要先对polyline做一次simplify(简单化)。我照做了还是不行。我从网上又找了些资料,有人说要先对每一个polyline设定参考坐标系,gra.geometry.spatialReference = sp;
        myLastFeatureArr.push(gra.geometry)
;  果真有效果,这次event.result  的结果不是null。可是一看结果的坐标就傻了,根本不对,polyline的坐标范围经度是123.左右,可是返回结果里面有300多也有-80多,绘出来的缓冲区当然也不对了。继续查资料,后来在网上查找到这句话,

        点(Points)和多点(Multipoints):若单位(unit)是长度的,如:米、英尺等,测地线缓冲(geodesic buffering)分析将执行 is performed.
        线(Polylines)和多边形(Polygons):单位(unit)必须是角度的,如:十进制度数,缓冲区分析才能执行。

好了这次找到原因了。对200做了一次角度转换bufferParameters.distances=[200/6378137.0 * 180.0/Math.PI];这次总算得到了正确的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值