コード例 #1
0
        private static Projection ReadProjection(WktStreamTokenizer tokenizer, bool includeAuthority)
        {
            //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();
                //added by monoGIS team: parameters names may be capitalized, but the code works only with lower-case!
                paramName = paramName.ToLower();
                tokenizer.ReadToken(",");
                tokenizer.NextToken();
                double paramValue = tokenizer.GetNumericValue();
                tokenizer.ReadToken("]");
                paramList.Add(paramName, paramValue);

                if (!tokenizer.TryReadToken(","))
                {
                    break;
                }
                if (!tokenizer.TryReadToken("PARAMETER"))
                {
                    break;
                }
            }

            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.Empty;
            string     authorityCode = String.Empty;
            Projection projection    = new Projection(projectionName, paramArray, String.Empty, String.Empty, authority, authorityCode);

            return(projection);
        }
コード例 #2
0
        private static CompoundCoordinateSystem ReadCompoundCoordinateSystem(WktStreamTokenizer tokenizer, bool includeAuthority)
        {
            //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();
            CoordinateSystem headCS     = ReadCoordinateSystem(headCSCode, tokenizer, includeAuthority);

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

            string authority     = String.Empty;
            string authorityCode = String.Empty;

            if (includeAuthority)
            {
                tokenizer.ReadToken(",");
                tokenizer.ReadAuthority(ref authority, ref authorityCode);
            }
            tokenizer.ReadToken("]");
            CompoundCoordinateSystem compoundCS = new CompoundCoordinateSystem(headCS, tailCS, String.Empty, authority, authorityCode, name, String.Empty, String.Empty);

            return(compoundCS);
        }
コード例 #3
0
        public static object Create(string wkt)
        {
            object             returnObject     = null;
            bool               includeAuthority = (wkt.ToLower().IndexOf("authority") != -1);
            StringReader       reader           = new StringReader(wkt);
            WktStreamTokenizer tokenizer        = new WktStreamTokenizer(reader);

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

            switch (objectName)
            {
            case "GEOGTRAN":
                Geotransformation geotrans = ReadGeotransformation(tokenizer, includeAuthority);
                returnObject = geotrans;
                break;

            default:
                throw new ParseException(String.Format("'{0'} is not recongnized.", objectName));
            }
            reader.Close();
            return(returnObject);
        }
コード例 #4
0
        private static VerticalDatum ReadVerticalDatum(WktStreamTokenizer tokenizer, bool includeAuthority)
        {
            //VERT_DATUM["Ordnance Datum Newlyn",2005,AUTHORITY["5101","EPSG"]]
            tokenizer.ReadToken("[");
            string datumName = tokenizer.ReadDoubleQuotedWord();

            tokenizer.ReadToken(",");
            tokenizer.NextToken();
            string datumTypeNumber = tokenizer.GetStringValue();

            string authority     = String.Empty;
            string authorityCode = String.Empty;

            if (includeAuthority)
            {
                tokenizer.ReadToken(",");
                tokenizer.ReadAuthority(ref authority, ref authorityCode);
            }
            DatumType     datumType     = (DatumType)Enum.Parse(typeof(DatumType), datumTypeNumber);
            VerticalDatum verticalDatum = new VerticalDatum(datumType, String.Empty, authorityCode, authority, datumName, String.Empty, String.Empty);

            tokenizer.ReadToken("]");
            return(verticalDatum);
        }
コード例 #5
0
        private static Geotransformation ReadGeotransformation(WktStreamTokenizer tokenizer, bool includeAuthority)
        {
            // GEOGTRAN[
            //       "MGI_To_WGS_1984_2",
            //        GEOGCS[
            //            "GCS_MGI",
            //            DATUM["D_MGI",SPHEROID["Bessel_1841",6377397.155,299.1528128]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],
            //            METHOD["Position_Vector"],
            //            PARAMETER["X_Axis_Translation",577.326],
            //            PARAMETER["Y_Axis_Translation",90.129],
            //            PARAMETER["Z_Axis_Translation",463.919],
            //            PARAMETER["X_Axis_Rotation",5.1365988],
            //            PARAMETER["Y_Axis_Rotation",1.4742],
            //            PARAMETER["Z_Axis_Rotation",5.2970436],
            //            PARAMETER["Scale_Difference",2.4232]
            //]

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

            tokenizer.ReadToken(",");
            tokenizer.ReadToken("GEOGCS");

            GeographicCoordinateSystem geographicCS1 = WktCoordinateSystemReader.ReadGeographicCoordinateSystem(tokenizer, includeAuthority);

            tokenizer.ReadToken(",");
            tokenizer.ReadToken("GEOGCS");

            GeographicCoordinateSystem geographicCS2 = WktCoordinateSystemReader.ReadGeographicCoordinateSystem(tokenizer, includeAuthority);

            tokenizer.ReadToken(",");
            string        method    = String.Empty;
            ParameterList paramList = new ParameterList();

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

                    if (!tokenizer.TryReadToken(","))
                    {
                        break;
                    }
                    if (!tokenizer.TryReadToken("PARAMETER"))
                    {
                        break;
                    }
                }
            }
            return(new Geotransformation(name, method, geographicCS1, geographicCS2, paramList, "", "", "", ""));
        }
コード例 #6
0
        public static object Create(string wkt)
        {
            object             returnObject     = null;
            bool               includeAuthority = (wkt.ToLower().IndexOf("authority") != -1);
            StringReader       reader           = new StringReader(wkt);
            WktStreamTokenizer tokenizer        = new WktStreamTokenizer(reader);

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

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

            case "VERT_DATUM":
                VerticalDatum verticalDatum = ReadVerticalDatum(tokenizer, includeAuthority);
                returnObject = verticalDatum;
                break;

            case "SPHEROID":
                Ellipsoid ellipsoid = ReadEllipsoid(tokenizer, includeAuthority);
                returnObject = ellipsoid;
                break;

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

            case "DATUM":
                HorizontalDatum horizontalDatum = ReadHorizontalDatum(tokenizer, includeAuthority);
                returnObject = horizontalDatum;
                break;

            case "PRIMEM":
                PrimeMeridian primeMeridian = ReadPrimeMeridian(tokenizer, includeAuthority);
                returnObject = primeMeridian;
                break;

            case "VERT_CS":
                VerticalCoordinateSystem verticalCS = ReadVerticalCoordinateSystem(tokenizer, includeAuthority);
                returnObject = verticalCS;
                break;

            case "GEOGCS":
                GeographicCoordinateSystem geographicCS = ReadGeographicCoordinateSystem(tokenizer, includeAuthority);
                returnObject = geographicCS;
                break;

            case "PROJCS":
                ProjectedCoordinateSystem projectedCS = ReadProjectedCoordinateSystem(tokenizer, includeAuthority);
                returnObject = projectedCS;
                break;

            case "COMPD_CS":
                CompoundCoordinateSystem compoundCS = ReadCompoundCoordinateSystem(tokenizer, includeAuthority);
                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);
        }