Beispiel #1
0
        protected override EpsgEllipsoid ReadValue(ushort key, BinaryReader reader)
        {
            var semiMajorAxis = _numberReader.GetValue(reader.ReadUInt16());
            var valueB        = _numberReader.GetValue(reader.ReadUInt16());
            var name          = TextReader.GetString(reader.ReadUInt16());

            Contract.Assume(!String.IsNullOrEmpty(name));
            var uom = EpsgMicroDatabase.Default.GetUnit(reader.ReadByte() + 9000);

            Contract.Assume(uom != null);
            return(new EpsgEllipsoid(
                       key, name, uom,
                       (valueB == semiMajorAxis)
                    ? new Sphere(semiMajorAxis)
                : (valueB < semiMajorAxis / 10.0)
                    ? new SpheroidEquatorialInvF(semiMajorAxis, valueB) as ISpheroid <double>
                : new SpheroidEquatorialPolar(semiMajorAxis, valueB)
                       ));
        }
Beispiel #2
0
        protected override EpsgPrimeMeridian ReadValue(ushort key, BinaryReader reader)
        {
            var uom = EpsgMicroDatabase.Default.GetUnit(reader.ReadUInt16());

            Contract.Assume(uom != null);
            var longitude = _numberReader.GetValue(reader.ReadUInt16());
            var name      = TextReader.GetString(reader.ReadByte());

            Contract.Assume(!String.IsNullOrEmpty(name));
            return(new EpsgPrimeMeridian(key, name, longitude, uom));
        }
Beispiel #3
0
        protected override EpsgUnit ReadValue(ushort key, BinaryReader reader)
        {
            var name = TextReader.GetString(reader.ReadUInt16());

            Contract.Assume(!String.IsNullOrEmpty(name));
            var factorB = _numberReader.GetValue(reader.ReadUInt16());
            var factorC = _numberReader.GetValue(reader.ReadUInt16());

            // ReSharper disable CompareOfFloatsByEqualityOperator
            if (factorC == 0)
            {
                if (factorB == 0)
                {
                    factorC = Double.NaN;
                }
                else
                {
                    throw new InvalidDataException("Bad unit conversion factor values.");
                }
            }
            // ReSharper restore CompareOfFloatsByEqualityOperator
            return(new EpsgUnit(key, name, TypeName, factorB, factorC, _generatingDatabase));
        }
Beispiel #4
0
        protected override EpsgCoordinateTransformInfo ReadValue(ushort key, BinaryReader reader)
        {
            var sourceCrsCode = reader.ReadUInt16();
            var targetCrsCode = reader.ReadUInt16();
            var opMethodCode  = reader.ReadUInt16();
            var accuracyValue = _numberReader.GetValue(reader.ReadUInt16());
            var areaCode      = reader.ReadUInt16();
            var deprecated    = reader.ReadByte() != 0;
            var name          = TextReader.GetString(reader.ReadUInt16());
            var accuracy      = accuracyValue == 999.0 ? (double?)null : accuracyValue;

            Contract.Assume(!String.IsNullOrEmpty(name));
            return(new EpsgCoordinateTransformInfo(
                       key, sourceCrsCode, targetCrsCode, opMethodCode,
                       accuracy, areaCode, deprecated, name));
        }
Beispiel #5
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);
        }