• (转贴)怎样在ArcIMS的应用开发中实现圆形区域选择?


    内容摘要
    在基于ArcIMS的Web GIS的应用开发中,无论是通过HTML Viewer,还是ActiveX Connector 或者 Java Connector,我们经常需要提供圆形选择的工具,在地图上任意选择圆心和半径,进而查找位于该圆形区域内的某个图层内的要素。在这种情况下,由于这个圆的圆心并不是来自某个点状图层的要素,而这个圆也不是由图层中的点要素通过缓冲区生成,所以ArcIMS所提供的Buffer缓冲区功能无法直接调用,在这种情况下,我们可以采取其他的变通方式。
    过程描述
    在本文中,我们通过圆的内接多边形法来实现。原理就是根据提供的圆心位置和半径,生成一个接近圆形的内接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<numPoints;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<numPoints;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;
    }
  • 相关阅读:
    介绍几个程序员常去的网站
    你这辈子,为什么富不起来?!
    Bug解决:mysql 创建表字段Double类型长度
    RedisTemplate5种数据结构操作
    StringRedisTemplate与RedisTemplate区别
    Redis客户端信息的存取
    Anaconda安装pygame
    springboot启动报错
    idea上传项目到github
    Docker安装报错
  • 原文地址:https://www.cnblogs.com/finesite/p/336043.html
Copyright © 2020-2023  润新知