public CropZone ImportCropZone(ISOPartfield isoPartfield) { CropZone cropZone = new CropZone(); //Cropzone ID ImportIDs(cropZone.Id, isoPartfield.PartfieldID); //Field ID if (!string.IsNullOrEmpty(isoPartfield.FieldIdRef)) { cropZone.FieldId = TaskDataMapper.InstanceIDMap.GetADAPTID(isoPartfield.FieldIdRef).Value; //Cropzone has a defined parent field in the ISO XML } else { cropZone.FieldId = TaskDataMapper.InstanceIDMap.GetADAPTID(isoPartfield.PartfieldID).Value; //Field had a crop assigned and we created a single cropzone } //Area var numericValue = new NumericValue(new CompositeUnitOfMeasure("m2").ToModelUom(), (double)(isoPartfield.PartfieldArea)); cropZone.Area = new NumericRepresentationValue(RepresentationInstanceList.vrReportedFieldArea.ToModelRepresentation(), numericValue.UnitOfMeasure, numericValue); //Name cropZone.Description = isoPartfield.PartfieldDesignator; //Boundary PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); IEnumerable <Polygon> boundaryPolygons = polygonMapper.ImportPolygons(isoPartfield.Polygons).ToList(); if (boundaryPolygons.Any()) { MultiPolygon boundary = new MultiPolygon(); boundary.Polygons = boundaryPolygons.ToList(); cropZone.BoundingRegion = boundary; } //Guidance GuidanceGroupMapper guidanceGroupMapper = new GuidanceGroupMapper(TaskDataMapper); IEnumerable <GuidanceGroup> groups = guidanceGroupMapper.ImportGuidanceGroups(isoPartfield.GuidanceGroups); if (groups.Any()) { if (DataModel.Catalog.GuidanceGroups == null) { DataModel.Catalog.GuidanceGroups = new List <GuidanceGroup>(); } DataModel.Catalog.GuidanceGroups.AddRange(groups); cropZone.GuidanceGroupIds = groups.Select(g => g.Id.ReferenceId).ToList(); } //Crop int?adaptCropID = TaskDataMapper.InstanceIDMap.GetADAPTID(isoPartfield.CropTypeIdRef); if (adaptCropID.HasValue) { cropZone.CropId = adaptCropID.Value; } return(cropZone); }
public Field ImportField(ISOPartfield isoPartfield) { Field field = new Field(); //Field ID ImportIDs(field.Id, isoPartfield.PartfieldID); //Farm ID field.FarmId = TaskDataMapper.InstanceIDMap.GetADAPTID(isoPartfield.FarmIdRef); //Area var numericValue = new NumericValue(new CompositeUnitOfMeasure("m2").ToModelUom(), (double)(isoPartfield.PartfieldArea)); field.Area = new NumericRepresentationValue(RepresentationInstanceList.vrReportedFieldArea.ToModelRepresentation(), numericValue.UnitOfMeasure, numericValue); //Name field.Description = isoPartfield.PartfieldDesignator; //Boundary PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); IEnumerable <Polygon> boundaryPolygons = polygonMapper.ImportPolygons(isoPartfield.Polygons).ToList(); if (boundaryPolygons.Any()) { MultiPolygon boundary = new MultiPolygon(); boundary.Polygons = boundaryPolygons.ToList(); FieldBoundary fieldBoundary = new FieldBoundary { FieldId = field.Id.ReferenceId, SpatialData = boundary, }; //Add the boundary to the Catalog if (DataModel.Catalog.FieldBoundaries == null) { DataModel.Catalog.FieldBoundaries = new List <FieldBoundary>(); } DataModel.Catalog.FieldBoundaries.Add(fieldBoundary); field.ActiveBoundaryId = fieldBoundary.Id.ReferenceId; } //Guidance GuidanceGroupMapper guidanceGroupMapper = new GuidanceGroupMapper(TaskDataMapper); IEnumerable <GuidanceGroup> groups = guidanceGroupMapper.ImportGuidanceGroups(isoPartfield.GuidanceGroups); if (groups.Any()) { field.GuidanceGroupIds = groups.Select(g => g.Id.ReferenceId).ToList(); } //TODO any obstacle, flag, entry, etc. data //TODO store Partfield Code as ContextItem return(field); }
public ISOPartfield ExportField(Field adaptField) { ISOPartfield isoField = new ISOPartfield(); //Field ID string fieldID = adaptField.Id.FindIsoId() ?? GenerateId(); isoField.PartfieldID = fieldID; ExportIDs(adaptField.Id, fieldID); ExportContextItems(adaptField.ContextItems, fieldID, "ADAPT_Context_Items:Field"); //Customer & Farm ID ExportFarmAndGrower(adaptField, isoField); //isoField.PartfieldCode = ? //TODO ContextItem? //Area if (adaptField.Area != null) { isoField.PartfieldArea = (uint)(adaptField.Area.Value.ConvertToUnit(new CompositeUnitOfMeasure("m2"))); } //Name isoField.PartfieldDesignator = adaptField.Description; //Boundary PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); FieldBoundary boundary = DataModel.Catalog.FieldBoundaries.SingleOrDefault(b => b.FieldId == adaptField.Id.ReferenceId); if (boundary != null) { IEnumerable <ISOPolygon> isoPolygons = polygonMapper.ExportPolygons(boundary.SpatialData.Polygons, ISOEnumerations.ISOPolygonType.PartfieldBoundary); isoField.Polygons.AddRange(isoPolygons); } //Guidance if (DataModel.Catalog.GuidanceGroups != null) { List <GuidanceGroup> groups = new List <GuidanceGroup>(); foreach (int groupID in adaptField.GuidanceGroupIds) { GuidanceGroup group = DataModel.Catalog.GuidanceGroups.SingleOrDefault(g => g.Id.ReferenceId == groupID); if (group != null) { groups.Add(group); } } GuidanceGroupMapper ggpMapper = TaskDataMapper.GuidanceGroupMapper; isoField.GuidanceGroups = ggpMapper.ExportGuidanceGroups(groups).ToList(); } //TODO any obstacle, flag, entry, etc. data pending fixes to InteriorBoundaryAttribute class return(isoField); }
public IEnumerable <ISOPartfield> ExportCropZones(IEnumerable <CropZone> cropZones) { List <ISOPartfield> isoFields = new List <ISOPartfield>(); foreach (CropZone cropZone in cropZones) { ISOPartfield isoField = ExportCropZone(cropZone); isoFields.Add(isoField); } return(isoFields); }
public IEnumerable <ISOPartfield> ExportFields(IEnumerable <Field> adaptFields) { List <ISOPartfield> isoFields = new List <ISOPartfield>(); foreach (Field field in adaptFields) { ISOPartfield isoField = ExportField(field); isoFields.Add(isoField); } return(isoFields); }
private void ExportFarmAndGrower(Field field, ISOPartfield isoField) { if (field.FarmId.HasValue) { isoField.FarmIdRef = TaskDataMapper.InstanceIDMap.GetISOID(field.FarmId.Value); Farm adaptFarm = DataModel.Catalog.Farms.FirstOrDefault(f => f.Id.ReferenceId == field.FarmId); if ((adaptFarm != null) && adaptFarm.GrowerId.HasValue) { isoField.CustomerIdRef = TaskDataMapper.InstanceIDMap.GetISOID(adaptFarm.GrowerId.Value); } } }
public ISO11783_TaskData Export(ApplicationDataModel.ADM.ApplicationDataModel adm) { AdaptDataModel = adm; //TaskData ISOTaskData = new ISO11783_TaskData(); ISOTaskData.VersionMajor = 4; ISOTaskData.VersionMinor = 0; ISOTaskData.ManagementSoftwareManufacturer = "AgGateway"; ISOTaskData.ManagementSoftwareVersion = "1.0"; ISOTaskData.DataTransferOrigin = ISOEnumerations.ISOTaskDataTransferOrigin.FMIS; ISOTaskData.TaskControllerManufacturer = ""; ISOTaskData.TaskControllerVersion = ""; //LinkList ISOTaskData.LinkList = new ISO11783_LinkList(); ISOTaskData.LinkList.VersionMajor = 4; ISOTaskData.LinkList.VersionMinor = 0; ISOTaskData.LinkList.ManagementSoftwareManufacturer = "AgGateway"; ISOTaskData.LinkList.ManagementSoftwareVersion = "1.0"; ISOTaskData.LinkList.DataTransferOrigin = ISOEnumerations.ISOTaskDataTransferOrigin.FMIS; ISOTaskData.LinkList.TaskControllerManufacturer = ""; ISOTaskData.LinkList.TaskControllerVersion = ""; ISOTaskData.LinkList.FileVersion = ""; UniqueIDMapper = new UniqueIdMapper(ISOTaskData.LinkList); //Crops if (adm.Catalog.Crops != null) { CropTypeMapper cropMapper = new CropTypeMapper(this, ProductGroupMapper); IEnumerable <ISOCropType> crops = cropMapper.ExportCropTypes(adm.Catalog.Crops); ISOTaskData.ChildElements.AddRange(crops); } //Products if (adm.Catalog.Products != null) { IEnumerable <Product> products = AdaptDataModel.Catalog.Products; if (products.Any()) { ProductMapper productMapper = new ProductMapper(this, ProductGroupMapper); IEnumerable <ISOProduct> isoProducts = productMapper.ExportProducts(products); ISOTaskData.ChildElements.AddRange(isoProducts); } } //Growers if (adm.Catalog.Growers != null) { CustomerMapper customerMapper = new CustomerMapper(this); IEnumerable <ISOCustomer> customers = customerMapper.Export(adm.Catalog.Growers); ISOTaskData.ChildElements.AddRange(customers); } //Farms if (adm.Catalog.Farms != null) { FarmMapper farmMapper = new FarmMapper(this); IEnumerable <ISOFarm> farms = farmMapper.Export(adm.Catalog.Farms); ISOTaskData.ChildElements.AddRange(farms); } //Fields & Cropzones if (adm.Catalog.Fields != null) { PartfieldMapper fieldMapper = new PartfieldMapper(this); foreach (Field field in adm.Catalog.Fields) { IEnumerable <CropZone> fieldCropZones = adm.Catalog.CropZones.Where(c => c.FieldId == field.Id.ReferenceId); if (fieldCropZones.Count() == 0) { //Export Field ISOPartfield isoField = fieldMapper.ExportField(field); ISOTaskData.ChildElements.Add(isoField); } else if (fieldCropZones.Count() == 1) { //Export Cropzone to retain the crop reference ISOPartfield isoField = fieldMapper.ExportCropZone(fieldCropZones.First()); ISOTaskData.ChildElements.Add(isoField); } else { //Export both ISOPartfield isoField = fieldMapper.ExportField(field); ISOTaskData.ChildElements.Add(isoField); foreach (CropZone cropZone in fieldCropZones) { ISOPartfield isoCropField = fieldMapper.ExportCropZone(cropZone); ISOTaskData.ChildElements.Add(isoCropField); } } } } //Workers if (adm.Catalog.Persons != null) { WorkerMapper workerMapper = new WorkerMapper(this); IEnumerable <ISOWorker> workers = workerMapper.Export(adm.Catalog.Persons); ISOTaskData.ChildElements.AddRange(workers); } //Devices if (adm.Catalog.DeviceModels.Any()) { DeviceMapper dvcMapper = new DeviceMapper(this); IEnumerable <ISODevice> devices = dvcMapper.ExportDevices(adm.Catalog.DeviceModels); ISOTaskData.ChildElements.AddRange(devices); } //Tasks if (AdaptDataModel.Documents.WorkItems.Any() || AdaptDataModel.Documents.LoggedData.Any()) { TaskMapper taskMapper = new TaskMapper(this); if (AdaptDataModel.Documents.WorkItems != null) { //Prescriptions int gridType = 1; if (Properties != null) { Int32.TryParse(Properties.GetProperty(ISOGrid.GridTypeProperty), out gridType); } if (gridType == 1 || gridType == 2) { IEnumerable <ISOTask> plannedTasks = taskMapper.Export(AdaptDataModel.Documents.WorkItems, gridType); ISOTaskData.ChildElements.AddRange(plannedTasks); } else { AddError($"Invalid Grid Type {gridType}. WorkItems will not be exported", null, "TaskDataMapper"); } } if (AdaptDataModel.Documents.LoggedData != null) { //LoggedData IEnumerable <ISOTask> loggedTasks = taskMapper.Export(AdaptDataModel.Documents.LoggedData); ISOTaskData.ChildElements.AddRange(loggedTasks.Where(t => !ISOTaskData.ChildElements.OfType <ISOTask>().Contains(t))); } } //Add Comments ISOTaskData.ChildElements.AddRange(CommentMapper.ExportedComments); //Add LinkList Attached File Reference if (ISOTaskData.LinkList.LinkGroups.Any()) { ISOAttachedFile afe = new ISOAttachedFile(); afe.FilenamewithExtension = "LINKLIST.XML"; afe.Preserve = ISOEnumerations.ISOAttachedFilePreserve.Preserve; afe.ManufacturerGLN = string.Empty; afe.FileType = 1; ISOTaskData.ChildElements.Add(afe); } return(ISOTaskData); }
public ISOPartfield ExportCropZone(CropZone cropZone) { ISOPartfield isoField = new ISOPartfield(); //Field ID string fieldID = cropZone.Id.FindIsoId() ?? GenerateId(); isoField.PartfieldID = fieldID; ExportIDs(cropZone.Id, fieldID); //Parent Field ID isoField.FieldIdRef = TaskDataMapper.InstanceIDMap.GetISOID(cropZone.FieldId); //Customer & Farm ID Field field = DataModel.Catalog.Fields.FirstOrDefault(f => f.Id.ReferenceId == cropZone.FieldId); if (field != null) { ExportFarmAndGrower(field, isoField); } //Area if (cropZone.Area != null) { isoField.PartfieldArea = (uint)(cropZone.Area.Value.ConvertToUnit(new CompositeUnitOfMeasure("m2"))); } //Name isoField.PartfieldDesignator = cropZone.Description; //Boundary if (cropZone.BoundingRegion != null) { PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); isoField.Polygons = polygonMapper.ExportPolygons(cropZone.BoundingRegion.Polygons, ISOEnumerations.ISOPolygonType.PartfieldBoundary).ToList(); } //Guidance if (DataModel.Catalog.GuidanceGroups != null) { List <GuidanceGroup> groups = new List <GuidanceGroup>(); foreach (int groupID in cropZone.GuidanceGroupIds) { GuidanceGroup group = DataModel.Catalog.GuidanceGroups.SingleOrDefault(g => g.Id.ReferenceId == groupID); if (group != null) { groups.Add(group); } } GuidanceGroupMapper ggpMapper = new GuidanceGroupMapper(TaskDataMapper); isoField.GuidanceGroups = ggpMapper.ExportGuidanceGroups(groups).ToList(); } if (cropZone.CropId.HasValue) { string isoCrop = TaskDataMapper.InstanceIDMap.GetISOID(cropZone.CropId.Value); isoField.CropTypeIdRef = isoCrop; } return(isoField); }
public Field ImportField(ISOPartfield isoPartfield) { Field field = new Field(); //Field ID ImportIDs(field.Id, isoPartfield.PartfieldID); field.ContextItems = ImportContextItems(isoPartfield.PartfieldID, "ADAPT_Context_Items:Field"); //Farm ID field.FarmId = TaskDataMapper.InstanceIDMap.GetADAPTID(isoPartfield.FarmIdRef); //Area var numericValue = new NumericValue(new CompositeUnitOfMeasure("m2").ToModelUom(), (double)(isoPartfield.PartfieldArea)); field.Area = new NumericRepresentationValue(RepresentationInstanceList.vrReportedFieldArea.ToModelRepresentation(), numericValue.UnitOfMeasure, numericValue); //Name field.Description = isoPartfield.PartfieldDesignator; //Boundary FieldBoundary fieldBoundary = null; PolygonMapper polygonMapper = new PolygonMapper(TaskDataMapper); IEnumerable <Polygon> boundaryPolygons = polygonMapper.ImportBoundaryPolygons(isoPartfield.Polygons); if (boundaryPolygons.Any()) { MultiPolygon boundary = new MultiPolygon(); boundary.Polygons = boundaryPolygons.ToList(); fieldBoundary = new FieldBoundary { FieldId = field.Id.ReferenceId, SpatialData = boundary, }; //Add the boundary to the Catalog if (DataModel.Catalog.FieldBoundaries == null) { DataModel.Catalog.FieldBoundaries = new List <FieldBoundary>(); } DataModel.Catalog.FieldBoundaries.Add(fieldBoundary); field.ActiveBoundaryId = fieldBoundary.Id.ReferenceId; } //Guidance GuidanceGroupMapper guidanceGroupMapper = new GuidanceGroupMapper(TaskDataMapper); IEnumerable <GuidanceGroup> groups = guidanceGroupMapper.ImportGuidanceGroups(isoPartfield.GuidanceGroups); if (groups.Any()) { field.GuidanceGroupIds = groups.Select(g => g.Id.ReferenceId).ToList(); } //Obstacles, flags, etc. if (fieldBoundary != null) { foreach (AttributeShape attributePolygon in polygonMapper.ImportAttributePolygons(isoPartfield.Polygons)) { fieldBoundary.InteriorBoundaryAttributes.Add( new InteriorBoundaryAttribute() { Description = attributePolygon.Name, ContextItems = new List <ContextItem>() { new ContextItem() { Code = "Pr_ISOXML_Attribute_Type", Value = attributePolygon.TypeName } }, Shape = attributePolygon.Shape }); } if (isoPartfield.LineStrings.Any()) { LineStringMapper lsgMapper = new LineStringMapper(TaskDataMapper); foreach (AttributeShape attributeLsg in lsgMapper.ImportAttributeLineStrings(isoPartfield.LineStrings)) { fieldBoundary.InteriorBoundaryAttributes.Add( new InteriorBoundaryAttribute() { Description = attributeLsg.Name, ContextItems = new List <ContextItem>() { new ContextItem() { Code = "Pr_ISOXML_Attribute_Type", Value = attributeLsg.TypeName } }, Shape = attributeLsg.Shape }); } } if (isoPartfield.Points.Any()) { PointMapper pointMapper = new PointMapper(TaskDataMapper); foreach (AttributeShape attributePoint in pointMapper.ImportAttributePoints(isoPartfield.Points)) { fieldBoundary.InteriorBoundaryAttributes.Add( new InteriorBoundaryAttribute() { Description = attributePoint.Name, ContextItems = new List <ContextItem>() { new ContextItem() { Code = "Pr_ISOXML_Attribute_Type", Value = attributePoint.TypeName } }, Shape = attributePoint.Shape }); } } } //TODO store Partfield Code as ContextItem return(field); }