![]() |
VOOZH | about |
dotnet add package AgGateway.ADAPT.StandardPlugin --version 1.0.4
NuGet\Install-Package AgGateway.ADAPT.StandardPlugin -Version 1.0.4
<PackageReference Include="AgGateway.ADAPT.StandardPlugin" Version="1.0.4" />
<PackageVersion Include="AgGateway.ADAPT.StandardPlugin" Version="1.0.4" />Directory.Packages.props
<PackageReference Include="AgGateway.ADAPT.StandardPlugin" />Project file
paket add AgGateway.ADAPT.StandardPlugin --version 1.0.4
#r "nuget: AgGateway.ADAPT.StandardPlugin, 1.0.4"
#:package AgGateway.ADAPT.StandardPlugin@1.0.4
#addin nuget:?package=AgGateway.ADAPT.StandardPlugin&version=1.0.4Install as a Cake Addin
#tool nuget:?package=AgGateway.ADAPT.StandardPlugin&version=1.0.4Install as a Cake Tool
The ADAPT Standard Plugin is a transitional tool to assist the industry in migrating from the ADAPT Framework to the ADAPT Standard. It converts the in-memory ADAPT Framework ApplicationDataModel into serialized data that conforms to the latest version of the ADAPT Standard.
The ADAPT Framework is a .Net plugin toolkit that allows data producers to provide software to data consumers to read proprietary files.
The ADAPT Standard is a replacement that encourages data producers to keep proprietary files in-house and provide consumers with a readable format that requires no software dependencies.
AgGateway acknowledges generous support from NIFA (USDA's National Institute of Food and Agriculture) and NAPDC (National Agricultural Producers Data Cooperative).
See the StandardPluginHarness for a simple example.
The ADAPT Framework was largely undocumented. As such, different plugin implementers used data elements in different ways. To convert data, plugin users will need to specify properties based on the source plugin so that data can be interpreted correctly. Below are known settings for various plugins. Data originating in the ADAPT Framework ADM plugin will need to account for the original source of the data.
Some plugins report SpatialRecord.Geometry as the point of the GNSS Receiver, and others report it as the Implement Reference Point. To correctly map the data, this plugin needs to factor this definition to determine which offsets to apply.
GNSS Receiver
Implement Reference Point
Plugins take different approaches on how to use the DeviceElementUse.Depth concept in the Framework.
DeviceElementHierarchy
Machine0Implement1Section2
ADAPT Standard Version 2.0 released in June 2025. The plugin converts to ADAPT Standard Version 2.0 and intends only to convert to the latest version of the specification at any time.
The following tables summarize plugin implementation where the ADAPT Framework and ADAPT Standard diverge.
| ADAPT Framework | ADAPT Standard |
|---|---|
*.Description |
*.Name The ADAPT Framework used Name and Description interchangeably. The ADAPT Standard treats name as a short name and description as an extended description. |
ContextItem.Code |
ContextItem.definitionCode |
ContextItem.Value |
ContextItem.valueText |
ContextItem.NestedItems |
ContextItem.contextItems |
TimeScope.TimeStamp1 |
TimeScope.start |
TimeScope.TimeStamp2 |
TimeScope.end |
TimeScope.DateContext.CropSeason |
Season |
TimeScope.DateContext.TimingEvent |
Not in ADAPT Standard |
TimeScope.Location1 and Location2 |
Not in ADAPT Standard |
| Any types not mappable to https://github.com/ADAPT/Standard/blob/main/adapt-data-type-definitions.json | CustomDataTypeDefinition |
| ADAPT Framework | ADAPT Standard |
|---|---|
Company and Person |
Party |
PersonRole |
PartyRole |
Field.GrowerId |
Field.farmId → Farm.growerId The ADAPT Standard does not allow Fields to map to Growers without Farm objects. |
Farm.ContactInfo |
Farm.partyId → Party.contactInfo |
Grower.ContactInfo |
Grower.partyId → Party.contactInfo |
ContactInfo except ContactInfo.Contacts |
ContactInfo.addressContactMethod |
ContactInfo.Contacts |
ContactInfo.telecommunicationContactMethods |
Most of the Device/Equipment model is omitted from the ADAPT Standard. The ADAPT Standard does not model data from the equipment's point-of-view.
| ADAPT Framework | ADAPT Standard |
|---|---|
DeviceModel.ManufacturerId |
DeviceModel.brandId → Brand.manufacturerId |
DeviceModel.SeriesId |
DeviceModel.devicesSeries |
DeviceElement |
Device |
DeviceElement.BrandId, ManufacturerId, SeriesId |
Mapped via Device.deviceModelId |
Connector, HitchPoint, EquipmentConfiguration, DeviceConfiguration and its child types |
Implement geometry information is intentionally omitted in favor of derived coverage polygons. |
DeviceElementUse |
Hierarchial equipment information is necessarily flattened on the Operation to the field's point-of-view. |
| ADAPT Framework | ADAPT Standard |
|---|---|
Shapes types |
WKT for unattributed geometries. GeoParquet for attributed geometries |
FieldBoundary.SpatialData |
FieldBoundary.boundary.geometry |
CropZone.BoundingRegion |
CropZone.boundary.geometry |
DrivenHeadland |
Headland |
ConstantOffsetHeadland |
Omitted. Headlands in ADAPT Standard require Geometries. |
| ADAPT Framework | ADAPT Standard |
|---|---|
Product.Status, Form, Type |
Product.productStatusCode, productFormCode, productTypeCode |
CropNutritionProduct.IsManure |
Product.productTypeCode = FERTILIZER_ORGANIC |
CropProtectionProduct.Biological |
Product.contextItems definitionCode= HasBiological |
CropProtectionProduct.Organophosphate |
Product.contextItems definitionCode= HasOrganophosphate |
CropProtectionProduct.Carbamate |
Product.contextItems definitionCode= HasCarbamate |
CropVarietyProduct |
Product.productTypeCode = SEED or PLANT |
CropVarietyProduct.CropId |
Product.cropId |
CropVarietyProduct.Traits |
Product.traits |
CropVarietyProduct.GeneticallyEnhanced |
Product.contextItems definitionCode= CropVarietyIsGeneticallyEnhanced |
HarvestedCommmodityProduct |
Product.productTypeCode = HARVESTED_PRODUCT |
MixProduct |
Product with non-empty ProductComponents |
ProductComponent.IngredientID |
ProductComponent.productId or ProductComponent.ingredientId |
ProductComponent.Quantity |
ProductComponent.amount |
ProductComponent.IsProduct |
ProductComponent.productId populated |
Ingredient |
ProductComponent.ingredientId |
ActiveIngredient |
IngredientId.isActiveIngredient = true |
InertIngredient |
IngredientId.isActiveIngredient = false |
CropNutritionIngredient.IngredientCode |
IngredientId.ingredientCode |
Trait.CropIds |
Trait is a child of a specific Product.productTypeCode = SEED or PLANT with a required CropId. |
| ADAPT Framework | ADAPT Standard |
|---|---|
Prescription, WorkItem and WorkItemOperation |
WorkOrder.operation |
Prescription.OperationType |
WorkOrder.operation.operationTypeCode |
Prescription.RxProductLookups |
WorkOrder.operation.variables specifying a ProductId |
RasterGridPrescription |
WorkOrder.operation with GeoTIFF .tiff file export |
RasterPrescription.Rates (RxCellLookup) |
Individual GeoTIFF pixels |
VectorPrescription |
WorkOrder.operation with GeoParquet .parquet file export |
VectorPrescription.RxShapeLookups |
Individual GeoParquet features |
ManualPrescription.ProductUses |
WorkOrder.operation.summaryValues |
| ADAPT Framework | ADAPT Standard |
|---|---|
LoggedData |
WorkRecords grouped by field id and like Operations (see next) |
OperationData |
WorkRecord.operations grouped by like types, products and start times occurring within 36 hours |
OperationData.OperationType |
Operation.operationTypeCode |
OperationData.GetSpatialRecords() |
GeoParquet file identified by Operation.spatialRecordsFile |
OperationData.GetDeviceElementUses() and OperationData.maxDepth |
Hierarchial equipment information is necessarily "flattened" into data from the field's point-of-view |
DeviceElementUse.GetWorkingDatas() |
Operation.variables |
WorkingData.Representation.Code |
Variable.definitionCode |
WorkingData.Representation.Code = vrProductIndex |
Variable.productId |
SpatialRecord |
Individual GeoParquet feature |
SpatialRecord.GetMeterValue(WorkingData) |
Individual GeoParquet feature attribute value mapped via Variable.geoParquetColumnName |
Load |
Operation.harvestLoadIdentifier + Operation.summaryValues |
With decade of production usage behind us, we can look at some of the ADAPT Framework model as well-intentioned theory that never saw usage. Some of this model has not yet or will not be added to the ADAPT Standard.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.