The sample code below uses five stops. A formula for converting thousandths of hours to hours and minutes is included below the sample code.
void TestRouteMatrix_UserGuide(PCMServerID server)
{
//The Lat/Longs for the stops used in each comparison
const int NUM_STOPS = 5;
const char* latLongs[] = { "35.173099517822266n,107.89029693603516w",
"35.160099029541016n,103.70149993896484w",
"35.232200622558594n,97.485397338867188w",
"34.064998626708984n,81.024497985839844w",
"43.603099822998047n,96.767799377441406w"};
Trip matTrip = PCMSNewTrip(server);
// Set up the Matrix Routing options
PCMSSetCalcType(matTrip, CALC_PRACTICAL);
PCMSMatrixSetOptions(matTrip);
// Set the number of threads to be used internally
PCMSMatrixSetThreadCount(2);
// Add the stops onto the matrix
for (int i = 0; i < NUM_STOPS; i++)
{
PCMSMatrixAddStop(latLongs[i]);
}
// Error check to see if the stops are loaded to the matrix correctly
long lStopCount = PCMSMatrixGetStopCount();
if (lStopCount <= 0)
{
printf("ERROR: Could not load stops!\n");
}
else
{
// Calculate the routes
PCMSMatrixCalculate(NULL);
// Print the distance results
for (long i = 0; i < lStopCount; i++)
{
for (long j = 0; j < lStopCount; j++)
{
char szBuffer[256]= {0};
PCMSMatrixGetCell(i, j, 0, szBuffer, sizeof(szBuffer));
printf("%s\t", szBuffer);
}
printf("\n");
}
}
//Clear the matrix of all data so that it can be run again
PCMSMatrixClear();
}To convert thousandths of hours to hours and minutes, use the following formula:
Public int ConvertDurationHours(double duration, out long hours, out long minutes)
{
// Duration is stored in thousandths of an hour
bool bLessThan0 = duration < 0;
duration = bLessThan0 ? -duration : duration;
double time = (double)(duration) / 1000;
hours = (int)(time);
minutes = (int)((60.0 * (time - hours)) + 0.5);
if (60 == minutes)
{
hours++;
minutes = 0;
}
hours = bLessThan0 ? -hours : hours;
minutes = bLessThan0 ? -minutes : minutes;
return (0);
}