车队路线行程计算算法

时间:2014-07-16 13:50:29

标签: c# algorithm tracking

我正在尝试提出一种计算总行程的算法,但是我为一家运输公司工作的车辆,他们在全国范围内分布了5个仓库,目前正在开发报告模块,计算车辆的总行程。 这就构成了一次完整的旅程

  1. 1个仓库A到装货点卸货回到仓库A(那是一个 旅行)
  2. 2仓库A到装卸点到卸载装载点到
    卸载回到仓库A(一次行程中的#2)
  3. 3仓库A到装货点卸货回到仓库B(那是' s 一趟)
  4. 4仓库A到装货点卸货回到仓库B装货 指向卸载到仓库C(即#2行程)
  5. 车辆的运动存储在数据库中,该数据库存储有其所需的纬度和纬度,这里是我提出的算法

    软件仓库的经度和纬度存储在数据库中。 下面是我试图解决它的代码,下面的代码是用C#实现的

      Telerik.Windows.Controls.Map.Location currentLocation;
                   Telerik.Windows.Controls.Map.Location previousLocation = new Telerik.Windows.Controls.Map.Location() ;
                   long loopCounter = 0;
                   decimal distance = 0;
                   int tripcounter = 0;
                   bool isInTrip = false;
                         while (dr.Read())
                   {
                       // get current location
                       currentLocation = new Telerik.Windows.Controls.Map.Location()
                       {
                           Latitude = Convert.ToDouble(dr[0]),
                           Longitude = Convert.ToDouble(dr[1])
                       };
                       //asign the current position to previous postion on first iteration
                       if (loopCounter == 0)
                       {
                           previousLocation = currentLocation;
                           loopCounter++;
                           continue;
                       }
                       //check whether the current and previous position fall within any of the starting/loading zones
                       Tuple<bool, bool> posVals = VehicleIsInStartingPoint(currentLocation, previousLocation);
                       //check if the previous postion was starting zone
                       if (posVals.Item2)
                       {
                           //check if the current postion is not a starting zone then this qualifies as trip
                           if (!posVals.Item1)
                           {
                               isInTrip = true;
                           }
                       } 
                       if (isInTrip)
                       {
                           tripcounter++;
                       }
                       isInTrip = false;
                       previousLocation = currentLocation;
                   }
                   tripcounter = tripcounter / 2;
                   return tripcounter;
    

    上面的代码在循环内执行它获取当前记录的位置,该位置从数据库创建一个loaction对象,检查它是否第一次进入循环。然后将位置对象存储到2个参考对象,一个是当前位置(表示当前的迭代记录),另一个是previousLocation(表示前一个记录迭代)。 VehicleIsInStartingPoint  方法接受两个参数,它们都是类型loaction,第一个表示当前位置,第二个表示先前位置,方法循环通过库的gps坐标,并检查它是否落在gps坐标的半径范围内仓库。如果落在半径范围内,它对于元组的item1(表示当前位置的item1)记录为true,则同样适用于之前的位置 布尔变量isInTrip用于确定是否应增加行程计数器。 为此,它首先检查先前的位置是否在仓库的半径范围内,如果测试通过它检查当前位置是否不在仓库的范围内,如果是这样,它将变量isInTrip设置为true,那么我们检查变量isInTrip是否为true,以便我们可以增加tripcounter变量。 然后,在循环结束时,我将tripcounter变量除以2,因为行程从仓库到装载和卸载区域并返回到仓库,但是当在工作环境中测试模块时,我的模块与实际数字相比增加了一个行程。 / p>

    可以帮助我改进算法或在我的代码中使它更准确吗

    提前致谢

0 个答案:

没有答案