/*@!Encoding:1252*/
variables
{
  struct Pos3D
  {
    float latitude;
    float longitude;
    float elevation;
  };
  struct Pos2D
  {
    float latitude;
    float longitude;
  };
}

////////////////////////////////////////////////////////////////////////////////
// Calc Distance
////////////////////////////////////////////////////////////////////////////////

float API_PosCalcDistance (float latPos1, float lonPos1, float latPos2, float lonPos2)
{
  float  diffLon;
  float  diffLat;
  float  lDiffLon;
  float  lDiffLat;

  diffLon = lonPos1-lonPos2;
  if (diffLon < 0)
  {
    diffLon = diffLon * -1;
  }

  diffLat = latPos1-latPos2;
  if (diffLat < 0)
  {
    diffLat = diffLat * -1;
  }

  diffLon  = diffLon*1000*71.5;
  diffLat   = diffLat *1000*111.3;

  lDiffLon = diffLon;
  lDiffLat  = diffLat;

  return sqrt( (lDiffLon*lDiffLon)+(lDiffLat*lDiffLat) );
}

float API_PosCalcDistance(dword packet, struct Pos2D pos2d)
{
  struct Pos2D packet2d;
  
  packet2d.latitude  = C2xGetTokenInt(packet, "BasicSafetyMessage", "value::basicSafetyMessage::coreData::lat" ) / 1e7; if (C2xGetLastError()) return ~0;
  packet2d.longitude = C2xGetTokenInt(packet, "BasicSafetyMessage", "value::basicSafetyMessage::coreData::lon") / 1e7; if (C2xGetLastError()) return ~0;
  
  return API_PosCalcDistance(packet2d.latitude, packet2d.longitude, pos2d.latitude, pos2d.longitude);
}

float API_PosCalcDistance(dword packet, struct Pos3D pos3d)
{
  struct Pos2D packet2d;

  packet2d.latitude  = C2xGetTokenInt(packet, "BasicSafetyMessage", "value::basicSafetyMessage::coreData::lat" ) / 1e7; if (C2xGetLastError()) return ~0;
  packet2d.longitude = C2xGetTokenInt(packet, "BasicSafetyMessage", "value::basicSafetyMessage::coreData::lon") / 1e7; if (C2xGetLastError()) return ~0;

  return API_PosCalcDistance(packet2d.latitude, packet2d.longitude, pos3d.latitude, pos3d.longitude);
}

////////////////////////////////////////////////////////////////////////////////
// EOF
////////////////////////////////////////////////////////////////////////////////
