コード例 #1
0
        private static IEllipsoid ReadEllipsoid(WktStreamTokenizer tokenizer)
        {
            //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(",");

            string authority     = "";
            string authorityCode = "";

            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            tokenizer.ReadToken("]");
            IEllipsoid ellipsoid = new Ellipsoid(majorAxis, 0.0, e, true, LinearUnit.Meters, "", authority, authorityCode, name, "", "");

            return(ellipsoid);
        }
コード例 #2
0
        /// <summary>
        /// Creates the appropriate object given a string containing XML.
        /// </summary>
        /// <param name="wkt">String containing XML.</param>
        /// <returns>Object representation of the XML.</returns>
        /// <exception cref="ParseException">If a token is not recognised.</exception>
        public static object Create(string wkt)
        {
            object returnObject = null;
            StringReader reader = new StringReader(wkt);
            WktStreamTokenizer tokenizer = new WktStreamTokenizer(reader);
            tokenizer.NextToken();
            string objectName=tokenizer.GetStringValue();
            switch (objectName)
            {
                case "UNIT":
                    IUnit unit = ReadUnit(tokenizer);
                    returnObject = unit;
                    break;
                case "VERT_DATUM":
                    IVerticalDatum verticalDatum = ReadVerticalDatum(tokenizer);
                    returnObject = verticalDatum;
                    break;
                case "SPHEROID":
                    IEllipsoid ellipsoid = ReadEllipsoid(tokenizer);
                    returnObject = ellipsoid;
                    break;
                case "TOWGS84":
                    WGS84ConversionInfo wgsInfo = ReadWGS84ConversionInfo(tokenizer);
                    returnObject = wgsInfo;
                    break;
                case "DATUM":
                    IHorizontalDatum horizontalDatum = ReadHorizontalDatum(tokenizer);
                    returnObject = horizontalDatum;
                    break;
                case "PRIMEM":
                    IPrimeMeridian primeMeridian = ReadPrimeMeridian(tokenizer);
                    returnObject = primeMeridian;
                    break;
                case "VERT_CS":
                    IVerticalCoordinateSystem verticalCS = ReadVerticalCoordinateSystem(tokenizer);
                    returnObject = verticalCS;
                    break;
                case "GEOGCS":
                    IGeographicCoordinateSystem geographicCS = ReadGeographicCoordinateSystem(tokenizer);
                    returnObject = geographicCS;
                    break;
                case "PROJCS":
                    IProjectedCoordinateSystem projectedCS = ReadProjectedCoordinateSystem(tokenizer);
                    returnObject = projectedCS;
                    break;
                case "COMPD_CS":
                    ICompoundCoordinateSystem compoundCS = ReadCompoundCoordinateSystem(tokenizer);
                    returnObject = compoundCS;
                    break;
                case "GEOCCS":
                case "FITTED_CS":
                case "LOCAL_CS":
                    throw new NotSupportedException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} is not implemented.",objectName));
                default:
                    throw new ParseException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "'{0'} is not recongnized.",objectName));

            }
            reader.Close();
            return returnObject;
        }
コード例 #3
0
        private string GetNextWord(WktStreamTokenizer tokenizer)
        {
            TokenType type  = tokenizer.NextToken();
            string    token = tokenizer.GetStringValue();

            if (type == TokenType.Number)
            {
                throw new ParseException("Expected  a number but got " + token);
            }
            else if (type == TokenType.Word)
            {
                return(token.ToUpper());
            }
            else if (token == "(")
            {
                return("(");
            }
            else if (token == ")")
            {
                return(")");
            }
            else if (token == ",")
            {
                return(",");
            }

            throw new ParseException("Not a valid symbol in WKT format.");
        }
コード例 #4
0
        private Geometry ReadGeometryTaggedText(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();

            string type = tokenizer.GetStringValue().ToUpper();

            switch (type)
            {
            case "POINT":
                return(this.ReadPointText(tokenizer));

            case "LINESTRING":
                return(this.ReadLineStringText(tokenizer));

            case "MULTIPOINT":
                return(this.ReadMultiPointText(tokenizer));

            case "MULTILINESTRING":
                return(this.ReadMultiLineStringText(tokenizer));

            case "POLYGON":
                return(this.ReadPolygonText(tokenizer));

            case "MULTIPOLYGON":
                return(this.ReadMultiPolygonText(tokenizer));

            case "GEOMETRYCOLLECTION":
                return(this.ReadGeometryCollectionText(tokenizer));

            default:
                throw new ParseException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "'{0}' is not WKT.", type));
            }
        }
コード例 #5
0
        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");
            ParameterList paramList = new ParameterList();

            while (tokenizer.GetStringValue() == "PARAMETER")
            {
                tokenizer.ReadToken("[");
                string paramName = tokenizer.ReadDoubleQuotedWord();
                tokenizer.ReadToken(",");
                tokenizer.NextToken();
                double paramValue = tokenizer.GetNumericValue();
                tokenizer.ReadToken("]");
                tokenizer.ReadToken(",");
                paramList.Add(paramName, paramValue);
                tokenizer.NextToken();
            }

            ProjectionParameter[] paramArray = new ProjectionParameter[paramList.Count];
            int i = 0;

            foreach (string key in paramList.Keys)
            {
                ProjectionParameter param = new ProjectionParameter();
                param.Name    = key;
                param.Value   = (double)paramList[key];
                paramArray[i] = param;
                i++;
            }
            string      authority     = "";
            string      authorityCode = "";
            IProjection projection    = new Projection(projectionName, paramArray, "", "", authority, authorityCode);

            return(projection);
        }
コード例 #6
0
        /// <summary>
        /// Returns the next ")" or "," in the stream.
        /// </summary>
        /// <param name="tokenizer">tokenizer over a stream of text in Well-known Text
        /// format. The next token must be ")" or ",".</param>
        /// <returns>Returns the next ")" or "," in the stream.</returns>
        /// <remarks>
        /// ParseException is thrown if the next token is not ")" or ",".
        /// </remarks>
        private string GetNextCloserOrComma(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();
            string nextWord = tokenizer.GetStringValue();

            if (nextWord == "," || nextWord == ")")
            {
                return(nextWord);
            }
            throw new ParseException("Expected ')' or ',' but encountered '" + nextWord + "'");
        }
コード例 #7
0
        /// <summary>
        /// Returns the next "EMPTY" or "(" in the stream as uppercase text.
        /// </summary>
        /// <param name="tokenizer">Tokenizer over a stream of text in Well-known Text
        /// format. The next token must be "EMPTY" or "(".</param>
        /// <returns>the next "EMPTY" or "(" in the stream as uppercase
        /// text.</returns>
        /// <remarks>
        /// ParseException is thrown if the next token is not "EMPTY" or "(".
        /// </remarks>
        private string GetNextEmptyOrOpener(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();
            string nextWord = tokenizer.GetStringValue();

            if (nextWord == "EMPTY" || nextWord == "(")
            {
                return(nextWord);
            }
            throw new ParseException("Expected 'EMPTY' or '(' but encountered '" + nextWord + "'");
        }
コード例 #8
0
        private static ICompoundCoordinateSystem ReadCompoundCoordinateSystem(WktStreamTokenizer tokenizer)
        {
            /*
             * COMPD_CS[
             * "OSGB36 / British National Grid + ODN",
             * PROJCS[]
             * VERT_CS[]
             * AUTHORITY["EPSG","7405"]
             * ]*/

            //TODO add a ReadCoordinateSystem - that determines the correct coordinate system to
            //read. Right now this hard coded for a projected and a vertical coord sys - so the UK
            //national grid works.
            tokenizer.ReadToken("[");
            string name = tokenizer.ReadDoubleQuotedWord();

            tokenizer.ReadToken(",");
            tokenizer.NextToken();
            string            headCSCode = tokenizer.GetStringValue();
            ICoordinateSystem headCS     = ReadCoordinateSystem(headCSCode, tokenizer);

            tokenizer.ReadToken(",");
            tokenizer.NextToken();
            string            tailCSCode = tokenizer.GetStringValue();
            ICoordinateSystem tailCS     = ReadCoordinateSystem(tailCSCode, tokenizer);

            tokenizer.ReadToken(",");
            string authority     = "";
            string authorityCode = "";

            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            tokenizer.ReadToken("]");
            ICompoundCoordinateSystem compoundCS = new CompoundCoordinateSystem(headCS, tailCS, "", authority, authorityCode, name, "", "");

            return(compoundCS);
        }
コード例 #9
0
        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 authorityCode = "";

            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            DatumType      datumType     = (DatumType)Enum.Parse(typeof(DatumType), datumTypeNumber);
            IVerticalDatum verticalDatum = new VerticalDatum(datumType, "", authorityCode, authority, datumName, "", "");

            tokenizer.ReadToken("]");
            return(verticalDatum);
        }
コード例 #10
0
        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.ReadToken(",");
            string authority     = "";
            string authorityCode = "";

            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            // make an assumption about the Angular units - degrees.
            IPrimeMeridian primeMeridian = new PrimeMeridian(name, new AngularUnit(180 / Math.PI), longitude, "", authority, authorityCode, "", "");

            tokenizer.ReadToken("]");
            return(primeMeridian);
        }
コード例 #11
0
        /// <summary>
        /// Returns a IUnit given a piece of WKT.
        /// </summary>
        /// <param name="tokenizer">WktStreamTokenizer that has the WKT.</param>
        /// <returns>An object that implements the IUnit interface.</returns>
        private static IUnit ReadUnit(WktStreamTokenizer tokenizer)
        {
            //UNIT["degree",0.01745329251994433,AUTHORITY["EPSG","9102"]]
            IUnit unit = null;

            tokenizer.ReadToken("[");
            string unitName = tokenizer.ReadDoubleQuotedWord();

            tokenizer.ReadToken(",");
            tokenizer.NextToken();
            double unitsPerUnit = tokenizer.GetNumericValue();

            tokenizer.ReadToken(",");
            string authority     = "";
            string authorityCode = "";

            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            tokenizer.ReadToken("]");
            switch (unitName)
            {
            // take into account the different spellings of the word meter/metre.
            case "meter":
            case "metre":
                unit = new LinearUnit(unitsPerUnit, "", authority, authorityCode, unitName, "", "");
                break;

            case "degree":
            case "radian":
                unit = new AngularUnit(unitsPerUnit, "", authority, authorityCode, unitName, "", "");
                break;

            default:
                throw new NotImplementedException(String.Format("{0} is not recognized a unit of measure.", unitName));
            }
            return(unit);
        }
コード例 #12
0
        private static WGS84ConversionInfo ReadWGS84ConversionInfo(WktStreamTokenizer tokenizer)
        {
            //TOWGS84[0,0,0,0,0,0,0]
            tokenizer.ReadToken("[");
            WGS84ConversionInfo info = new WGS84ConversionInfo();

            tokenizer.NextToken();
            info.Dx = tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Dy = tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Dz = tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ex = tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ey = tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ez = tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ppm = tokenizer.GetNumericValue();

            tokenizer.ReadToken("]");
            return(info);
        }
コード例 #13
0
        /// <summary>
        /// Creates the appropriate object given a string containing XML.
        /// </summary>
        /// <param name="wkt">String containing XML.</param>
        /// <returns>Object representation of the XML.</returns>
        /// <exception cref="ParseException">If a token is not recognised.</exception>
        public static object Create(string wkt)
        {
            object             returnObject = null;
            StringReader       reader       = new StringReader(wkt);
            WktStreamTokenizer tokenizer    = new WktStreamTokenizer(reader);

            tokenizer.NextToken();
            string objectName = tokenizer.GetStringValue();

            switch (objectName)
            {
            case "UNIT":
                IUnit unit = ReadUnit(tokenizer);
                returnObject = unit;
                break;

            case "VERT_DATUM":
                IVerticalDatum verticalDatum = ReadVerticalDatum(tokenizer);
                returnObject = verticalDatum;
                break;

            case "SPHEROID":
                IEllipsoid ellipsoid = ReadEllipsoid(tokenizer);
                returnObject = ellipsoid;
                break;

            case "TOWGS84":
                WGS84ConversionInfo wgsInfo = ReadWGS84ConversionInfo(tokenizer);
                returnObject = wgsInfo;
                break;

            case "DATUM":
                IHorizontalDatum horizontalDatum = ReadHorizontalDatum(tokenizer);
                returnObject = horizontalDatum;
                break;

            case "PRIMEM":
                IPrimeMeridian primeMeridian = ReadPrimeMeridian(tokenizer);
                returnObject = primeMeridian;
                break;

            case "VERT_CS":
                IVerticalCoordinateSystem verticalCS = ReadVerticalCoordinateSystem(tokenizer);
                returnObject = verticalCS;
                break;

            case "GEOGCS":
                IGeographicCoordinateSystem geographicCS = ReadGeographicCoordinateSystem(tokenizer);
                returnObject = geographicCS;
                break;

            case "PROJCS":
                IProjectedCoordinateSystem projectedCS = ReadProjectedCoordinateSystem(tokenizer);
                returnObject = projectedCS;
                break;

            case "COMPD_CS":
                ICompoundCoordinateSystem compoundCS = ReadCompoundCoordinateSystem(tokenizer);
                returnObject = compoundCS;
                break;

            case "GEOCCS":
            case "FITTED_CS":
            case "LOCAL_CS":
                throw new NotSupportedException(String.Format("{0} is not implemented.", objectName));

            default:
                throw new ParseException(String.Format("'{0'} is not recongnized.", objectName));
            }
            reader.Close();
            return(returnObject);
        }
コード例 #14
0
        /// <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>
        /// ParseException 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 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 = this.ReadMultiPointText(tokenizer);
                break;

            case "MULTILINESTRING":
                geometry = this.ReadMultiLineStringText(tokenizer);
                break;

            case "POLYGON":
                geometry = ReadPolygonText(tokenizer);
                break;

            case "MULTIPOLYGON":
                geometry = ReadMultiPolygonText(tokenizer);
                break;

            case "GEOMETRYCOLLECTION":
                geometry = ReadGeometryCollectionText(tokenizer);
                break;

            default:
                throw new ParseException(String.Format("{0} is not WKT.", type));
            }
            return(geometry);

            /*
             *  String type = getNextWord(tokenizer);
             * if (type.equals("POINT")) {
             * return readPointText(tokenizer);
             * }
             * else if (type.equals("LINESTRING")) {
             * return readLineStringText(tokenizer);
             * }
             * else if (type.equals("POLYGON")) {
             * return readPolygonText(tokenizer);
             * }
             * else if (type.equals("MULTIPOINT")) {
             * return readMultiPointText(tokenizer);
             * }
             * else if (type.equals("MULTILINESTRING")) {
             * return readMultiLineStringText(tokenizer);
             * }
             * else if (type.equals("MULTIPOLYGON")) {
             * return readMultiPolygonText(tokenizer);
             * }
             * else if (type.equals("GEOMETRYCOLLECTION")) {
             * return readGeometryCollectionText(tokenizer);
             * }*/
        }
コード例 #15
0
ファイル: GeometryWKTReader.cs プロジェクト: vmoll/geotools
        private string GetNextCloserOrComma(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();

            string nextWord = tokenizer.GetStringValue();

            if ((nextWord == ",") || (nextWord == ")"))
            {
                return nextWord;
            }

            throw new ParseException("Expected ')' or ',' but encountered '" + nextWord	+ "'");
        }
コード例 #16
0
ファイル: GeometryWKTReader.cs プロジェクト: vmoll/geotools
        private string GetNextEmptyOrOpener(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();

            string nextWord = tokenizer.GetStringValue();

            if ((nextWord == "EMPTY") || (nextWord == "("))
            {
                return nextWord;
            }

            throw new ParseException("Expected 'EMPTY' or '(' but encountered '" +	nextWord + "'");
        }
コード例 #17
0
 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.ReadToken(",");
     string authority="";
     string authorityCode="";
     tokenizer.ReadAuthority(ref authority, ref authorityCode);
     // make an assumption about the Angular units - degrees.
     IPrimeMeridian primeMeridian = new PrimeMeridian(name,new AngularUnit(180/Math.PI),longitude,"",authority,authorityCode,"","");
     tokenizer.ReadToken("]");
     return primeMeridian;
 }
コード例 #18
0
ファイル: GeometryWKTReader.cs プロジェクト: vmoll/geotools
        private string GetNextWord(WktStreamTokenizer tokenizer)
        {
            TokenType type = tokenizer.NextToken();
            string token = tokenizer.GetStringValue();

            if (type == TokenType.Number)
            {
                throw new ParseException("Expected  a number but got "+token);
            }
            else if (type == TokenType.Word)
            {
                return token.ToUpper();
            }
            else if (token == "(")
            {
                return "(";
            }
            else if (token == ")")
            {
                return ")";
            }
            else if (token == ",")
            {
                return ",";
            }

            throw new ParseException("Not a valid symbol in WKT format.");
        }
コード例 #19
0
        private double GetNextNumber(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();

            return(tokenizer.GetNumericValue());
        }
コード例 #20
0
        private static WGS84ConversionInfo ReadWGS84ConversionInfo(WktStreamTokenizer tokenizer)
        {
            //TOWGS84[0,0,0,0,0,0,0]
            tokenizer.ReadToken("[");
            WGS84ConversionInfo info = new WGS84ConversionInfo();
            tokenizer.NextToken();
            info.Dx=tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Dy=tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Dz=tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ex=tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ey=tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ez=tokenizer.GetNumericValue();
            tokenizer.ReadToken(",");

            tokenizer.NextToken();
            info.Ppm=tokenizer.GetNumericValue();

            tokenizer.ReadToken("]");
            return info;
        }
コード例 #21
0
ファイル: GeometryWKTReader.cs プロジェクト: vmoll/geotools
        private Geometry ReadGeometryTaggedText(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();

            string type = tokenizer.GetStringValue().ToUpper();

            switch (type)
            {
                case "POINT":
                    return this.ReadPointText(tokenizer);

                case "LINESTRING":
                    return this.ReadLineStringText(tokenizer);

                case "MULTIPOINT":
                    return this.ReadMultiPointText(tokenizer);

                case "MULTILINESTRING":
                    return this.ReadMultiLineStringText(tokenizer);

                case "POLYGON":
                    return this.ReadPolygonText(tokenizer);

                case "MULTIPOLYGON":
                    return this.ReadMultiPolygonText(tokenizer);

                case "GEOMETRYCOLLECTION":
                    return this.ReadGeometryCollectionText(tokenizer);

                default:
                    throw new ParseException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "'{0}' is not WKT.", type));
            }
        }
コード例 #22
0
        private static ICompoundCoordinateSystem ReadCompoundCoordinateSystem(WktStreamTokenizer tokenizer)
        {
            /*
            COMPD_CS[
            "OSGB36 / British National Grid + ODN",
            PROJCS[]
            VERT_CS[]
            AUTHORITY["EPSG","7405"]
            ]*/

            //TODO add a ReadCoordinateSystem - that determines the correct coordinate system to
            //read. Right now this hard coded for a projected and a vertical coord sys - so the UK
            //national grid works.
            tokenizer.ReadToken("[");
            string name=tokenizer.ReadDoubleQuotedWord();
            tokenizer.ReadToken(",");
            tokenizer.NextToken();
            string headCSCode =  tokenizer.GetStringValue();
            ICoordinateSystem headCS = ReadCoordinateSystem(headCSCode,tokenizer);
            tokenizer.ReadToken(",");
            tokenizer.NextToken();
            string tailCSCode =  tokenizer.GetStringValue();
            ICoordinateSystem tailCS = ReadCoordinateSystem(tailCSCode,tokenizer);
            tokenizer.ReadToken(",");
            string authority="";
            string authorityCode="";
            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            tokenizer.ReadToken("]");
            ICompoundCoordinateSystem compoundCS = new CompoundCoordinateSystem(headCS,tailCS,"",authority,authorityCode,name,"","");
            return compoundCS;
        }
コード例 #23
0
 /// <summary>
 /// Returns a IUnit given a piece of WKT.
 /// </summary>
 /// <param name="tokenizer">WktStreamTokenizer that has the WKT.</param>
 /// <returns>An object that implements the IUnit interface.</returns>
 private static IUnit ReadUnit(WktStreamTokenizer tokenizer)
 {
     //UNIT["degree",0.01745329251994433,AUTHORITY["EPSG","9102"]]
     IUnit unit=null;
     tokenizer.ReadToken("[");
     string unitName=tokenizer.ReadDoubleQuotedWord();
     tokenizer.ReadToken(",");
     tokenizer.NextToken();
     double unitsPerUnit = tokenizer.GetNumericValue();
     tokenizer.ReadToken(",");
     string authority="";
     string authorityCode="";
     tokenizer.ReadAuthority(ref authority, ref authorityCode);
     tokenizer.ReadToken("]");
     switch (unitName)
     {
             // take into account the different spellings of the word meter/metre.
         case "meter":
         case "metre":
             unit = new LinearUnit(unitsPerUnit,"",authority,authorityCode,unitName,"","");
             break;
         case "degree":
         case "radian":
             unit = new AngularUnit(unitsPerUnit,"",authority,authorityCode,unitName,"","");
             break;
         default:
             throw new NotImplementedException(String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0} is not recognized a unit of measure.",unitName));
     }
     return unit;
 }
コード例 #24
0
        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");
            ParameterList paramList = new ParameterList();
            while (tokenizer.GetStringValue()=="PARAMETER")
            {
                tokenizer.ReadToken("[");
                string paramName = tokenizer.ReadDoubleQuotedWord();
                tokenizer.ReadToken(",");
                tokenizer.NextToken();
                double paramValue = tokenizer.GetNumericValue();
                tokenizer.ReadToken("]");
                tokenizer.ReadToken(",");
                paramList.Add(paramName,paramValue);
                tokenizer.NextToken();
            }

            ProjectionParameter[] paramArray = new ProjectionParameter[paramList.Count];
            int i=0;
            foreach(string key in paramList.Keys)
            {
                ProjectionParameter param= new ProjectionParameter();
                param.Name=key;
                param.Value=(double)paramList[key];
                paramArray[i]=param;
                i++;
            }
            string authority="";
            string authorityCode="";
            IProjection projection = new Projection(projectionName, paramArray,"", "",authority, authorityCode);
            return projection;
        }
コード例 #25
0
ファイル: GeometryWKTReader.cs プロジェクト: vmoll/geotools
        private double GetNextNumber(WktStreamTokenizer tokenizer)
        {
            tokenizer.NextToken();

            return tokenizer.GetNumericValue();
        }
コード例 #26
0
 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 authorityCode="";
     tokenizer.ReadAuthority(ref authority, ref authorityCode);
     DatumType datumType = (DatumType)Enum.Parse(typeof(DatumType),datumTypeNumber);
     IVerticalDatum verticalDatum = new VerticalDatum(datumType,"",authorityCode,authority,datumName,"","");
     tokenizer.ReadToken("]");
     return verticalDatum;
 }
コード例 #27
0
        private static IEllipsoid ReadEllipsoid(WktStreamTokenizer tokenizer)
        {
            //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(",");

            string authority="";
            string authorityCode="";
            tokenizer.ReadAuthority(ref authority, ref authorityCode);
            tokenizer.ReadToken("]");
            IEllipsoid ellipsoid = new Ellipsoid(majorAxis,0.0,e,true,LinearUnit.Meters,"",authority,authorityCode,name,"","");
            return ellipsoid;
        }