Esempio n. 1
0
        private EpsgCrs ReadValue(uint key, BinaryReader reader)
        {
            var datum        = EpsgMicroDatabase.Default.GetDatum(reader.ReadUInt16());
            var baseCrsCode  = reader.ReadUInt16();
            var baseCrs      = baseCrsCode == 0 ? null : (EpsgCrsGeodetic)EpsgMicroDatabase.Default.GetCrs(baseCrsCode);
            var baseOpCode   = reader.ReadInt16();
            var coordSys     = EpsgMicroDatabase.Default.GetCoordinateSystem(reader.ReadUInt16());
            var area         = EpsgMicroDatabase.Default.GetArea(reader.ReadUInt16());
            var name         = TextReader.GetString(reader.ReadUInt16());
            var isDeprecated = reader.ReadByte() != 0;
            var kind         = (EpsgCrsKind)reader.ReadByte();

            Contract.Assume(kind != EpsgCrsKind.Compound);
            Contract.Assume(key <= Int32.MaxValue);

            var epsgCode = unchecked ((int)key);

            if (kind == EpsgCrsKind.Projected)
            {
                return(new EpsgCrsProjected(epsgCode, name, area, isDeprecated, coordSys, (EpsgDatumGeodetic)datum, baseCrs, baseOpCode));
            }

            if (kind == EpsgCrsKind.Geographic2D || kind == EpsgCrsKind.Geographic3D)
            {
                return(new EpsgCrsGeographic(epsgCode, name, area, isDeprecated, coordSys, (EpsgDatumGeodetic)datum, baseCrs, baseOpCode, kind));
            }

            if (kind == EpsgCrsKind.Geocentric)
            {
                return(new EpsgCrsGeocentric(epsgCode, name, area, isDeprecated, coordSys, (EpsgDatumGeodetic)datum, baseCrs, baseOpCode));
            }

            if (kind == EpsgCrsKind.Vertical)
            {
                return(new EpsgCrsVertical(epsgCode, name, area, isDeprecated, coordSys, (EpsgDatumVertical)datum));
            }

            if (kind == EpsgCrsKind.Engineering)
            {
                return(new EpsgCrsEngineering(epsgCode, name, area, isDeprecated, coordSys, (EpsgDatumEngineering)datum));
            }

            throw new NotImplementedException();
        }
Esempio n. 2
0
        private List <INamedParameter> ReadParametersForOperation(ushort key, EpsgParameterUsage[] usages, BinaryReader reader)
        {
            Contract.Requires(usages != null);
            Contract.Requires(reader != null);
            var parameters = new List <INamedParameter>(usages.Length);

            foreach (var usage in usages)
            {
                var valueCode = reader.ReadUInt16();
                var uomCode   = reader.ReadUInt16();

                EpsgUnit unit;
                if (uomCode == UInt16.MaxValue)
                {
                    unit = null;
                }
                else
                {
                    unit = EpsgMicroDatabase.Default.GetUnit(uomCode);
                    Contract.Assume(unit != null);
                }

                var parameterName = usage.ParameterInfo.Name;
                if (valueCode != 0xffff)
                {
                    INamedParameter parameter;
                    if ((valueCode & 0xc000) == 0x8000)
                    {
                        var textValue = _textReader.GetString((ushort)(valueCode & 0x7fff));
                        parameter = new NamedParameter <string>(parameterName, textValue, unit);
                    }
                    else
                    {
                        parameter = new NamedParameter <double>(parameterName, _numberReader.GetValue(valueCode), unit);
                    }
                    parameters.Add(parameter);
                }
            }
            return(parameters);
        }