posts - 119, comments - 62, trackbacks - 0, articles - 0
          內容摘要
          在基于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;
          }

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 河津市| 绥滨县| 临桂县| 麦盖提县| 衡南县| 濮阳县| 宣威市| 苏尼特左旗| 木里| 水富县| 沿河| 保靖县| 武胜县| 安顺市| 武冈市| 武川县| 昆山市| 郴州市| 文安县| 察隅县| 荥阳市| 武川县| 原阳县| 和静县| 广饶县| 湖州市| 错那县| 宣武区| 山西省| 迁西县| 惠州市| 鸡东县| 三穗县| 塘沽区| 宁都县| 金山区| 灯塔市| 西青区| 井研县| 咸宁市| 涡阳县|