⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classifier.cs

📁 实现SHP
💻 CS
字号:
///GeoCon, free tool to create gml & svg from gis files. 
///Copyright(C) 2005 Amri Rosyada
///Distributed under GNU-LGPL, see a copy of the license in root directory
using System;
using System.Collections;

using GeoCon.Data;

namespace GeoCon.Classification
{
	/// <summary>
	/// Summary description for Classifier.
	/// </summary>
	[Serializable]
	public class Classifier
	{
		public ArrayList indexes;
		public ClassificationInfo Setup;

		#region constructors
		public Classifier()
		{
			//always throw exception?
		}
		public Classifier(ClassificationInfo cinfo)
		{
			Setup=cinfo;
		}
		public Classifier(ClassificationInfo cinfo,ArrayList idxs)
		{
			Setup=cinfo;
			indexes = idxs;
		}
		#endregion

		#region utilities
		protected ArrayList GetNonNullIndexes()
		{
			Field f=Setup.Field;
			if(indexes==null)
			{
				indexes=new ArrayList();
				for(int i=0;i<f.Count;i++) indexes.Add(i); 
			}
			ArrayList nnidx=new ArrayList();
			for(int j=0;j<indexes.Count;j++)
			{
				if(f[(int)indexes[j]]!=f.NullSymbol) nnidx.Add(indexes[j]);
			}
			return nnidx;
		}
		private object[] GetNonNullValues(out int[] idxs)
		{
			ArrayList aidx = GetNonNullIndexes();
			idxs=new int[aidx.Count];
			aidx.CopyTo(idxs); 
			object[] objs=new object[idxs.Length];
			for(int i=0;i<idxs.Length;i++)
			{
				objs[i]=Setup.Field[idxs[i]];
			}
			return objs;
		}
		protected object[] GetSortedNonNullValues(out int[] idxs)
		{
			object[] objs=GetNonNullValues(out idxs);
			Array.Sort(objs,idxs);
			return objs;
		}
		protected object[] GetActiveValues()
		{
			Field f=Setup.Field;
			if(indexes==null)
			{
				indexes=new ArrayList();
				for(int i=0;i<f.Count;i++) indexes.Add(i); 
			}
			object[] objs=new object[indexes.Count];
			for(int i=0;i<indexes.Count;i++)
			{
				objs[i]=Setup.Field[(int)(indexes[i])];
			}
			return objs;
		}
		protected void FillNullBin(Bin nullBin, int[] idxs)
		{
			int nullcount=indexes.Count-idxs.Length;
			if(nullcount<=0) return; //no null here
			int nc=0;
			for(int i=0;i<indexes.Count;i++)
			{
				//if(Setup.Field[(int)indexes[i]]==Setup.Field.NullSymbol) 
				if(Setup.Field[(int)indexes[i]].Equals(Setup.Field.NullSymbol)) 
				{
					nullBin.ContentsIndex.Add(indexes[i]);
					nc++;
					if(nc>nullcount) return; //all null have been added
				}
			}
		}
		#endregion

		#region single classification
		public BinCollection ClassifySingle()
		{
			Bin b = new Bin();
			b.DataType=Setup.Field.Type;
			if(indexes==null)
			{
				indexes=new ArrayList();
				for(int i=0;i<Setup.Field.Count;i++) indexes.Add(i);
			}
			for(int i=0;i<indexes.Count;i++) b.AddIndex((int)(indexes[i]));
			BinCollection bins = new BinCollection(Setup);

			bins.Add(b);
			return bins;
		}
		#endregion

		#region unique classification
		public virtual BinCollection ClassifyUnique()
		{
			BinCollection bins = new BinCollection(Setup);
			int[] idxs=new int[0];
			object[] objs=this.GetSortedNonNullValues(out idxs);
			if(objs.Length==0) return bins;

			bins.Add(new Bin(objs[0]));
			bins[bins.Count-1].DataType=Setup.Field.Type;
			bins[bins.Count-1].AddIndex(idxs[0]);
			for(int i=1;i<objs.Length;i++)
			{
				if(object.Equals(objs[i-1],objs[i]))
				//if(objs[i-1]==objs[i])
				{
					bins[bins.Count-1].AddIndex(idxs[i]);
				}
				else
				{
					bins.Add(new Bin(objs[i]));
					bins[bins.Count-1].DataType=Setup.Field.Type;
					bins[bins.Count-1].AddIndex(idxs[i]);
				}
			}

			FillNullBin(bins.NullBin,idxs);
			objs=null;
			idxs=null;
			return bins;
		}
		#endregion

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -