zoukankan      html  css  js  c++  java
  • 利用IFeatureIndex2 和 IIndexQuery2提高空间查询效率

                StringBuilder tSB = new StringBuilder();

                IFeatureClass tFeatureClass = (IFeatureClass)this._InDataset;

               

                IGeoDataset tGeodataset=(IGeoDataset)this._InDataset;

     

                IFeatureIndex2 tFeatureIndex = new FeatureIndexClass();

                ESRI.ArcGIS.esriSystem.ITrackCancel tTrackCancel=new CancelTracker();

                IIndexQuery tIndexQuery = tFeatureIndex as IIndexQuery;

                IIndexQuery2 tIndexQuery2 = (IIndexQuery2)tIndexQuery;

                tFeatureIndex.FeatureClass = tFeatureClass;

                tFeatureIndex.set_OutputSpatialReference(tFeatureClass.OIDFieldName, tGeodataset.SpatialReference);

                tFeatureIndex.Index(tTrackCancel, tGeodataset.Extent);//tGeodataset.Extent

     

                int iDex = tFeatureClass.FindField(this._FieldName);

                for (int i = 0; i < _Rows; i++)

                {

                    for (int j = 0; j < _Cols; j++)

                    {

                        double[] pX = null;

                        double[] pY = null;

                        getPolygon(i, j, ref pX, ref pY);

                        IPoint tPoint = new PointClass();

                        tPoint.X = pX[0] + (pX[3] - pX[0]) / 2;

                        tPoint.Y = pY[0] + (pY[0] - pY[3]) / 2;

                        

                        int oid= tIndexQuery2.WithinFeature(tPoint);

                        if (oid>-1)

                        {

                            IFeature tFeature = tFeatureClass.GetFeature(oid);

                            object o = tFeature.get_Value(iDex);

                            if (o != null && o.ToString().Trim() != "")

                            {

                                tSB.Append(o.ToString() + "  ");

                            }

                            else

                            {

                                tSB.Append("-9999" + "  ");

                            }

                        }

                        else

                        {

                            tSB.Append("-9999" + "  ");

                        }

                       

                    }

                }

             

                return tSB;

            }

     

     

    利用IFeatureIndex2 和 IIndexQuery2来作空间检索,比用IFeatureCursor tFeatureCursor= tFeatureClass.Search(null, true);然后遍历IFeature快一些。

  • 相关阅读:
    [Java]关于throw,throws,try{}catch(){} 悟寰轩
    jmx使用jmxmp协议连接器的实现 悟寰轩
    ActionContextCleanUp作用 悟寰轩
    空心验证码(定制) 悟寰轩
    struts升级:FileUploadInterceptor在struts 2.3.14.2的jar中修改了方法acceptFile中的参数 悟寰轩
    网络里的“逆世界” 悟寰轩
    离开时自动提示设为首页
    文本与图像上传到数据库
    在Delphi用vbscript的正则表达式
    ASP中输入特殊字符
  • 原文地址:https://www.cnblogs.com/cglNet/p/2391645.html
Copyright © 2011-2022 走看看