Skip to main content

CN1 ADAPT Plugin Guide

Overview

AgGateway's ADAPT is an Open Source Software project. The ADAPT framework's goal is to provide a common language, a data model, for transferring Agronomic data from one system to another. This CN1 ADAPT plugin maps CNH Industrial's proprietary file format CN1 to the ADAPT data model. If your application supports ADAPT, you will be able to read the data stored in a CN1 file.

The plugin requires that at least one .CN1 folder to pre-present in the provided dataPath. The IsDataCardSupported() method checks this on the plugin.

The Import() method will return one ApplicationDataModel object per .CN1 folder in the provided dataPath.

Version Downloads

VersionRelease DateSource
CN1SDKADAPTPlugin_4.0.0.zip12/13/2023Download

Version Details

4.0.0 - .NET Standard 2.0

Object Mapping Details

Products

The plugin will currently map the following types of products in the ADAPT data model:

  • CropNutritionProduct - For all Fertilizer usage products
  • CropProtectionProudct - For Fungicide, Herbicide, Insecticide, or Pesticides
  • CropVarietyProduct - For planted crop variety products
  • GenericProduct - For Carriers or other generic products
  • MixProduct - For any product mixes (see more details below)

When available in the CN1 data model, the ProductDensity (or SeedPlantDensity for varieties) will also be mapped to the Density value.

There are several properties in the CN1 data model that do not map directly to the ADAPT data model and are handled by the following ContextItem codes:

  • US-EPA-N - The EPA Number.
  • ApplicationRates - Top level context item for the following nested context items. These values are all numeric and the ValueUOM indicates the unit of measure.
    • DefaultApplicationRate
    • MinimumApplicationRate
    • MaximumApplicationRate
  • MaximumWindSpeed - Maximum wind speed allowed by product label.
  • RequiredBufferDistance - Required buffer distance from product label.
  • IsNotificationRequired - Requirement to post a notice, based on product label.
  • IsRestricted - Indicates that usage of the product may be restricted, based on label.
  • PackageSize

CropNutritionProduct

The CropNutritionProduct is used for all Dry or Liquid fertilizer products from a CN1 folder. The IsManure flag is not set. There are no Ingredients available to record the different nutrient percentages provided by the fertilizer because individual nutrients are not tracked by the CN1 format.

CropProtectionProduct

The CropProtectionProduct is used for several different subtypes of crop protection: Fungicide, Herbicide, Insecticide, and Pesticides. The Category of the product is used to note the detailed subtype (for Fungicide, Herbicide, and Insecticide only). ADAPT does not currently have a category for Pesticides and those will be set to Unknown.

CropVarietyProduct

The CropVarietyProducts will contain a reference to a valid CropId. There are currently no mappings available for TraitIds in data coming from the CN1 folder and the GeneticallyEnhanced property will not be set.

GenericProduct

GenericProducts are used when the CN1 data has marked the product as Generic or as a Carrier. This would be used if "Water" was present as part of a product mix.

MixProduct

All of the ProductComponents for a MixProduct always reference other products for the CN1 plugin, the Ingredient object type is not used. The ProductComponent objects will have IsProduct property set to true and the IngredientId will reference an actual product in the Catalog.Products collection.

When available, the TotalQuantity for the mix will also be applied to the MixProduct object. This will use one of the following representations depending on the kind of product:

  • vrTotalQuantityAppliedVolume - for liquid products.
  • vrTotalQuantityAppliedMass - for dry products.
  • vrTotalSeedQuantityAppliedMass - for CropVariety measured by mass
  • vrTotalSeedQuantityAppliedSeed - for CropVariety measured by seeds

There are 2 different ways that the ProductComponent Quantity can be measured for a MixProduct. The MixProduct is configured in one of two ways:

  • By Formula
  • In this situation, the quantity represents the total amount of the product in the mix.
    • vrActiveIngredientMass is used for dry components.
    • vrActiveIngredientVolume is used for liquid components.
  • By Percentage
    • In this situation, the vrProductContent representation is used to note the percentage of product for the mix.
note

A single MixProduct only uses one or the other, and there will not be a combination of total ingredient amounts and percentages used for the same MixProduct.

Grower / Farm / Field

Grower

The plugin will currently map the following grower attributes to Adapt Model:

  • ICNHV2Grower.SUID to Id.UniqueIds.Id
  • ICNHV2Grower.Name to Name
note

CN1 data model does have Contact Information for grower. Contact information is not mapped.

Farm

The plugin will currently map the following farm attributes to Adapt Model:

  • ICNHV2Farm.SUID to Id.UniqueIds.Id
  • ICNHV2Farm.Name to Farm.Description

Farm contains GrowerId that references grower this is set by the plugin.

note

CN1 data model does have Contact Information for farm. Contact information is not mapped.

Field

The plugin will currently map the following field attributes to Adapt Model:

  • ICNHV2Field.SUID to Id.UniqueIds.Id

  • ICNHV2Field.Name to Field.Description

  • ICNHV2Field.Boundary to Field.FieldBoundary

  • ICNHV2Field.Area is mapped to Field.Area:

    • vrReportedFieldArea
    • Unit of Measure square meters
note

The field area is a user-entered value and may not accurately represent the field boundary area.

Field contains GrowerId and FarmId which references grower and farm both are set by the plugin.

Setup Data

Field Boundary

Field boundaries are mapped from the CN1 folder when they are available. There will be at most one FieldBoundary added per field since the CN1 folder structure only tracks one active boundary per field.

Inner and outer polygon rings from the CN1 folder will be spatially sorted to obey conventional geometry rules. The field boundary will always be represented as a MultiPolygon geometry object. Each Outer polygon will be mapped to an ExteriorRing on a Polygon within the MultiPolygon. Any Inner polygons that fall inside will be added to that polygon's polygon InteriorRings collection.

There may be some situations where an Inner polygon does not have a corresponding Outer ring. In this situation, a polygon will be created with an ExteriorRing and one InteriorRing set to the same geometry. The usage of the inner ring as the outer ring is to satisfy the requirement that all polygons have at least one outer ring.

Guidance Lines

The plugin will import any available guidance lines into the data model. By default, each guidance line from the CN1 folder will be placed into separate groups. When the SwathGroup is used, all of the same lines with the same SwathGroup will be placed into the same GuidanceGroup in the ADAPT model.

The following is a list of mappings for how each CN1 guidance pattern type maps to an ADAPT object:

  • CNHV2SwathTypeLine AbLine
  • CNHV2SwathTypeHeading APlus
  • CNHV2SwathTypePivot* PivotGuidancePattern
  • CNHV2SwathTypePivotMultiPoint* PivotGuidancePattern
  • CNHV2SwathTypePivotByValues PivotGuidancePattern
  • CNHV2SwathTypeSpiral Spiral
  • CNHV2SwathTypeCurve AbCurve
  • CNHV2SwathTypeFieldSwath AbCurve (Also maps to DrivenHeadland for FieldBoundary)
  • CNHV2SwathTypeMultiSwath AbCurve (Multiple in a GuidanceGroup)
  • CNHV2SwathTypeMultiSwathPlus AbCurve (Multiple in a GuidanceGroup)
note

The Pivot and PivotMultiPoint types define a pivot guidance pattern by using 3 points along the perimeter of the circle rather than a center point and radius as is customary for ADAPT. The plugin calculates the center point and radius to map to the PivotGuidancePattern. This may change in the future if ADAPT adds support for this additional method.

Obstacles

When available, obstacles for a field will be added as a ReferenceLayer with a ReferenceLayerType of Obstacles. There will be one Obstacles reference layer per field which contains obstacles.

Each obstacle shape for the field (Point, Line, or Polygon) will be added to the reference layer as a separate ShapeLookup item.

The following representations are used as SpatialAttributes on each of the ShapeLookup items on the reference layer:

  • srObstacleName - This is a StringValue and will contain the name of the obstacle.
  • dtObstacleLevel - This defines the warning level - there are 2 values:
    • dtiWarning - Warning-type
    • dtiObstacle - Obstacle
  • dtObstacleType - Detailed obstacle type can be any of the following pre-defined variables:
    • dtiObstacleTypeOther
    • dtiObstacleTypeFence
    • dtiObstacleTypeGrassWaterway
    • dtiObstacleTypeTerrace
    • dtiObstacleTypePond
    • dtiObstacleTypeRoad
    • dtiObstacleTypeRiverStream
    • dtiObstacleTypeSlough
    • dtiObstacleTypeDitch
    • dtiObstacleTypeTileInlet

All of the above representations are user-defined and are contained in the CN1Plugin.DefinedTypeInstanceList class in the plugin.

Prescriptions

Prescription data contained in a CN1 folder structure is mapped when available. The prescription rate maps are imported as either RasterGridPrescription or VectorPrescription depending on the internal geometry type.

Each RasterGridPrescription converted will only reference one Product at a time and will be assigned to a single field by the FieldId property. Each field may have multiple prescriptions for different products.

The representation and units of measure used for the prescriptions depend on the ProductForm used by the prescription itself. The mapping is as follows:

  • ProductForm Representation Units of measure
  • DryGranular - vrAppRateMassTarget kg/square meter
  • Liquid - vrAppRateVolumeTarget liters/square meter
  • Plant - vrSeedRateSeedsTarget count/square meter
  • Seed - vrSeedRateSeedsTarget count/square meter
  • BulkSeed - vrSeedRateMassTarget kg/square meter
  • Other - vrAppRateMassTarget kg/square meter

There is a ContextItem available on each prescription to note the creation date.

Logged Data

All supported logged data is mapped to the ApplicationDataModel.Documents.LoggedData collection.

The following types of logged data are currently supported by the plugin:

  • Grain Harvest
  • Forage Harvest
  • Cane Harvest
  • Cotton Harvest
  • Application Rate - (includes Planting, Spraying, Spreading, and other applications) Vehicle Performance

To ensure efficient processing and reduced memory usage, the plugin will dynamically load the logged records from the disk as the SpatialRecords are enumerated. As a best practice, it is important to call the ReleaseSpatialRecords method on the LoggedData object as soon as you are finished with the records.

WorkRecord documents are used to log summaries and other notes from the task where available. This includes the following items:

  • Crop Residue
  • Sky Condition
  • Soil Condition
  • Soil Moisture
  • Soil Texture
  • Humidity
  • Temperature
  • Wind Speed
  • Wind Direction

The following representations are available on the SpatialRecords for all data types handled by this plugin:

  • vrElevation (meters)

  • vrHeading (arc degrees)

  • vrDistanceTraveled (meters)

  • vrDeltaArea (square meters)

  • vrNumSatellites (count)

    note

    This is a User-Defined representation.

  • dtSignalType

  • dtRecordingStatus

The following representations are available on the Operation Summary:

Product FormRepresentationUnits of Measure
AreavrTotalAreaCoveredSquare Meters
Fuel (InWork)ISO 316liters
Fuel (OutOfWork)ISO 317liters

Harvest

Harvest data is relatively simple and is only available down to the Implement level. There is no section/subsection reporting for harvest. The following representations of data are available for harvest data:

Grain Harvest

  • vrYieldWetMass (kg)
  • vrHarvestMoisture (%)
  • vrConstituentCrudeProtein (%) - available when equipped with protein sensor.

Forage Harvest

  • vrYieldMassForage (kg)
  • vrHarvestMoisture (%)

Cotton Harvest

  • vrYieldMass (kg)

Cane Harvest

  • vrYieldMassCane (kg)

Application Data

Application data records at the Implement level as well as Section and SubSection levels where available. The two types of representations used are for Actual rate and Target rates. The representations used depend upon the product form just like the prescriptions.

Please note that subsection meters use different units of measure as shown below.

Implement and Section level - Actual representations:

Product FormRepresentationUnits of Measure
DryGranularvrAppRateMassActualkg/square meter
LiquidvrAppRateVolumeActuallitres/square meter
PlantvrSeedRateSeedsActualcount/square meter
SeedvrSeedRateSeedsActualcount/square meter
BulkSeedvrSeedRateMassActualkg/square meter
OthervrAppRateMassActualkg/square meter

SubSection level - Actual representations:

Product FormRepresentationUnits of Measure
DryGranularvrAppRateMassActualkg/square meter
LiquidvrAppRateVolumeActuallitres/square meter
PlantvrSeedRateSeedsActualthndSeeds/square meter
SeedvrSeedRateSeedsActualthndSeeds/square meter
BulkSeedvrSeedRateMassActualkg/square meter
OthervrAppRateMassActualkg/square meter

Implement, Section, and SubSection level - Target representations:

Product FormRepresentationUnits of Measure
DryGranularvrAppRateMassTargetkg/square meter
LiquidvrAppRateVolumeTargetlitres/square meter
PlantvrSeedRateSeedsTargetcount/square meter
SeedvrSeedRateSeedsTargetcount/square meter
BulkSeedvrSeedRateMassTargetkg/square meter
OthervrAppRateMassTargetkg/square meter

Operation Summary representations for product totals:

Product FormRepresentationUnits of Measure
DryGranularvrTotalQuantityAppliesMasskg
LiquidvrTotalQuantityAppliedVolumelitres
PlantvrTotalSeedQuantityAppliedSeedthndSeeds
SeedvrTotalSeedQuantityAppliedSeedthndSeeds
BulkSeedvrTotalSeedQuantityAppliedMasskg
OthervrTotalQuantityAppliedMasskg

Planting Data

Planting data is an extension of the Application data - please see the above section for notes on target and actual seeding rate meters. When properly equipped, Planting data may contain additional representations for singulation, seed spacing quality, downforce, ground contact, and row unit ride quality. These additional representations will only be present on the Section and SubSection levels where available.

Advanced Seed Sense Logging

  • vrPlantingSingulation (%)
  • vrPlantingSkips (%)
  • vrPlantingDoubles (%)
  • vrActualSeedSpacingCV (unitless)

Down Force Logging

  • vrDownForceMargin (newtons)
  • vrDownForceApplied (newtons)
  • vrGroundContact (%)
  • vrRideQuality (%)