private static GaiaImport SetGaiaGeoParseFunctions(GaiaGeoEndianMarker gaiaGeoEndianMarker, Ordinates handleOrdinates) { var conversionNeeded = false; switch (gaiaGeoEndianMarker) { case GaiaGeoEndianMarker.GAIA_LITTLE_ENDIAN: if (!BitConverter.IsLittleEndian) { conversionNeeded = true; } break; case GaiaGeoEndianMarker.GAIA_BIG_ENDIAN: if (BitConverter.IsLittleEndian) { conversionNeeded = true; } break; default: /* unknown encoding; nor litte-endian neither big-endian */ throw new ArgumentOutOfRangeException("gaiaGeoEndianMarker"); } return(GaiaImport.Create(conversionNeeded, handleOrdinates)); }
private static ReadCoordinatesFunction SetReadCoordinatesFunction(GaiaImport gaiaImport, GaiaGeoGeometry type) { gaiaImport.SetGeometryType(type); if (gaiaImport.Uncompressed) { if (gaiaImport.HasZ && gaiaImport.HasM) { return(ReadXYZM); } if (gaiaImport.HasM) { return(ReadXYM); } if (gaiaImport.HasZ) { return(ReadXYZ); } return(ReadXY); } if (gaiaImport.HasZ && gaiaImport.HasM) { return(ReadCompressedXYZM); } if (gaiaImport.HasM) { return(ReadCompressedXYM); } if (gaiaImport.HasZ) { return(ReadCompressedXYZ); } return(ReadCompressedXY); }
private static IGeometry ParseWkbGeometry(GaiaGeoGeometry type, byte[] blob, ref int offset, IGeometryFactory factory, GaiaImport gaiaImport) { var readCoordinates = SetReadCoordinatesFunction(gaiaImport, type); switch (ToBaseGeometryType(type)) { case GaiaGeoGeometry.GAIA_POINT: return(ParseWkbPoint(blob, ref offset, factory, readCoordinates, gaiaImport)); case GaiaGeoGeometry.GAIA_MULTIPOINT: return(ParseWkbMultiPoint(blob, ref offset, factory, readCoordinates, gaiaImport)); case GaiaGeoGeometry.GAIA_LINESTRING: return(ParseWkbLineString(blob, ref offset, factory, readCoordinates, gaiaImport)); case GaiaGeoGeometry.GAIA_MULTILINESTRING: return(ParseWkbMultiLineString(blob, ref offset, factory, readCoordinates, gaiaImport)); case GaiaGeoGeometry.GAIA_POLYGON: return(ParseWkbPolygon(blob, ref offset, factory, readCoordinates, gaiaImport)); case GaiaGeoGeometry.GAIA_MULTIPOLYGON: return(ParseWkbMultiPolygon(blob, ref offset, factory, readCoordinates, gaiaImport)); case GaiaGeoGeometry.GAIA_GEOMETRYCOLLECTION: return(ParseWkbGeometryCollection(blob, ref offset, factory, gaiaImport)); } return(null); }
private static IGeometry ParseWkbMultiPolygon(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset); var polygons = new IPolygon[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) throw new Exception(); var gt = gaiaImport.GetInt32(blob, ref offset); if (ToBaseGeometryType((GaiaGeoGeometry)gt) != GaiaGeoGeometry.GAIA_POLYGON) throw new Exception(); //Since Uncompressed MultiGeom can contain compressed we need to set it here also readCoordinates = SetReadCoordinatesFunction(gaiaImport, (GaiaGeoGeometry)gt); polygons[i] = ParseWkbPolygon(blob, ref offset, factory, readCoordinates, gaiaImport); } return factory.CreateMultiPolygon(polygons); }
private static ICoordinateSequence ReadCompressedXY(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var startOrdinateValues = import.GetDoubles(buffer, ref offset, 2); var ret = factory.Create(number, import.HandleOrdinates); var x = startOrdinateValues[0]; var y = startOrdinateValues[1]; ret.SetOrdinate(0, Ordinate.X, precisionModel.MakePrecise(x)); ret.SetOrdinate(0, Ordinate.Y, precisionModel.MakePrecise(y)); if (number == 1) { return(ret); } var ordinateValues = import.GetSingles(buffer, ref offset, (number - 2) * 2); var j = 0; int i; for (i = 1; i < number - 1; i++) { x = x + ordinateValues[j++]; y = y + ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(x)); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(y)); } startOrdinateValues = import.GetDoubles(buffer, ref offset, 2); ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(startOrdinateValues[0])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(startOrdinateValues[1])); return(ret); }
private static IGeometry ParseWkbGeometry(GaiaGeoGeometry type, byte[] blob, ref int offset, IGeometryFactory factory, GaiaImport gaiaImport) { var readCoordinates = SetReadCoordinatesFunction(gaiaImport, type); switch (ToBaseGeometryType(type)) { case GaiaGeoGeometry.GAIA_POINT: return ParseWkbPoint(blob, ref offset, factory, readCoordinates, gaiaImport); case GaiaGeoGeometry.GAIA_MULTIPOINT: return ParseWkbMultiPoint(blob, ref offset, factory, readCoordinates, gaiaImport); case GaiaGeoGeometry.GAIA_LINESTRING: return ParseWkbLineString(blob, ref offset, factory, readCoordinates, gaiaImport); case GaiaGeoGeometry.GAIA_MULTILINESTRING: return ParseWkbMultiLineString(blob, ref offset, factory, readCoordinates, gaiaImport); case GaiaGeoGeometry.GAIA_POLYGON: return ParseWkbPolygon(blob, ref offset, factory, readCoordinates, gaiaImport); case GaiaGeoGeometry.GAIA_MULTIPOLYGON: return ParseWkbMultiPolygon(blob, ref offset, factory, readCoordinates, gaiaImport); case GaiaGeoGeometry.GAIA_GEOMETRYCOLLECTION: return ParseWkbGeometryCollection(blob, ref offset, factory, gaiaImport); } return null; }
private static IGeometry ParseWkbMultiPolygon(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset); var polygons = new IPolygon[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) { throw new Exception(); } var gt = gaiaImport.GetInt32(blob, ref offset); if (ToBaseGeometryType((GaiaGeoGeometry)gt) != GaiaGeoGeometry.GAIA_POLYGON) { throw new Exception(); } //Since Uncompressed MultiGeom can contain compressed we need to set it here also readCoordinates = SetReadCoordinatesFunction(gaiaImport, (GaiaGeoGeometry)gt); polygons[i] = ParseWkbPolygon(blob, ref offset, factory, readCoordinates, gaiaImport); } return(factory.CreateMultiPolygon(polygons)); }
private static ICoordinateSequence ReadXY(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var ordinateValues = import.GetDoubles(buffer, ref offset, number * 2); var ret = factory.Create(number, Ordinates.XY); var j = 0; for (var i = 0; i < number; i++) { ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(ordinateValues[j++])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(ordinateValues[j++])); } return(ret); }
private static ILineString ParseWkbLineString(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { return(ParseWkbLineString(blob, ref offset, factory, factory.CreateLineString, readCoordinates, gaiaImport)); }
private static IMultiLineString ParseWkbMultiLineString(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { int number = gaiaImport.GetInt32(blob, ref offset); var lineStrings = new ILineString[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) { throw new Exception(); } var gt = gaiaImport.GetInt32(blob, ref offset); if (ToBaseGeometryType((GaiaGeoGeometry)gt) != GaiaGeoGeometry.GAIA_LINESTRING) { throw new Exception(); } //Since Uncompressed MultiGeom can contain compressed we need to set it here also readCoordinates = SetReadCoordinatesFunction(gaiaImport, (GaiaGeoGeometry)gt); lineStrings[i] = ParseWkbLineString(blob, ref offset, factory, factory.CreateLineString, readCoordinates, gaiaImport); } return(factory.CreateMultiLineString(lineStrings)); }
private static IPolygon ParseWkbPolygon(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset) - 1; var shell = (ILinearRing)ParseWkbLineString(blob, ref offset, factory, factory.CreateLinearRing, readCoordinates, gaiaImport); var holes = new ILinearRing[number]; for (var i = 0; i < number; i++) holes[i] = (ILinearRing)ParseWkbLineString(blob, ref offset, factory, factory.CreateLinearRing, readCoordinates, gaiaImport); return factory.CreatePolygon(shell, holes); }
private static IPoint ParseWkbPoint(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { return(factory.CreatePoint(readCoordinates(blob, ref offset, 1, gaiaImport, factory.CoordinateSequenceFactory, factory.PrecisionModel))); }
private static IMultiLineString ParseWkbMultiLineString(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { int number = gaiaImport.GetInt32(blob, ref offset); var lineStrings = new ILineString[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) throw new Exception(); var gt = gaiaImport.GetInt32(blob, ref offset); if (ToBaseGeometryType((GaiaGeoGeometry)gt) != GaiaGeoGeometry.GAIA_LINESTRING) throw new Exception(); //Since Uncompressed MultiGeom can contain compressed we need to set it here also readCoordinates = SetReadCoordinatesFunction(gaiaImport, (GaiaGeoGeometry)gt); lineStrings[i] = ParseWkbLineString(blob, ref offset, factory, factory.CreateLineString, readCoordinates, gaiaImport); } return factory.CreateMultiLineString(lineStrings); }
private static ILineString ParseWkbLineString(byte[] blob, ref int offset, IGeometryFactory factory, CreateLineStringFunction createLineStringFunction, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset); var sequence = readCoordinates(blob, ref offset, number, gaiaImport, factory.CoordinateSequenceFactory, factory.PrecisionModel); return createLineStringFunction(sequence); }
private static ILineString ParseWkbLineString(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { return ParseWkbLineString(blob, ref offset, factory, factory.CreateLineString, readCoordinates, gaiaImport); }
private static IMultiPoint ParseWkbMultiPoint(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var getInt32 = gaiaImport.GetInt32; var getDouble = gaiaImport.GetDouble; var number = getInt32(blob, ref offset); var coords = new Coordinate[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) throw new Exception(); var gt = getInt32(blob, ref offset); if (ToBaseGeometryType((GaiaGeoGeometry)gt) != GaiaGeoGeometry.GAIA_POINT) throw new Exception(); coords[i] = new Coordinate(getDouble(blob, ref offset), getDouble(blob, ref offset)); if (gaiaImport.HasZ) coords[i].Z = getDouble(blob, ref offset); if (gaiaImport.HasM) /*coords[i].M =*/ getDouble(blob, ref offset); } return factory.CreateMultiPoint(coords); }
private static IPoint ParseWkbPoint(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { return factory.CreatePoint(readCoordinates(blob, ref offset, 1, gaiaImport, factory.CoordinateSequenceFactory, factory.PrecisionModel)); }
private static IMultiPoint ParseWkbMultiPoint(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var getInt32 = gaiaImport.GetInt32; var getDouble = gaiaImport.GetDouble; var number = getInt32(blob, ref offset); var coords = new Coordinate[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) { throw new Exception(); } var gt = getInt32(blob, ref offset); if (ToBaseGeometryType((GaiaGeoGeometry)gt) != GaiaGeoGeometry.GAIA_POINT) { throw new Exception(); } coords[i] = new Coordinate(getDouble(blob, ref offset), getDouble(blob, ref offset)); if (gaiaImport.HasZ) { coords[i].Z = getDouble(blob, ref offset); } if (gaiaImport.HasM) { /*coords[i].M =*/ getDouble(blob, ref offset); } } return(factory.CreateMultiPoint(coords)); }
private static IGeometryCollection ParseWkbGeometryCollection(byte[] blob, ref int offset, IGeometryFactory factory, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset); var geometries = new IGeometry[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) throw new Exception(); geometries[i] = ParseWkbGeometry((GaiaGeoGeometry)gaiaImport.GetInt32(blob, ref offset), blob, ref offset, factory, gaiaImport); } return factory.CreateGeometryCollection(geometries); }
private static ILineString ParseWkbLineString(byte[] blob, ref int offset, IGeometryFactory factory, CreateLineStringFunction createLineStringFunction, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset); var sequence = readCoordinates(blob, ref offset, number, gaiaImport, factory.CoordinateSequenceFactory, factory.PrecisionModel); return(createLineStringFunction(sequence)); }
private static ICoordinateSequence ReadXY(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var ordinateValues = import.GetDoubles(buffer, ref offset, number * 2); var ret = factory.Create(number, Ordinates.XY); var j = 0; for (var i = 0; i < number; i++) { ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(ordinateValues[j++])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(ordinateValues[j++])); } return ret; }
private static IPolygon ParseWkbPolygon(byte[] blob, ref int offset, IGeometryFactory factory, ReadCoordinatesFunction readCoordinates, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset) - 1; var shell = (ILinearRing)ParseWkbLineString(blob, ref offset, factory, factory.CreateLinearRing, readCoordinates, gaiaImport); var holes = new ILinearRing[number]; for (var i = 0; i < number; i++) { holes[i] = (ILinearRing)ParseWkbLineString(blob, ref offset, factory, factory.CreateLinearRing, readCoordinates, gaiaImport); } return(factory.CreatePolygon(shell, holes)); }
private static ICoordinateSequence ReadXYZM(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var ordinateValues = import.GetDoubles(buffer, ref offset, number * 4); var ret = factory.Create(number, import.HandleOrdinates); var handleZ = (ret.Ordinates & Ordinates.Z) == Ordinates.Z; var handleM = (ret.Ordinates & Ordinates.M) == Ordinates.M; var j = 0; for (var i = 0; i < number; i++) { ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(ordinateValues[j++])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(ordinateValues[j++])); if (handleZ) ret.SetOrdinate(i, Ordinate.Z, precisionModel.MakePrecise(ordinateValues[j])); j++; if (handleM) ret.SetOrdinate(i, Ordinate.M, precisionModel.MakePrecise(ordinateValues[j])); j++; } return ret; }
private static IGeometryCollection ParseWkbGeometryCollection(byte[] blob, ref int offset, IGeometryFactory factory, GaiaImport gaiaImport) { var number = gaiaImport.GetInt32(blob, ref offset); var geometries = new IGeometry[number]; for (var i = 0; i < number; i++) { if (blob[offset++] != (byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY) { throw new Exception(); } geometries[i] = ParseWkbGeometry((GaiaGeoGeometry)gaiaImport.GetInt32(blob, ref offset), blob, ref offset, factory, gaiaImport); } return(factory.CreateGeometryCollection(geometries)); }
private static ICoordinateSequence ReadCompressedXY(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var startOrdinateValues = import.GetDoubles(buffer, ref offset, 2); var ret = factory.Create(number, import.HandleOrdinates); var x = startOrdinateValues[0]; var y = startOrdinateValues[1]; ret.SetOrdinate(0, Ordinate.X, precisionModel.MakePrecise(x)); ret.SetOrdinate(0, Ordinate.Y, precisionModel.MakePrecise(y)); if (number == 1) return ret; var ordinateValues = import.GetSingles(buffer, ref offset, (number - 2) * 2); var j = 0; int i; for (i = 1; i < number - 1; i++) { x = x + ordinateValues[j++]; y = y + ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(x)); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(y)); } startOrdinateValues = import.GetDoubles(buffer, ref offset, 2); ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(startOrdinateValues[0])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(startOrdinateValues[1])); return ret; }
private static ICoordinateSequence ReadXYZM(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var ordinateValues = import.GetDoubles(buffer, ref offset, number * 4); var ret = factory.Create(number, import.HandleOrdinates); var handleZ = (ret.Ordinates & Ordinates.Z) == Ordinates.Z; var handleM = (ret.Ordinates & Ordinates.M) == Ordinates.M; var j = 0; for (var i = 0; i < number; i++) { ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(ordinateValues[j++])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(ordinateValues[j++])); if (handleZ) { ret.SetOrdinate(i, Ordinate.Z, precisionModel.MakePrecise(ordinateValues[j])); } j++; if (handleM) { ret.SetOrdinate(i, Ordinate.M, precisionModel.MakePrecise(ordinateValues[j])); } j++; } return(ret); }
private static ICoordinateSequence ReadCompressedXYZM(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var startOrdinateValues = import.GetDoubles(buffer, ref offset, 4); var ret = factory.Create(number, Ordinates.XYM); var handleZ = (ret.Ordinates & Ordinates.Z) == Ordinates.Z; var handleM = (ret.Ordinates & Ordinates.M) == Ordinates.M; var x = startOrdinateValues[0]; ret.SetOrdinate(0, Ordinate.X, precisionModel.MakePrecise(x)); var y = startOrdinateValues[1]; ret.SetOrdinate(0, Ordinate.Y, precisionModel.MakePrecise(y)); var z = handleZ ? startOrdinateValues[2] : Coordinate.NullOrdinate; ret.SetOrdinate(0, Ordinate.Z, z); var m = handleM ? startOrdinateValues[3] : Coordinate.NullOrdinate; ret.SetOrdinate(0, Ordinate.M, m); if (number == 1) return ret; var ordinateValues = import.GetSingles(buffer, ref offset, (number - 2) * 4); var j = 0; int i; for (i = 1; i < number - 1; i++) { x += ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(x)); y += ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(y)); if (handleZ) z += ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.Z, z); if (handleM) m += ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.M, m); } startOrdinateValues = import.GetDoubles(buffer, ref offset, 4); ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(startOrdinateValues[0])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(startOrdinateValues[1])); z = handleZ ? startOrdinateValues[2] : Coordinate.NullOrdinate; ret.SetOrdinate(i, Ordinate.Z, z); m = handleM ? startOrdinateValues[3] : Coordinate.NullOrdinate; ret.SetOrdinate(i, Ordinate.M, m); return ret; }
private static ICoordinateSequence ReadCompressedXYZM(byte[] buffer, ref int offset, int number, GaiaImport import, ICoordinateSequenceFactory factory, IPrecisionModel precisionModel) { var startOrdinateValues = import.GetDoubles(buffer, ref offset, 4); var ret = factory.Create(number, Ordinates.XYM); var handleZ = (ret.Ordinates & Ordinates.Z) == Ordinates.Z; var handleM = (ret.Ordinates & Ordinates.M) == Ordinates.M; var x = startOrdinateValues[0]; ret.SetOrdinate(0, Ordinate.X, precisionModel.MakePrecise(x)); var y = startOrdinateValues[1]; ret.SetOrdinate(0, Ordinate.Y, precisionModel.MakePrecise(y)); var z = handleZ ? startOrdinateValues[2] : Coordinate.NullOrdinate; ret.SetOrdinate(0, Ordinate.Z, z); var m = handleM ? startOrdinateValues[3] : Coordinate.NullOrdinate; ret.SetOrdinate(0, Ordinate.M, m); if (number == 1) { return(ret); } var ordinateValues = import.GetSingles(buffer, ref offset, (number - 2) * 4); var j = 0; int i; for (i = 1; i < number - 1; i++) { x += ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(x)); y += ordinateValues[j++]; ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(y)); if (handleZ) { z += ordinateValues[j++]; } ret.SetOrdinate(i, Ordinate.Z, z); if (handleM) { m += ordinateValues[j++]; } ret.SetOrdinate(i, Ordinate.M, m); } startOrdinateValues = import.GetDoubles(buffer, ref offset, 4); ret.SetOrdinate(i, Ordinate.X, precisionModel.MakePrecise(startOrdinateValues[0])); ret.SetOrdinate(i, Ordinate.Y, precisionModel.MakePrecise(startOrdinateValues[1])); z = handleZ ? startOrdinateValues[2] : Coordinate.NullOrdinate; ret.SetOrdinate(i, Ordinate.Z, z); m = handleM ? startOrdinateValues[3] : Coordinate.NullOrdinate; ret.SetOrdinate(i, Ordinate.M, m); return(ret); }
private static ReadCoordinatesFunction SetReadCoordinatesFunction(GaiaImport gaiaImport, GaiaGeoGeometry type) { gaiaImport.SetGeometryType(type); if (gaiaImport.Uncompressed) { if (gaiaImport.HasZ && gaiaImport.HasM) return ReadXYZM; if (gaiaImport.HasM) return ReadXYM; if (gaiaImport.HasZ) return ReadXYZ; return ReadXY; } if (gaiaImport.HasZ && gaiaImport.HasM) return ReadCompressedXYZM; if (gaiaImport.HasM) return ReadCompressedXYM; if (gaiaImport.HasZ) return ReadCompressedXYZ; return ReadCompressedXY; }