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

📄 geometryfromwkt.cs

📁 Sharp Map 用于制作GIS系统S harp Map 用于制作GIS系统S harp Map 用于制作GIS系统
💻 CS
📖 第 1 页 / 共 2 页
字号:
			else if (token == ")")
				return ")";
			else if (token == ",")
				return ",";

			throw new Exception("Not a valid symbol in WKT format.");
		}

		/// <summary>
		/// Creates a Geometry using the next token in the stream.
		/// </summary>
		/// <param name="tokenizer">Tokenizer over a stream of text in Well-known Text
		/// format. The next tokens must form a &lt;Geometry Tagged Text&gt;.</param>
		/// <returns>Returns a Geometry specified by the next token in the stream.</returns>
		/// <remarks>
		/// Exception is thrown if the coordinates used to create a Polygon
		/// shell and holes do not form closed linestrings, or if an unexpected
		/// token is encountered.
		/// </remarks>
		private static Geometry ReadGeometryTaggedText(WktStreamTokenizer tokenizer)
		{
			tokenizer.NextToken();
			string type = tokenizer.GetStringValue().ToUpper();
			Geometry geometry = null;
			switch (type)
			{
				case "POINT":
				    geometry = ReadPointText(tokenizer);
				    break;
				case "LINESTRING":
				    geometry = ReadLineStringText(tokenizer);
				    break;
				case "MULTIPOINT":
				    geometry = ReadMultiPointText(tokenizer);
				    break;
				case "MULTILINESTRING":
				    geometry = ReadMultiLineStringText(tokenizer);
				    break;
				case "POLYGON":
				    geometry = ReadPolygonText(tokenizer);
				    break;
				case "MULTIPOLYGON":
				    geometry = ReadMultiPolygonText(tokenizer);
				    break;
				case "GEOMETRYCOLLECTION":
				    geometry = ReadGeometryCollectionText(tokenizer);
				    break;
				default:
					throw new Exception(String.Format(SharpMap.Map.numberFormat_EnUS, "Geometrytype '{0}' is not supported.", type));
			}
			return geometry;
		}

		/// <summary>
		/// Creates a <see cref="MultiPolygon"/> using the next token in the stream.
		/// </summary>
		/// <param name="tokenizer">tokenizer over a stream of text in Well-known Text
		/// format. The next tokens must form a MultiPolygon.</param>
		/// <returns>a <code>MultiPolygon</code> specified by the next token in the 
		/// stream, or if if the coordinates used to create the <see cref="Polygon"/>
		/// shells and holes do not form closed linestrings.</returns>
		private static MultiPolygon ReadMultiPolygonText(WktStreamTokenizer tokenizer)
		{
			MultiPolygon polygons = new MultiPolygon();
			string nextToken = GetNextEmptyOrOpener(tokenizer);
			if (nextToken == "EMPTY")
				return polygons;

			Polygon polygon = ReadPolygonText(tokenizer);
			polygons.Polygons.Add(polygon);
			nextToken = GetNextCloserOrComma(tokenizer);
			while (nextToken == ",")
			{
				polygon = ReadPolygonText(tokenizer);
				polygons.Polygons.Add(polygon);
				nextToken = GetNextCloserOrComma(tokenizer);
			}
			return polygons;
		}

		/// <summary>
		/// Creates a Polygon using the next token in the stream.
		/// </summary>
		/// <param name="tokenizer">Tokenizer over a stream of text in Well-known Text
		///  format. The next tokens must form a &lt;Polygon Text&gt;.</param>
		/// <returns>Returns a Polygon specified by the next token
		///  in the stream</returns>
		///  <remarks>
		///  ParseException is thown if the coordinates used to create the Polygon
		///  shell and holes do not form closed linestrings, or if an unexpected
		///  token is encountered.
		///  </remarks>
		private static Polygon ReadPolygonText(WktStreamTokenizer tokenizer)
		{
			Polygon pol = new Polygon();
			string nextToken = GetNextEmptyOrOpener(tokenizer);
			if (nextToken == "EMPTY")
				return pol;

			pol.ExteriorRing = new LinearRing(GetCoordinates(tokenizer));
			nextToken = GetNextCloserOrComma(tokenizer);
			while (nextToken == ",")
			{
				//Add holes
				pol.InteriorRings.Add(new LinearRing(GetCoordinates(tokenizer)));
				nextToken = GetNextCloserOrComma(tokenizer);
			}
			return pol;

		}


		/// <summary>
		/// Creates a Point using the next token in the stream.
		/// </summary>
		/// <param name="tokenizer">Tokenizer over a stream of text in Well-known Text
		/// format. The next tokens must form a &lt;Point Text&gt;.</param>
		/// <returns>Returns a Point specified by the next token in
		/// the stream.</returns>
		/// <remarks>
		/// ParseException is thrown if an unexpected token is encountered.
		/// </remarks>
		private static Point ReadPointText(WktStreamTokenizer tokenizer)
		{
			Point p = new Point();
			string nextToken = GetNextEmptyOrOpener(tokenizer);
			if (nextToken == "EMPTY")
				return p;
			p.X = GetNextNumber(tokenizer);
			p.Y = GetNextNumber(tokenizer);
			GetNextCloser(tokenizer);
			return p;
		}

		/// <summary>
		/// Creates a Point using the next token in the stream.
		/// </summary>
		/// <param name="tokenizer">Tokenizer over a stream of text in Well-known Text
		/// format. The next tokens must form a &lt;Point Text&gt;.</param>
		/// <returns>Returns a Point specified by the next token in
		/// the stream.</returns>
		/// <remarks>
		/// ParseException is thrown if an unexpected token is encountered.
		/// </remarks>
		private static MultiPoint ReadMultiPointText(WktStreamTokenizer tokenizer)
		{
			SharpMap.Geometries.MultiPoint mp = new MultiPoint();
			string nextToken = GetNextEmptyOrOpener(tokenizer);
			if (nextToken == "EMPTY")
				return mp;
			mp.Points.Add(new SharpMap.Geometries.Point(GetNextNumber(tokenizer),GetNextNumber(tokenizer)));
			nextToken = GetNextCloserOrComma(tokenizer);
			while (nextToken == ",")
			{
				mp.Points.Add(new SharpMap.Geometries.Point(GetNextNumber(tokenizer), GetNextNumber(tokenizer)));
				nextToken = GetNextCloserOrComma(tokenizer);
			}
			return mp;
		}

		/// <summary>
		/// Creates a <see cref="MultiLineString"/> using the next token in the stream. 
		/// </summary>
		/// <param name="tokenizer">tokenizer over a stream of text in Well-known Text format. The next tokens must form a MultiLineString Text</param>
		/// <returns>a <see cref="MultiLineString"/> specified by the next token in the stream</returns>
		private static MultiLineString ReadMultiLineStringText(WktStreamTokenizer tokenizer)
		{
			MultiLineString lines = new MultiLineString();
			string nextToken = GetNextEmptyOrOpener(tokenizer);
			if (nextToken == "EMPTY")
				return lines;

			lines.LineStrings.Add(ReadLineStringText(tokenizer));
			nextToken = GetNextCloserOrComma(tokenizer);
			while (nextToken == ",")
			{
				lines.LineStrings.Add(ReadLineStringText(tokenizer));
				nextToken = GetNextCloserOrComma(tokenizer);
			}
			return lines;
		}

		/// <summary>
		/// Creates a LineString using the next token in the stream.
		/// </summary>
		/// <param name="tokenizer">Tokenizer over a stream of text in Well-known Text format.  The next
		/// tokens must form a LineString Text.</param>
		/// <returns>Returns a LineString specified by the next token in the stream.</returns>
		/// <remarks>
		/// ParseException is thrown if an unexpected token is encountered.
		/// </remarks>
		private static LineString ReadLineStringText(WktStreamTokenizer tokenizer)
		{
			return new SharpMap.Geometries.LineString(GetCoordinates(tokenizer));
		}

		/// <summary>
		/// Creates a <see cref="GeometryCollection"/> using the next token in the stream.
		/// </summary>
		/// <param name="tokenizer"> Tokenizer over a stream of text in Well-known Text
		/// format. The next tokens must form a GeometryCollection Text.</param>
		/// <returns>
		/// A <see cref="GeometryCollection"/> specified by the next token in the stream.</returns>
		private static GeometryCollection ReadGeometryCollectionText(WktStreamTokenizer tokenizer)
		{
			GeometryCollection geometries = new GeometryCollection();			
			string nextToken = GetNextEmptyOrOpener(tokenizer);
			if (nextToken.Equals("EMPTY"))
				return geometries;
			geometries.Collection.Add(ReadGeometryTaggedText(tokenizer));
			nextToken = GetNextCloserOrComma(tokenizer);
			while (nextToken.Equals(","))
			{
				geometries.Collection.Add(ReadGeometryTaggedText(tokenizer));
				nextToken = GetNextCloserOrComma(tokenizer);
			}
			return geometries;
		}        

	}
}

⌨️ 快捷键说明

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