C#+AE 对图层内的要素 按照从上到下 从左到右 排序算法实现

3 篇文章 0 订阅
2 篇文章 0 订阅

思路: 1. 首先 获取整个图层的Extend   获取到 Extend的右下角点坐标   Extend.LowerRight

            2.然后循环图层内的要素  用要素的Envelope.UpperLeft去和  Extend.LowerRight 的  x 和y  做比较    需要用到递归

具体实现:

        /// <summary>
        /// 图层要素按照从上到下,从左到右排序
        /// </summary>
        /// <param name="pGeoDataset">图层的矢量地理数据集 </param>
        /// <param name="plst">图层内所有要素的集合</param>
        private void setIndex(IGeoDataset pGeoDataset ,List<IFeature> plst)
        {
            IPoint pExtendUlpt = pGeoDataset.Extent.LowerRight;
            double dMinx = pExtendUlpt.X;
            double dMaxy = pExtendUlpt.Y;
            IFeature pUlFeature = null;
            int ix = -1;
            foreach (IFeature pFeature in plst)
            {
                ix++;
                //IPoint ULpt = ((pFeature.Shape)as  IArea).Centroid;
                IPoint ULpt = pFeature.Shape.Envelope.UpperLeft;

                if ((ULpt.X < dMinx && ULpt.Y > dMaxy) || (ULpt.X > dMinx && ULpt.Y > dMaxy))
                {
                    dMinx = ULpt.X;
                    dMaxy = ULpt.Y;
                    pUlFeature = pFeature;
                }
            }
            if(pUlFeature!=null){
                M_LstIndexF.Add(pUlFeature.OID);
                plst.Remove(pUlFeature);
                setIndex(pGeoDataset, plst);
            }
        }

======================================调用方式
List<int> M_LstIndexF = new List<int>();
setIndex((pFeatureLayer.FeatureClass as IGeoDataset),lstFeatures);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值