PortML.Documents 1.1.48

There is a newer version of this package available.
See the version list below for details.
dotnet add package PortML.Documents --version 1.1.48
NuGet\Install-Package PortML.Documents -Version 1.1.48
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PortML.Documents" Version="1.1.48" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add PortML.Documents --version 1.1.48
#r "nuget: PortML.Documents, 1.1.48"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install PortML.Documents as a Cake Addin
#addin nuget:?package=PortML.Documents&version=1.1.48

// Install PortML.Documents as a Cake Tool
#tool nuget:?package=PortML.Documents&version=1.1.48

Build status NuGet Release

1. About

PortML stands for Port Markup Language. It is a descriptive language or document which describes container port assets, such as yard blocks, quay cranes, wharves, and AGVs, as a markup code for modelling and simulation.

PortML document follows the PortML specification which is defined in the schema file PortML.xsd. The schema defines all of the datatypes and base infrastructure types.

2. How to Use

using (StreamReader file = new StreamReader("<path to PortML document>"))
{
    try
    {
        string portMLDocument = file.ReadToEnd();

        var parser = new PortML.Documents.PortMLParser();
        var portML = parser.Parse(portMLDocument);
        ...
    }
    catch (Exception ex)
    {
        ...
    }
}

3. Terminal

There will be one and only one Terminal module in the same PortML document. It is to specify the boundary of the terminal and to provide static properties which are general to the entire port system.

To retrieve the terminal information from the PortML object, use the following code.

var terminal = portML.GetTerminal();

The code above will return a list of TerminalInfo object which contains the following information.

Property Data Type Description
BoundaryPoints List<Vector2> Boundary points of the terminal border which is a polygon. The area inside of the polygon is the terminal area.
BoAThreshold double Berth on Arrival threshold in second.
AnnualTeuRate int Number of TEUs handled by the sea port annually.
NumberOfAGVs int Total number of AGVs running inside the terminal.
ClusterFactor double [0,1]: 0 - small factor, 1 - big factor (single).
TEUInterTerminalRatio double Ratio of the total TEU which is for inter-terminal transhipment.
ConsignmentStrategy double [0,1]: 0 - 1st carrier, 1 - 2nd carrier, 0.5 - no consignment.
TEUExportRatio double Ratio of the total TEU which is for exporting.
ConcentrationFactor double [0.5,1.0]: 0.5 - dispersed (uniform); 1 - concentrated (single nearest point).
TEUImportRatio double Ratio of the total TEU which is for importing.
NumberOfQuayCranes int Total number of quay cranes available inside the terminal.

4. Wharf

Wharf is the side of the port terminal where vessels will be parked at.

Quay cranes will be located at the land side of the wharf while vessels will be parked at the sea side. As shown in the following diagram, the direction of the wharf, defined by StartingAt and EndingAt, is important. The wharf direction will decide which side of it is land side and which side of it is sea side.

Wharf Diagram

To retrieve the wharf information from the PortML object, use the following code.

var wharfs = portML.GetAllWharfs();

The code above will return a list of WharfInfo object which contains the following information.

Property Data Type Description
ReferenceId string Reference ID of the wharf.
StartingAt Vector2 The coordinate of the starting point of the wharf.
EndingAt Vector2 The coordinate of the ending point of the wharf.
Length double Wharf length in meter.

5. Yard Block

Yard block module is corresponding to the container yard in the sea port terminal.

The starting point and facing direction of a yard block is defined in the way shown in the following diagram. The Facing property defines the direction of the yard block in radian rotating around the StartingAt point. Yard Block Diagram

To retrieve the yard block information from the PortML object, use the following code.

var yardBlocks = portML.GetAllYardBlocks();

The code above will return a list of YardBlockInfo object which contains the following information.

Property Data Type Description
ReferenceId string Reference ID of the yard block.
StartingAt Vector2 The coordinate of the starting point of the yard block.
Facing double The direction of the yard block in radian.
NumberOfRows int Number of rows of the yard block.
NumberOfBays int Number of bays of the yard block.
NumberOfTiers int Number of tiers of the yard block.
BayTypes BayType[] Type (either exchange or transhipment) of each bay.
SlotWidth double Average width of each slot in the yard block. The total width of the yard block is thus SlotWidth * NumberOfRows.
SlotLength double Average length of each slot in the yard block. The total width of the yard block is thus SlotLength * NumberOfBays.

6. Traffic Network

To retrieve the traffic network from the PortML object, use the following code.

var trafficNetwork = portML.GetTrafficNetwork();

6.1 Quay Points

To retrieve the quay point information from the trafficNetwork object, use the following code.

var quayPoints = trafficNetwork.QuayPoints;

The code above will return a list of ControlPointInfo object which contains the following information.

Property Data Type Description
ReferenceId string Reference ID of the control point.
Tag string Tag of the control point. It is made unique in the same traffic network.
PositioningAt Vector2 The coordinate of the control point.
WharfId string Reference ID of the wharf corresponding to the quay point.

6.2 Yard Points

To retrieve the yard point information from the trafficNetwork object, use the following code.

var yardPoints = trafficNetwork.YardPoints;

The code above will return a list of ControlPointInfo object which contains the following information.

Property Data Type Description
ReferenceId string Reference ID of the control point.
Tag string Tag of the control point. It is made unique in the same traffic network.
PositioningAt Vector2 The coordinate of the control point.
YardBlockId string Reference ID of the yard block corresponding to the yard point.
YardCraneId string Reference ID of the yard crane corresponding to the yard point.
NumberOfRelatedGroundSlots int Number of ground slots which are corresponding to the yard point.
IsExchange bool True if the yard point is an Exchange Yard Point. False if it's a Transhipment Yard Point.

6.3 Quay-Point-to-Yard-Point Distance

To retrieve the distance from each quay point in the traffic network to another yard point, use the following code.

var distanceMatrix = trafficNetwork.PointDistancesFromQuayPointToYardPoint;

The code above will return a list of PointToPointDistanceInfo object which contains the following information.

Property Data Type Description
SourceControlPointTag string The unique tag of the quay point.
TargetControlPointTag string The unique tag of the yard point.
Distance double Distance between the two control points in meter.
InBetweenControlPointTags string[] Control point tags on the path between the two control points.

This distance is calculated using Dijkstra's algorithm in the graph of the traffic network.

6.4 Yard-Point-to-Quay-Point Distance

To retrieve the distance from each yard point in the traffic network to another quay point, use the following code.

var distanceMatrix = trafficNetwork.PointDistancesFromYardPointToQuayPoint;

The code above will return a list of PointToPointDistanceInfo object which contains the following information.

Property Data Type Description
SourceControlPointTag string The unique tag of the yard point.
TargetControlPointTag string The unique tag of the quay point.
Distance double Distance between the two control points in meter.
InBetweenControlPointTags string[] Control point tags on the path between the two control points.

This distance is calculated using Dijkstra's algorithm in the graph of the traffic network.

6.5 Yard-Point-to-Yard-Point Distance

To retrieve the distance from each yard point in the traffic network to another yard point, use the following code.

var distanceMatrix = trafficNetwork.PointDistancesFromYardPointToYardPoint;

The code above will return a list of PointToPointDistanceInfo object which contains the following information.

Property Data Type Description
SourceControlPointTag string The unique tag of the yard point.
TargetControlPointTag string The unique tag of the yard point.
Distance double Distance between the two control points in meter.
InBetweenControlPointTags string[] Control point tags on the path between the two control points.

This distance is calculated using Dijkstra's algorithm in the graph of the traffic network.

7. Quay Crane Statistics

To retrieve the operating time statistics of a quay crane, use the following code.

var quayCraneStatistic = portML.GetQuayCraneStatistic();

The code above will return a list of QuayCraneInfo object which contains the following information.

Property Data Type Description
LoadingServiceTime double Time of a quay crane in servicing the loading operation. Unit of time is second.
LoadingRestoreTime double Time of a quay crane in restoring the loading operation. Unit of time is second.
UnloadingServiceTime double Time of a quay crane in servicing the unloading operation. Unit of time is second.
UnloadingRestoreTime double Time of a quay crane in restoring the unloading operation. Unit of time is second.

8. Yard Crane Statistics

To retrieve the operating time statistics of a yard crane, use the following code.

var yardCraneStatistic = portML.GetYardCraneStatistic();

The code above will return a list of YardCraneInfo object which contains the following information.

Property Data Type Description
UnstackingServiceTime double Time of a yard crane in servicing the unstacking operation. Unit of time is second.
UnstackingRestoreTime double Time of a yard crane in restoring the unstacking operation. Unit of time is second.
StackingServiceTime double Time of a yard crane in servicing the stacking operation. Unit of time is second.
StackingRestoreTime double Time of a yard crane in restoring the stacking operation. Unit of time is second.

9. AGV Parking Lot

AGV Parking Lot is where AGVs will be parked at.

To retrieve the AGV parking lot information from the PortML object, use the following code.

var agvParkingLots = portML.GetAllAGVParkingLots();

The code above will return a list of AGVParkingLotInfo object which contains the following information.

Property Data Type Description
ReferenceId string Reference ID of the AGV parking lot.
StartingAt Vector2 The coordinate of the starting point of the AGV parking lot.
Facing double The direction of the AGV parking lot in radian.
NumberOfSlots int Number of slots in the AGV parking lot.
SlotWidth double Average width of each slot in the AGV parking lot. The total width of the parking lot is thus SlotWidth * NumberOfSlots..
SlotLength double Length of each slot in the AGV parking lot.

10. Release Notes

27th Jan 2022

  • Introduced AGVParkingLotInfo.

15th Jan 2022

  • Updated the shortest distance retrieval methods to return the tag of control points on the path.

11th Jan 2022

  • Updated static properties in Yard Block module.

4th Jan 2022

  • Added service time and restore time info of each quay crane and yard crane.

2nd Jan 2022

  • Introduced traffic network and distance matrices.

31st Dec 2021

  • Introduced TerminalInfo.

30th Dec 2021

  • Introduced WharfInfo;
  • Introduced YardBlockInfo.

11. Contributors

Domain Experts

  • Dr Li Haobin;
  • Peng Yuming.

Developers

  • Riza Marhaban;
  • Goh Chun Lin;
  • Tan Sin Cho.

12. Feedback

Bug reports and contributions are welcome at PortML Contact Us Page.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.82 153 4/17/2024
1.1.81 114 3/22/2024
1.1.80 96 3/19/2024
1.1.79 96 2/28/2024
1.1.78 96 2/21/2024
1.1.77 114 2/14/2024
1.1.76 154 8/22/2023
1.1.75 110 8/22/2023
1.1.71 372 11/8/2022
1.1.70 372 10/19/2022
1.1.69 397 10/18/2022
1.1.68 403 10/13/2022
1.1.67 415 7/25/2022
1.1.66 403 7/4/2022
1.1.65 399 6/15/2022
1.1.64 401 6/14/2022
1.1.63 448 6/8/2022
1.1.61 412 6/3/2022
1.1.60 433 5/8/2022
1.1.59 418 4/30/2022
1.1.58 407 4/29/2022
1.1.57 439 4/28/2022
1.1.56 419 4/28/2022
1.1.55 455 4/23/2022
1.1.53 419 3/15/2022
1.1.52 435 2/24/2022
1.1.51 435 2/22/2022
1.1.50 428 2/11/2022
1.1.49 437 2/10/2022
1.1.48 443 1/27/2022
1.1.47 461 1/27/2022
1.1.46 458 1/27/2022
1.1.45 473 1/19/2022
1.1.44 449 1/15/2022
1.1.42 442 1/15/2022
1.1.41 440 1/11/2022
1.1.40 273 1/11/2022
1.1.39 446 1/11/2022
1.1.38 289 1/5/2022
1.1.37 287 1/5/2022
1.1.36 285 1/3/2022
1.1.35 269 1/3/2022
1.1.34 301 1/2/2022
1.1.33 293 1/2/2022
1.1.32 287 1/2/2022
1.1.31 293 1/2/2022
1.1.30 276 1/2/2022
1.1.29 272 1/2/2022
1.1.28 274 12/31/2021
1.1.27 274 12/31/2021
1.1.26 272 12/30/2021
1.1.25 272 12/30/2021
1.1.24 270 12/30/2021
1.1.22 272 12/30/2021
1.0.4 284 12/29/2021
1.0.3 284 12/29/2021

Please refer to README.