private static void WriteParcel(ref XmlWriter writer, ref ParcelData parcelData, ref PointDictionary pointDictionary, ref MapPoint projectedStartPoint, double scale, double rotation, ref Configuration configuration, ref DocumentEntry documentType) { ObservableCollection<ParcelLineRow> parcelRecord = parcelData.GetRecordInfo(); if (parcelRecord.Count == 0) return; if (rotation < 0) rotation += 360; writer.WriteStartElement("parcels"); writer.WriteStartElement("parcel"); writer.WriteElementString("name", parcelData.ParcelName); if (scale != 1.0) writer.WriteElementString("scale", scale.ToString(_doubleFormat)); if (rotation != 0.0) writer.WriteElementString("rotation", rotation.ToString(_doubleFormat)); string statedArea = "statedArea"; if (parcelData.StatedArea != "") writer.WriteElementString(statedArea, parcelData.StatedArea); else if (parcelData.MiscloseArea > 0) writer.WriteElementString(statedArea, parcelData.MiscloseArea.ToString("F2")); writer.WriteElementString("joined", "false"); writer.WriteElementString("parcelNo", "1"); writer.WriteElementString("type", documentType.Type.ToString()); if ((parcelData.MiscloseDistance != 0.0) && (parcelData.MiscloseBearing != 0.0)) { writer.WriteElementString("miscloseDistance", parcelData.MiscloseDistance.ToString(_doubleFormat)); writer.WriteElementString("miscloseBearing", parcelData.MiscloseBearing.ToString(_doubleFormat)); } // Write document type EA object if (documentType.HasEA) { writer.WriteStartElement("extendedAttributes"); writer.WriteStartElement("extendedAttribute"); writer.WriteElementString("name", documentType.EAField); writer.WriteElementString("value", documentType.EAValue); writer.WriteElementString("type", "VT_BSTR"); writer.WriteEndElement(); writer.WriteEndElement(); } WriteConstructionData(ref writer, ref parcelData, ref pointDictionary, ref projectedStartPoint, ref configuration, parcelRecord[0]); WriteLines(ref writer, ref parcelData, ref documentType, ref configuration); writer.WriteEndElement(); // parcel writer.WriteEndElement(); // parcels }
private static void WritePlans(ref XmlWriter writer, ref ParcelData parcelData, ref PointDictionary pointDictionary, ref MapPoint projectedStartPoint, double scale, double rotation, ref Configuration configuration, ref DocumentEntry documentType) { ObservableCollection<ParcelLineRow> parcelRecord = parcelData.GetRecordInfo(); writer.WriteStartElement("plans"); writer.WriteStartElement("plan"); writer.WriteElementString("name", parcelData.PlanName); writer.WriteElementString("description", documentType.Name); writer.WriteElementString("angleUnits", XMLDirectionUnit(parcelData.Configuration.EntryFormat)); writer.WriteElementString("distanceUnits", GeometryUtil.PacketUnitString(configuration.EntryUnitsPerMeter)); writer.WriteElementString("directionFormat", XMLDirectionType(parcelData.Configuration.EntryFormat)); writer.WriteElementString("areaUnits", XMLAreaUnit(parcelData.Configuration.AreaUnit)); writer.WriteElementString("lineParameters", "ChordBearingAndChordLengthAndRadius"); WriteParcel(ref writer, ref parcelData, ref pointDictionary, ref projectedStartPoint, scale, rotation, ref configuration, ref documentType); writer.WriteEndElement(); writer.WriteEndElement(); }
private static void WriteLines(ref XmlWriter writer, ref ParcelData parcelData, ref DocumentEntry documentType, ref Configuration configuration) { writer.WriteStartElement("lines"); // Write non radial lines ObservableCollection<ParcelLineRow> parcelRecord = parcelData.GetRecordInfo(); Int32 firstId = -1, index = 0, count = 0; foreach (ParcelLineRow record in parcelRecord) if (!IncompleteLine(record)) count++; foreach (ParcelLineRow record in parcelRecord) { if (IncompleteLine(record)) continue; index++; if ((firstId == -1) && (record.Category == LineCategory.Boundary)) firstId = record.GetFrom(); Int32 overrideTo = count == index && count != 1 ? firstId : -1; if (record.Category != LineCategory.Radial) WriteLine(ref writer, record, ref documentType, overrideTo); } // Write radial lines foreach (ParcelLineRow record in parcelRecord) { if (record.CenterPoint == null) continue; ParcelLineRow radialRecord = new ParcelLineRow(ref configuration); radialRecord.From = record.From; radialRecord.To = record.CenterPoint.ToString(); radialRecord.Bearing = GeometryUtil.RadianToDegree(record.RadialBearing1.GetValueOrDefault(0)).ToString(); radialRecord.Distance = record.Radius; radialRecord.Category = LineCategory.Radial; WriteLine(ref writer, radialRecord, ref documentType, -1); radialRecord.From = record.To; radialRecord.Bearing = GeometryUtil.RadianToDegree(record.RadialBearing2.GetValueOrDefault(0)).ToString(); WriteLine(ref writer, radialRecord, ref documentType, -1); } writer.WriteEndElement(); // lines }
private static void WriteLine(ref XmlWriter writer, ParcelLineRow record, ref DocumentEntry documentType, Int32 to) { if (IncompleteLine(record)) return; // incomplete line if (to == -1) to = record.GetTo(); writer.WriteStartElement("line"); writer.WriteElementString("fromPoint", record.GetFrom().ToString()); writer.WriteElementString("toPoint", to.ToString()); writer.WriteElementString("bearing", record.GetBearing(false).ToString(_doubleFormat)); writer.WriteElementString("distance", record.GetChordDistance().ToString(_doubleFormat)); writer.WriteElementString("category", record.Category.ToString()); if (documentType != null) writer.WriteElementString("type", documentType.Type.ToString()); double radius = record.GetRadius(); if ((radius != 0.0) && (record.CenterPoint != null)) { writer.WriteElementString("radius", radius.ToString(_doubleFormat)); writer.WriteElementString("centerPoint", record.CenterPoint.ToString()); } writer.WriteEndElement(); }
private static void WriteLines(ref XmlWriter writer, ref ParcelData parcelData, ref DocumentEntry documentType, ref Configuration configuration) { writer.WriteStartElement("lines"); // Write non radial lines ObservableCollection <ParcelLineRow> parcelRecord = parcelData.GetRecordInfo(); Int32 firstId = -1, index = 0, count = 0; foreach (ParcelLineRow record in parcelRecord) { if (!IncompleteLine(record)) { count++; } } foreach (ParcelLineRow record in parcelRecord) { if (IncompleteLine(record)) { continue; } index++; if ((firstId == -1) && (record.Category == LineCategory.Boundary)) { firstId = record.GetFrom(); } Int32 overrideTo = count == index && count != 1 ? firstId : -1; if (record.Category != LineCategory.Radial) { WriteLine(ref writer, record, ref documentType, overrideTo); } } // Write radial lines foreach (ParcelLineRow record in parcelRecord) { if (record.CenterPoint == null) { continue; } ParcelLineRow radialRecord = new ParcelLineRow(ref configuration); radialRecord.From = record.From; radialRecord.To = record.CenterPoint.ToString(); radialRecord.Bearing = GeometryUtil.RadianToDegree(record.RadialBearing1.GetValueOrDefault(0)).ToString(); radialRecord.Distance = record.Radius; radialRecord.Category = LineCategory.Radial; WriteLine(ref writer, radialRecord, ref documentType, -1); radialRecord.From = record.To; radialRecord.Bearing = GeometryUtil.RadianToDegree(record.RadialBearing2.GetValueOrDefault(0)).ToString(); WriteLine(ref writer, radialRecord, ref documentType, -1); } writer.WriteEndElement(); // lines }
private static void WriteParcel(ref XmlWriter writer, ref ParcelData parcelData, ref PointDictionary pointDictionary, ref MapPoint projectedStartPoint, double scale, double rotation, ref Configuration configuration, ref DocumentEntry documentType) { ObservableCollection <ParcelLineRow> parcelRecord = parcelData.GetRecordInfo(); if (parcelRecord.Count == 0) { return; } if (rotation < 0) { rotation += 360; } writer.WriteStartElement("parcels"); writer.WriteStartElement("parcel"); writer.WriteElementString("name", parcelData.ParcelName); if (scale != 1.0) { writer.WriteElementString("scale", scale.ToString(_doubleFormat)); } if (rotation != 0.0) { writer.WriteElementString("rotation", rotation.ToString(_doubleFormat)); } string statedArea = "statedArea"; if (parcelData.StatedArea != "") { writer.WriteElementString(statedArea, parcelData.StatedArea); } else if (parcelData.MiscloseArea > 0) { writer.WriteElementString(statedArea, parcelData.MiscloseArea.ToString("F2")); } writer.WriteElementString("joined", "false"); writer.WriteElementString("parcelNo", "1"); writer.WriteElementString("type", documentType.Type.ToString()); if ((parcelData.MiscloseDistance != 0.0) && (parcelData.MiscloseBearing != 0.0)) { writer.WriteElementString("miscloseDistance", parcelData.MiscloseDistance.ToString(_doubleFormat)); writer.WriteElementString("miscloseBearing", parcelData.MiscloseBearing.ToString(_doubleFormat)); } // Write document type EA object if (documentType.HasEA) { writer.WriteStartElement("extendedAttributes"); writer.WriteStartElement("extendedAttribute"); writer.WriteElementString("name", documentType.EAField); writer.WriteElementString("value", documentType.EAValue); writer.WriteElementString("type", "VT_BSTR"); writer.WriteEndElement(); writer.WriteEndElement(); } WriteConstructionData(ref writer, ref parcelData, ref pointDictionary, ref projectedStartPoint, ref configuration, parcelRecord[0]); WriteLines(ref writer, ref parcelData, ref documentType, ref configuration); writer.WriteEndElement(); // parcel writer.WriteEndElement(); // parcels }
private static void WritePlans(ref XmlWriter writer, ref ParcelData parcelData, ref PointDictionary pointDictionary, ref MapPoint projectedStartPoint, double scale, double rotation, ref Configuration configuration, ref DocumentEntry documentType) { ObservableCollection <ParcelLineRow> parcelRecord = parcelData.GetRecordInfo(); writer.WriteStartElement("plans"); writer.WriteStartElement("plan"); writer.WriteElementString("name", parcelData.PlanName); writer.WriteElementString("description", documentType.Name); writer.WriteElementString("angleUnits", XMLDirectionUnit(parcelData.Configuration.EntryFormat)); writer.WriteElementString("distanceUnits", GeometryUtil.PacketUnitString(configuration.EntryUnitsPerMeter)); writer.WriteElementString("directionFormat", XMLDirectionType(parcelData.Configuration.EntryFormat)); writer.WriteElementString("areaUnits", XMLAreaUnit(parcelData.Configuration.AreaUnit)); writer.WriteElementString("lineParameters", "ChordBearingAndChordLengthAndRadius"); WriteParcel(ref writer, ref parcelData, ref pointDictionary, ref projectedStartPoint, scale, rotation, ref configuration, ref documentType); writer.WriteEndElement(); writer.WriteEndElement(); }