Beispiel #1
0
        /// <summary>
        /// Расчет длины маршрута
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCalcRoute_Click(object sender, EventArgs e)
        {
            // Установка координат базы
            Logistics.Properties.Settings set = new Logistics.Properties.Settings();

            double nBaseLat, nBaseLng;

            try
            {
                nBaseLat = Convert.ToDouble(set.MapBaseLatitude);
                nBaseLng = Convert.ToDouble(set.MapBaseLongitude);
            }
            catch (Exception ex)
            {
                RFMMessage.MessageBoxError("Координаты базы указаны неверно!\r\n" + ex.Message);
                return;
            }

            RFMCursorWait.Set(true);

            // Входящие параметры
            Location locOrigin, locDestination;

            locOrigin           = locDestination = new Location();
            locOrigin.Latitude  = locDestination.Latitude = nBaseLat;
            locOrigin.Longitude = locDestination.Longitude = nBaseLng;

            List <int>      listPartners  = new List <int>();
            List <Location> listWayPoints = new List <Location>();

            foreach (DataRow r in tableEfficiency.Rows)
            {
                // Пропуск статусной строки
                string sPartnerID = r["PartnerID"].ToString();
                if (sPartnerID.Length == 0)
                {
                    continue;
                }

                int    nPartnerID = Convert.ToInt32(sPartnerID);
                string sLat = r["Latitude"].ToString(), sLng = r["Longitude"].ToString();
                if (listPartners.IndexOf(nPartnerID) < 0 && sLat.Length > 0 && sLng.Length > 0)
                {
                    listPartners.Add(nPartnerID);

                    Location loc = new Location();
                    loc.Latitude  = Convert.ToDouble(sLat);
                    loc.Longitude = Convert.ToDouble(sLng);
                    listWayPoints.Add(loc);
                }
            }

            // Исходящие параметры
            int             nDistance = 0, nDuration = 0;
            string          sDistance = "", sDuration = "", sErrorText = "";
            List <Location> polyline = new List <Location>();

            // Расчет маршрута
            bool bResult = GoogleService.CalcRoute(locOrigin, locDestination, listWayPoints,
                                                   out nDistance, out sDistance,
                                                   out nDuration, out sDuration,
                                                   out polyline,
                                                   out sErrorText);

            RFMCursorWait.Set(false);
            if (!bResult)
            {
                RFMMessage.MessageBoxError(sErrorText);
                return;
            }

            numDistance.Value = (decimal)nDistance / 1000;
            numTripCost.Value = numDistance.Value * numNormDistance.Value;
        }