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) )); }
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)); }
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)); }
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)); }
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); }