private Coordinate GetCoordinate(StreamTokenizer tokenizer) { Coordinate coord = null; double dX = GetNextNumber(tokenizer); double dY = GetNextNumber(tokenizer); if (m_bMeasured) { double dT = GetNextNumber(tokenizer); if (IsNumberNext(tokenizer)) { double dM = GetNextNumber(tokenizer); coord = new Coordinate3DM(dX, dY, dT, dM); } else { coord = new CoordinateM(dX, dY, dT); } } else { if (IsNumberNext(tokenizer)) { double dZ = GetNextNumber(tokenizer); coord = new Coordinate3D(dX, dY, dZ); } else { coord = new Coordinate(dX, dY); } } return(coord); }
private void WritePostGIS(Coordinate coord) { m_objWriter.WriteDouble(coord.X); m_objWriter.WriteDouble(coord.Y); CoordinateType CoordType = coord.CoordinateType; if (coord.Dimension == 2) { if (CoordType == CoordinateType.Measured) { CoordinateM measured = (CoordinateM)coord; m_objWriter.WriteDouble(measured.Measure); } } else { // write the Z-value m_objWriter.WriteDouble(coord.GetOrdinate(2)); // check and write the Measure if (CoordType == CoordinateType.Measured) { Coordinate3DM measured = (Coordinate3DM)coord; m_objWriter.WriteDouble(measured.Measure); } } }
/// <summary> /// Converts a Coordinate to <Point> format, then appends /// it to the writer. /// </summary> /// <param name="coordinate">The Coordinate to process.</param> /// <param name="writer">The output writer to append to.</param> private void AppendCoordinate(Coordinate coordinate, TextWriter writer) { if (m_bIsMeasured) { if (coordinate.Dimension > 2) { Coordinate3DM measured = (Coordinate3DM)(coordinate); writer.Write(WriteNumber(measured.X) + " " + WriteNumber(measured.Y) + " " + WriteNumber(measured.Z) + " " + WriteNumber(measured.Measure)); } else { CoordinateM measured = (CoordinateM)(coordinate); writer.Write(WriteNumber(measured.X) + " " + WriteNumber(measured.Y) + " " + WriteNumber(measured.Measure)); } } else { if (coordinate.Dimension > 2) { double dZ = coordinate.GetOrdinate(2); writer.Write(WriteNumber(coordinate.X) + " " + WriteNumber(coordinate.Y) + " " + WriteNumber(dZ)); } else { writer.Write(WriteNumber(coordinate.X) + " " + WriteNumber(coordinate.Y)); } } }
private Coordinate ReadCoordinate(bool hasZ, bool hasM) { double x = m_objReader.ReadDouble(); double y = m_objReader.ReadDouble(); Coordinate coord = null; if (hasZ) { double z = m_objReader.ReadDouble(); if (hasM) { double m = m_objReader.ReadDouble(); coord = new Coordinate3DM(x, y, z, m); } else { coord = new Coordinate3D(x, y, y); } } else { if (hasM) { double m = m_objReader.ReadDouble(); coord = new CoordinateM(x, y, m); } else { coord = new Coordinate(x, y); } } coord.MakePrecise(m_objPrecision); return(coord); }
/// <summary> /// /// </summary> /// <param name="coordinate"></param> /// <param name="writer"></param> /// <param name="usePrefix"></param> /// <param name="coordPrefix"></param> private void WriteCoord(Coordinate coordinate, XmlWriter writer, bool usePrefix, string coordPrefix) { if (usePrefix) { writer.WriteStartElement(m_strPrefix, GeometryGml2.GmlCoord, null); } else { writer.WriteStartElement(GeometryGml2.GmlCoord); } // write the X and Y if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordX, WriteNumber(coordinate.X)); writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordY, WriteNumber(coordinate.Y)); } else { writer.WriteElementString(GeometryGml2.GmlCoordX, WriteNumber(coordinate.X)); writer.WriteElementString(GeometryGml2.GmlCoordY, WriteNumber(coordinate.Y)); } // if available, write the Z if (coordinate.Dimension > 2) { double dZ = coordinate.GetOrdinate(2); if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordZ, WriteNumber(dZ)); } else { writer.WriteElementString(GeometryGml2.GmlCoordZ, WriteNumber(dZ)); } } // if available, add the M if (m_bIsMeasured) { if (coordinate.Dimension > 2) { Coordinate3DM measured = (Coordinate3DM)(coordinate); if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } else { writer.WriteElementString(GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } } else { CoordinateM measured = (CoordinateM)(coordinate); if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } else { writer.WriteElementString(GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } } } writer.WriteEndElement(); }
/// <summary> /// /// </summary> /// <param name="coordinate"></param> /// <param name="writer"></param> private void Write(Coordinate coordinate, XmlWriter writer) { bool usePrefix = false; string coordPrefix = null; if (m_bUsePrefix && (m_strPrefix != null && m_strPrefix.Length != 0)) { usePrefix = true; coordPrefix = m_strPrefix + ":"; } // if used to use the "coord" coordinates option or we have the // measured coordinate type... if (m_bUseCoord || m_bIsMeasured) { if (usePrefix) { writer.WriteStartElement(m_strPrefix, GeometryGml2.GmlCoord, null); } else { writer.WriteStartElement(GeometryGml2.GmlCoord); } // write the X and Y if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordX, WriteNumber(coordinate.X)); writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordY, WriteNumber(coordinate.Y)); } else { writer.WriteElementString(GeometryGml2.GmlCoordX, WriteNumber(coordinate.X)); writer.WriteElementString(GeometryGml2.GmlCoordY, WriteNumber(coordinate.Y)); } // if available, write the Z if (coordinate.Dimension > 2) { double dZ = coordinate.GetOrdinate(2); if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordZ, WriteNumber(dZ)); } else { writer.WriteElementString(GeometryGml2.GmlCoordZ, WriteNumber(dZ)); } } // if available, add the M if (m_bIsMeasured) { if (coordinate.Dimension > 2) { Coordinate3DM measured = (Coordinate3DM)(coordinate); if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } else { writer.WriteElementString(GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } } else { CoordinateM measured = (CoordinateM)(coordinate); if (usePrefix) { writer.WriteElementString(coordPrefix + GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } else { writer.WriteElementString(GeometryGml2.GmlCoordM, WriteNumber(measured.Measure)); } } } writer.WriteEndElement(); } else { if (usePrefix) { writer.WriteStartElement(m_strPrefix, GeometryGml2.GmlCoordinates, null); } else { writer.WriteStartElement(GeometryGml2.GmlCoordinates); } if (coordinate.Dimension > 2) { double dZ = coordinate.GetOrdinate(2); writer.WriteString(WriteNumber(coordinate.X) + GeometryGml2.GmlCoordinateSeparator + WriteNumber(coordinate.Y) + GeometryGml2.GmlCoordinateSeparator + WriteNumber(dZ)); } else { writer.WriteString(WriteNumber(coordinate.X) + GeometryGml2.GmlCoordinateSeparator + WriteNumber(coordinate.Y)); } writer.WriteEndElement(); } }
/// <summary> /// /// </summary> /// <param name="reader"></param> /// <returns></returns> private Coordinate ReadCoord(XmlReader reader) { Coordinate coordinate = null; double x = 0, y = 0, z = Double.NaN, m = Double.NaN; while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == GeometryGml2.GmlCoordX) { x = Convert.ToDouble(reader.ReadString()); } else if (reader.Name == GeometryGml2.GmlCoordY) { y = Convert.ToDouble(reader.ReadString()); } else if (reader.Name == GeometryGml2.GmlCoordZ) { z = Convert.ToDouble(reader.ReadString()); } else if (reader.Name == GeometryGml2.GmlCoordM) { m = Convert.ToDouble(reader.ReadString()); } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name == GeometryGml2.GmlCoord) { break; } } } if (Double.IsNaN(z) || Double.IsInfinity(z)) { if ((Double.IsNaN(m) || Double.IsInfinity(m))) { coordinate = new Coordinate(x, y); } else { coordinate = new CoordinateM(x, y, m); } } else { if ((Double.IsNaN(m) || Double.IsInfinity(m))) { coordinate = new Coordinate3D(x, y, z); } else { coordinate = new Coordinate3DM(x, y, z, m); } } return(coordinate); }