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

📄 coordinatesystemwktreader.cs

📁 Sharp Map 用于制作GIS系统S harp Map 用于制作GIS系统S harp Map 用于制作GIS系统
💻 CS
📖 第 1 页 / 共 2 页
字号:
		{
			//SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]]
			tokenizer.ReadToken("[");
			string name = tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken(",");
			tokenizer.NextToken();
			double majorAxis = tokenizer.GetNumericValue();
			tokenizer.ReadToken(",");
			tokenizer.NextToken();
			double e = tokenizer.GetNumericValue();
			//

			//tokenizer.ReadToken(",");
			tokenizer.NextToken();
			string authority = String.Empty;
			long authorityCode = -1;
			if (tokenizer.GetStringValue() == ",") //Read authority
			{
				tokenizer.ReadAuthority(ref authority, ref authorityCode);
				tokenizer.ReadToken("]");
			}
			IEllipsoid ellipsoid = new Ellipsoid(majorAxis, 0.0, e, true, LinearUnit.Metre, name, authority, authorityCode, String.Empty, string.Empty, string.Empty);
			return ellipsoid;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		private static IProjection ReadProjection(WktStreamTokenizer tokenizer)
		{
			//tokenizer.NextToken();// PROJECTION
			tokenizer.ReadToken("PROJECTION");
			tokenizer.ReadToken("[");//[
			string projectionName = tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken("]");//]
			tokenizer.ReadToken(",");//,
			tokenizer.ReadToken("PARAMETER");
			List<ProjectionParameter> paramList = new List<ProjectionParameter>();
			while (tokenizer.GetStringValue() == "PARAMETER")
			{
				tokenizer.ReadToken("[");
				string paramName = tokenizer.ReadDoubleQuotedWord();
				tokenizer.ReadToken(",");
				tokenizer.NextToken();
				double paramValue = tokenizer.GetNumericValue();
				tokenizer.ReadToken("]");
				tokenizer.ReadToken(",");
				paramList.Add(new ProjectionParameter(paramName, paramValue));
				tokenizer.NextToken();
			}
			string authority = String.Empty;
			long authorityCode = -1;
			IProjection projection = new Projection(projectionName, paramList, projectionName, authority, authorityCode, String.Empty, String.Empty, string.Empty);
			return projection;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		private static IProjectedCoordinateSystem ReadProjectedCoordinateSystem(WktStreamTokenizer tokenizer)
		{
			/*PROJCS[
				"OSGB 1936 / British National Grid",
				GEOGCS[
					"OSGB 1936",
					DATUM[...]
					PRIMEM[...]
					AXIS["Geodetic latitude","NORTH"]
					AXIS["Geodetic longitude","EAST"]
					AUTHORITY["EPSG","4277"]
				],
				PROJECTION["Transverse Mercator"],
				PARAMETER["latitude_of_natural_origin",49],
				PARAMETER["longitude_of_natural_origin",-2],
				PARAMETER["scale_factor_at_natural_origin",0.999601272],
				PARAMETER["false_easting",400000],
				PARAMETER["false_northing",-100000],
				AXIS["Easting","EAST"],
				AXIS["Northing","NORTH"],
				AUTHORITY["EPSG","27700"]
			]
			*/
			tokenizer.ReadToken("[");
			string name = tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken(",");
			tokenizer.ReadToken("GEOGCS");
			IGeographicCoordinateSystem geographicCS = ReadGeographicCoordinateSystem(tokenizer);
			tokenizer.ReadToken(",");
			IProjection projection = ReadProjection(tokenizer);
			IUnit unit = ReadLinearUnit(tokenizer);

			string authority = String.Empty;
			long authorityCode = -1;
			tokenizer.NextToken();
			List<AxisInfo> axes = new List<AxisInfo>(2);
			if (tokenizer.GetStringValue() == ",")
			{
				tokenizer.NextToken();
				while (tokenizer.GetStringValue() == "AXIS")
				{
					axes.Add(ReadAxis(tokenizer));
					tokenizer.NextToken();
				}
				if (tokenizer.GetStringValue() == "AUTHORITY")
				{
					tokenizer.ReadAuthority(ref authority, ref authorityCode);
					tokenizer.ReadToken("]");
				}
			}
			//This is default axis values if not specified.
			if (axes.Count == 0)
			{
				axes.Add(new AxisInfo("X", AxisOrientationEnum.East));
				axes.Add(new AxisInfo("Y", AxisOrientationEnum.North));
			}
			IProjectedCoordinateSystem projectedCS = new ProjectedCoordinateSystem(geographicCS.HorizontalDatum, geographicCS, unit as LinearUnit, projection, axes, name, authority, authorityCode, String.Empty, String.Empty, String.Empty);
			return projectedCS;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		private static IGeographicCoordinateSystem ReadGeographicCoordinateSystem(WktStreamTokenizer tokenizer)
		{
			/*
			GEOGCS["OSGB 1936",
			DATUM["OSGB 1936",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]]TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6277"]]
			PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]]
			AXIS["Geodetic latitude","NORTH"]
			AXIS["Geodetic longitude","EAST"]
			AUTHORITY["EPSG","4277"]
			]
			*/
			tokenizer.ReadToken("[");
			string name = tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken(",");
			tokenizer.ReadToken("DATUM");
			IHorizontalDatum horizontalDatum = ReadHorizontalDatum(tokenizer);
			tokenizer.ReadToken(",");
			tokenizer.ReadToken("PRIMEM");
			IPrimeMeridian primeMeridian = ReadPrimeMeridian(tokenizer);
			tokenizer.ReadToken(",");
			tokenizer.ReadToken("UNIT");
			IAngularUnit angularUnit = ReadAngularUnit(tokenizer);

			string authority = String.Empty;
			long authorityCode = -1;
			tokenizer.NextToken();
			List<AxisInfo> info = new List<AxisInfo>(2);
			if (tokenizer.GetStringValue() == ",")
			{
				tokenizer.NextToken();
				while (tokenizer.GetStringValue() == "AXIS")
				{
					info.Add(ReadAxis(tokenizer));
					tokenizer.NextToken();
				}
				if (tokenizer.GetStringValue() == "AUTHORITY")
				{
					tokenizer.ReadAuthority(ref authority, ref authorityCode);
					tokenizer.ReadToken("]");
				}
			}
			//This is default axis values if not specified.
			if (info.Count == 0)
			{
				info.Add(new AxisInfo("Lon", AxisOrientationEnum.East));
				info.Add(new AxisInfo("Lat", AxisOrientationEnum.North));
			}
			IGeographicCoordinateSystem geographicCS = new GeographicCoordinateSystem(angularUnit, horizontalDatum,
					primeMeridian, info, name, authority, authorityCode, String.Empty, String.Empty, String.Empty);
			return geographicCS;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		private static IHorizontalDatum ReadHorizontalDatum(WktStreamTokenizer tokenizer)
		{
			//DATUM["OSGB 1936",SPHEROID["Airy 1830",6377563.396,299.3249646,AUTHORITY["EPSG","7001"]]TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6277"]]
			Wgs84ConversionInfo wgsInfo = null;
			string authority = String.Empty;
			long authorityCode = -1;

			tokenizer.ReadToken("[");
			string name = tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken(",");
			tokenizer.ReadToken("SPHEROID");
			IEllipsoid ellipsoid = ReadEllipsoid(tokenizer);
			tokenizer.NextToken();
			while (tokenizer.GetStringValue() == ",")
			{
				tokenizer.NextToken();
				if (tokenizer.GetStringValue() == "TOWGS84")
				{
					wgsInfo = ReadWGS84ConversionInfo(tokenizer);
					tokenizer.NextToken();
				}
				else if (tokenizer.GetStringValue() == "AUTHORITY")
				{
					tokenizer.ReadAuthority(ref authority, ref authorityCode);
					tokenizer.ReadToken("]");
				}
			}
			// make an assumption about the datum type.
			IHorizontalDatum horizontalDatum = new HorizontalDatum(ellipsoid, wgsInfo, DatumType.HD_Geocentric, name, authority, authorityCode, String.Empty, String.Empty, String.Empty);

			return horizontalDatum;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		private static IPrimeMeridian ReadPrimeMeridian(WktStreamTokenizer tokenizer)
		{
			//PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]]
			tokenizer.ReadToken("[");
			string name = tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken(",");
			tokenizer.NextToken();
			double longitude = tokenizer.GetNumericValue();

			tokenizer.NextToken();
			string authority = String.Empty;
			long authorityCode = -1;
			if (tokenizer.GetStringValue() == ",")
			{
				tokenizer.ReadAuthority(ref authority, ref authorityCode);
				tokenizer.ReadToken("]");
			}
			// make an assumption about the Angular units - degrees.
			IPrimeMeridian primeMeridian = new PrimeMeridian(longitude, AngularUnit.Degrees, name, authority, authorityCode, String.Empty, String.Empty, String.Empty);

			return primeMeridian;
		}
		/*
		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		private static IVerticalCoordinateSystem ReadVerticalCoordinateSystem(WktStreamTokenizer tokenizer)
		{
			//VERT_CS["Newlyn",
			//VERT_DATUM["Ordnance Datum Newlyn",2005,AUTHORITY["EPSG","5101"]]
			//UNIT["metre",1,AUTHORITY["EPSG","9001"]]
			//AUTHORITY["EPSG","5701"]
			
			tokenizer.ReadToken("[");
			string name=tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken(",");
			tokenizer.ReadToken("VERT_DATUM");
			IVerticalDatum verticalDatum = ReadVerticalDatum(tokenizer);
			tokenizer.ReadToken("UNIT");
			IUnit unit = ReadUnit(tokenizer);
			string authority=String.Empty;
			string authorityCode=String.Empty; 
			tokenizer.ReadAuthority(ref authority, ref authorityCode);
			tokenizer.ReadToken("]");

			IVerticalCoordinateSystem verticalCS = new VerticalCoordinateSystem(name,verticalDatum,String.Empty,authority,authorityCode,String.Empty,String.Empty);
			return verticalCS;
		}*/

		/*
		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		private static IVerticalDatum  ReadVerticalDatum(WktStreamTokenizer tokenizer)
		{
			//VERT_DATUM["Ordnance Datum Newlyn",2005,AUTHORITY["5101","EPSG"]]
			tokenizer.ReadToken("[");
			string datumName=tokenizer.ReadDoubleQuotedWord();
			tokenizer.ReadToken(",");
			tokenizer.NextToken();
			string datumTypeNumber = tokenizer.GetStringValue();
			tokenizer.ReadToken(",");
			string authority=String.Empty;
			string authorityCode=String.Empty; 
			tokenizer.ReadAuthority(ref authority, ref authorityCode);
			DatumType datumType = (DatumType)Enum.Parse(typeof(DatumType),datumTypeNumber);
			IVerticalDatum verticalDatum = new VerticalDatum(datumType,String.Empty,authorityCode,authority,datumName,String.Empty,String.Empty);
			tokenizer.ReadToken("]");
			return verticalDatum;
		}*/


		/*
		/// <summary>
		/// 
		/// </summary>
		/// <param name="tokenizer"></param>
		/// <returns></returns>
		[Obsolete("Since the related objects have not been implemented")]
		private static IGeocentricCoordinateSystem ReadGeocentricCoordinateSystem(WktStreamTokenizer tokenizer)
		{
			throw new NotImplementedException("IGeocentricCoordinateSystem is not implemented");
		}*/
	}
}

⌨️ 快捷键说明

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