WKTStreamTokenizer.cs
上传用户:sex100000
上传日期:2013-11-09
资源大小:1377k
文件大小:4k
源码类别:

GIS编程

开发平台:

C#

  1. // Copyright 2005, 2006 - Morten Nielsen (www.iter.dk)
  2. //
  3. // This file is part of SharpMap.
  4. // SharpMap is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU Lesser General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // (at your option) any later version.
  8. // 
  9. // SharpMap is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU Lesser General Public License for more details.
  13. // You should have received a copy of the GNU Lesser General Public License
  14. // along with SharpMap; if not, write to the Free Software
  15. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
  16. // SOURCECODE IS MODIFIED FROM ANOTHER WORK AND IS ORIGINALLY BASED ON GeoTools.NET:
  17. /*
  18.  *  Copyright (C) 2002 Urban Science Applications, Inc. 
  19.  *
  20.  *  This library is free software; you can redistribute it and/or
  21.  *  modify it under the terms of the GNU Lesser General Public
  22.  *  License as published by the Free Software Foundation; either
  23.  *  version 2.1 of the License, or (at your option) any later version.
  24.  *
  25.  *  This library is distributed in the hope that it will be useful,
  26.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  27.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  28.  *  Lesser General Public License for more details.
  29.  *
  30.  *  You should have received a copy of the GNU Lesser General Public
  31.  *  License along with this library; if not, write to the Free Software
  32.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  33.  *
  34.  */
  35. #region Using
  36. using System;
  37. using System.IO;
  38. using SharpMap.Converters.WellKnownText.IO;
  39. #endregion
  40. namespace SharpMap.Converters.WellKnownText
  41. {
  42. /// <summary>
  43. /// Reads a stream of Well Known Text (wkt) string and returns a stream of tokens.
  44. /// </summary>
  45. internal class WktStreamTokenizer : StreamTokenizer
  46. {
  47. #region Constructors
  48. /// <summary>
  49. /// Initializes a new instance of the WktStreamTokenizer class.
  50. /// </summary>
  51. /// <remarks>The WktStreamTokenizer class ais in reading WKT streams.</remarks>
  52. /// <param name="reader">A TextReader that contains </param>
  53. public WktStreamTokenizer(TextReader reader) : base(reader, true)
  54. {
  55. if (reader==null)
  56. {
  57. throw new ArgumentNullException("reader");
  58. }
  59. }
  60. #endregion
  61. #region Methods
  62. /// <summary>
  63. /// Reads a token and checks it is what is expected.
  64. /// </summary>
  65. /// <param name="expectedToken">The expected token.</param>
  66. internal void ReadToken(string expectedToken)
  67. {
  68. this.NextToken();
  69. if (this.GetStringValue()!=expectedToken)
  70. {
  71. throw new Exception(String.Format(SharpMap.Map.numberFormat_EnUS, "Expecting ('{3}') but got a '{0}' at line {1} column {2}.", this.GetStringValue(), this.LineNumber, this.Column, expectedToken));
  72. }
  73. }
  74. /// <summary>
  75. /// Reads a string inside double quotes.
  76. /// </summary>
  77. /// <remarks>
  78. /// White space inside quotes is preserved.
  79. /// </remarks>
  80. /// <returns>The string inside the double quotes.</returns>
  81. public string ReadDoubleQuotedWord()
  82. {
  83. string word="";
  84. ReadToken(""");
  85. NextToken(false);
  86. while (GetStringValue()!=""")
  87. {
  88. word = word+ this.GetStringValue();
  89. NextToken(false);
  90. return word;
  91. }
  92. /// <summary>
  93. /// Reads the authority and authority code.
  94. /// </summary>
  95. /// <param name="authority">String to place the authority in.</param>
  96. /// <param name="authorityCode">String to place the authority code in.</param>
  97. public void ReadAuthority(ref string authority,ref long authorityCode)
  98. {
  99. //AUTHORITY["EPGS","9102"]]
  100. if(GetStringValue() != "AUTHORITY")
  101. ReadToken("AUTHORITY");
  102. ReadToken("[");
  103. authority = this.ReadDoubleQuotedWord();
  104. ReadToken(",");
  105. long.TryParse(this.ReadDoubleQuotedWord(),out authorityCode);
  106. ReadToken("]");
  107. }
  108. #endregion
  109. }
  110. }