zoukankan      html  css  js  c++  java
  • (转贴)怎样在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;
    }
  • 相关阅读:
    IntelliJ IDEA快捷键
    Find Minimum in Rotated Sorted Array
    爬取淘宝交易记录的爬虫
    MR并行算法编程过程中遇到问题的思考
    Map.Entry用法示例
    给定一组数和一个目标值,返回和为目标值的集合(集合中的元素可重复)
    位运算:获取集合的子集
    Linux每次开机都要source profile的解决办法
    mysql数据导入导出
    linux下nginx编译安装(抄别人的,方便查看)
  • 原文地址:https://www.cnblogs.com/finesite/p/336043.html
Copyright © 2011-2022 走看看