JAVA填充圆形相交区域_(转贴)怎样在ArcIMS的应用开发中实现圆形区域选择?

在本文中,我们通过圆的内接多边形法来实现。原理就是根据提供的圆心位置和半径,生成一个接近圆形的内接48边形,然后利用这个多边形对象再结合Filter进行空间查询。当然,内接多边形的边数越多就越接近圆,查询结果就越精确。示例代码如下:

//Java

public Polygon createCirlePolygon(Point pnt,double dRadius){

double sineTheta, cosineTheta, twoPi;

int numPoints = 48; //内接多边形的边数

Polygon poly=new Polygon();

Points pnts=new Points();

twoPi = 3.1415 * 2.0;

//构造多边形

for(int i=0;i

Point cpt = new Point();

sineTheta = Math.sin(twoPi * (i*1.0/ numPoints));

cosineTheta = Math.cos(twoPi * (i*1.0 / numPoints));

cpt.setX(pnt.getX() + dRadius * cosineTheta);

cpt.setY(pnt.getY() + dRadius * sineTheta);

pnts.addPointObject(cpt);

}

pnts.addPointObject(pnts.getPointObject(0));

Ring ring=new Ring();

ring.setPoints(pnts);

poly.addRing(ring);

return poly;

}

//ASP.NET

public IMSPolygon createCirlePolygon(IMSPoint pnt,double dRadius)

{

IMSPolygon poly=new IMSPolygon();

double sineTheta, cosineTheta, twoPi;

int numPoints = 48; //内接多边形的边数

IMSPoints pnts=new IMSPoints();

twoPi = 3.1415 * 2.0;

//构造多边形

for(int i=0;i

{

IMSPoint cpt = new IMSPoint();

sineTheta = Math.Sin(twoPi * (i*1.0/ numPoints));

cosineTheta = Math.Cos(twoPi * (i*1.0 / numPoints));

cpt.X=(pnt.X + dRadius * cosineTheta);

cpt.Y=(pnt.Y + dRadius * sineTheta);

pnts.Add(cpt);

}

pnts.Add(pnts[0]);

IMSParts parts=new IMSParts();

parts.Add(pnts);

poly.Parts=parts;

return poly;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值