• 大小: 5KB
    文件类型: .cs
    金币: 2
    下载: 1 次
    发布日期: 2021-06-05
  • 语言: C#
  • 标签: C#  道格拉斯  Douglas  

资源简介

Douglas一Peukcer算法是目前公认的线状要素化简经典算法。C#编写,使用很方便

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Drawing;

namespace MapControlApplication2
{
    class Douglasclass
    {
        /// 
        /// 使用“道格拉斯—普克”算法减少点的数量
        /// 

        /// 需要减少的点
        /// 偏差
        /// 得到减少过后的结果点
        public List DouglasPeuckerReduction(List Points Double Tolerance)
        {
            //if (Tolerance == 0) return Points;
            if (Points == null || Points.Count < 3)//如果点的数量小于3个则返回
                return Points;
            Int32 firstPoint = 0;
            Int32 lastPoint = Points.Count - 1;
            List pointIndexsToKeep = new List();
            //把第一个点和最后一个点的序号加入要保存的序号?对于数据中第一个和最后一个点重合的情况不压缩
            pointIndexsToKeep.Add(firstPoint);
            pointIndexsToKeep.Add(lastPoint);
            //第一个点和最后一个点不能为同一个点
            while (Points[firstPoint].Equals(Points[lastPoint]))
            {
                lastPoint--;
            }
            DouglasPeuckerReduction(Points firstPoint lastPoint Tolerance ref pointIndexsToKeep);//道格拉斯-普克压缩
            List returnPoints = new List();
            pointIndexsToKeep.Sort();//对保留下来的序号进行排序
            foreach (Int32 index in pointIndexsToKeep)
            {
                returnPoints.Add(Points[index]);//将对应序号的点加入
            }
            return returnPoints;//返回压缩后的点
        }
        

        /// 
        /// 道格拉斯-普克压缩
        /// 

        /// 要处理的点
        /// 第一个点
        /// 最后一个点
        /// 偏差
        /// 要保留点的索引号
        private static void DouglasPeuckerReduction(List points Int32 firstPoint Int32 lastPoint Double tolerance ref List pointIndexsToKeep)
        {
            Double maxDistance = 0;
            Int32 indexFarthest = 0;
            for (Int32 inde

评论

共有 条评论