سرویس بهینه‌سازی سفر چند مقصده

سرویس بهینه‌سازی سفر چند مقصده، ترتیب بهینه سفر از یک مبدا به چند مقصد را تعیین می‌کند. این سرویس با محاسبه مسافت و زمان سفر بین مبدا و مقصدها، ترتیب بهینه سفر برای رسیدن به تمامی مقصدها را فراهم می­‌آورد. کاربر می‌تواند مقصد نهایی سفر را تعیین کند که دو دارای دو امکان مجزای زیر است:

  • حالت اول: مقصد نهایی کاربر تعیین نشود. در این صورت پیدا کردن ترتیب بهینه سفر بر مبنای طول مسافت و زمان بین مقصدها صورت می­‌گیرد.

  • حالت دوم: آخرین مسیر وارد شده به عنوان مقصد نهایی سفر تعیین شود. در این حالت پیدا کردن ترتیب بهینه سفر با در نظر گرفتن آخرین ورودی به عنوان مقصد نهایی انجام می‌گیرد.

سرویس بهینه‌سازی سفر چند مقصده، برای هر نقطه یک مشخصه یکتا (id) در نظر می‌گیرد. اولین ورودی دارای id صفر است و شناسه یکتای بقیه نقاط به‌ترتیب از یک تا آخر شماره‌گزاری می‌شوند. به عنوان مثال اگر سه نقطه وارد شود، id نقاط به ترتیب ۰، ۱ و ۲ است. id صفر برای نقطه اول و یا همان مبدا است. با استفاده از مشخصه یکتای هر نقطه، ترتیب سفر بین نقاط را مشخص می‌کند. به عنوان مثال start_id: ۰ به end_id: ۳، یعنی سفر از اولین نقطه به ورودی به چهارمین نقطه ورودی انجام گیرد.

قابلیت‌های سرویس

بهینه‌سازی سفر چند مقصده با وسیله نقلیه خودرو
بهینه‌سازی سفر چند مقصده با وسیله نقلیه موتورسیکلت
بهینه‌سازی سفر چند مقصده با تعیین شدن آخرین ورودی به عنوان مقصد نهایی کاربر و وسیله نقلیه خودرو
بهینه‌سازی سفر چند مقصده با تعیین شدن آخرین ورودی به عنوان مقصد نهایی کاربر و وسیله نقلیه موتور
تخمین زمان سفر با احتساب ترافیک و یا بدون درنظر گرفتن ترافیک

ساختار کلی سرویس

get
/direction/optimized-route?parameters

پارامترهای ورودی

پارامترهای مورد نیاز

پارامتر توضیحات
waypoints مجموعه نقاط مبدا و مقصد درخواستی را مشخص می‌کند. این نقاط با | از هم جدا می‌شوند. هر نقطه دارای طول و عرض جغرافیایی است و با , از هم تفکیک می‌شوند. ترتیب وارد کردن نقاط مهم است و نقطه اول به عنوان مبدا در نظر گرفته می‌شود.

پارامترهای اختیاری

پارامترهای اختیاری آپشن‌ها و امکانات مختلف سرویس را ارائه می‌دهند. ارسال آن‌ها جهت استفاده از سرویس اجباری نیست.

پارامتر توضیحات مقدار پیش‌فرض
last_destination مقصد نهایی کاربر را مشخص می‌کند. اگر مقدار این پارامتر last باشد، آخرین مقصد وارد شده به عنوان مقصد نهایی کاربر در نظر گرفته می‌شود و اگر مقداری برای این پارامتر وارد نشده باشد و یا مقدار آن none باشد، سرویس بهینه سازی سفر را بر اساس فاصله زمانی و مکانی مسیرها و بدون در نظر گرفتن مقصد نهایی کاربر انجام می‌دهد. پیش‌فرض تعیین نشدن آخرین مقصد وارد شده به عنوان مقصد نهایی کاربر (none) است.
travel_mode نوع وسیله نقلیه را مشخص می‌کند. این سرویس قابلیت انتخاب وسایل نقلیه خودرو و موتورسیکلت را دارد. درصورتیکه مقدار این پارامتر driving یا ۰ باشد و یا مقداری برای آن وارد نشده باشد تخمین زمانی برای ماشین و اگر ۱ یا motorcycling باشد تخمین زمانی برای موتور است. پیش‌فرض وسیله نقلیه خودرو (driving) است.
traffic احتساب و یا عدم احتساب ترافیک در تعیین زمان سفر را تعیین می‌کند. درصورت درخواست کردن محاسبه زمان سفر با در نظر گرفتن ترافیک، مقدار این پارامتر باید true باشد.
در صورت درخواست کردن تعیین زمان سفر بدون در نظر گرفتن ترافیک، مقدار این پارامتر باید به false تغییر یابد. 
پیش‌فرض، عدم درنظرگرفتن ترافیک (false) در محاسیه زمان سفر است.
request_id در صورت ست شدن پارامتر فوق، به صورت یکتا در روز می‌توان برای پیگیری استفاده نمود. به صورت پیش‌فرض، عدم پیگیری در روز است.

نمونه درخواست

درخواست بهینه‌سازی سفر چند مقصده با وسیله نقلیه خودرو

با ارسال مختصات جغرافیایی نقاط، ترتیب بهینه سفر از مبدا به مقصدها با شرط عبور از تمامی مقصدها در پاسخ برگردانده می‌شود.

https://api.parsimap.ir/direction/optimized-route?key=PMI_API_TOKEN&travel_mode=driving&waypoints=51.33673,35.71664|51.33748,35.72074|51.33678,35.73668|51.33669,35.7169&traffic=true

نمونه پاسخ

{
  "legs": [
    {
      "start_id": 0,
      "end_id": 3,
      "distance": {
        "text": "۱۱ متر",
        "value": 11
      },
      "duration": {
        "text": "۱ ثانیه ",
        "value": 1
      },
      "start_location": {
        "lat": 35.71664,
        "lng": 51.33673
      },
      "end_location": {
        "lat": 35.7169,
        "lng": 51.33669
      }
    },
    {
      "start_id": 3,
      "end_id": 1,
      "distance": {
        "text": "۸۳۳ متر",
        "value": 833
      },
      "duration": {
        "text": "۱ دقیقه ۲۰ ثانیه",
        "value": 80
      },
      "start_location": {
        "lat": 35.7169,
        "lng": 51.33669
      },
      "end_location": {
        "lat": 35.72074,
        "lng": 51.33748
      }
    },
    {
      "start_id": 1,
      "end_id": 2,
      "distance": {
        "text": "۲ کیلومتر ۲۷۲ متر",
        "value": 2272
      },
      "duration": {
        "text": "۳ دقیقه ۴۵ ثانیه",
        "value": 225
      },
      "start_location": {
        "lat": 35.72074,
        "lng": 51.33748
      },
      "end_location": {
        "lat": 35.73668,
        "lng": 51.33678
      }
    }
  ],
  "distance": {
    "text": "۳ کیلومتر ۱۱۶ متر",
    "value": 3116
  },
  "duration": {
    "text": "۵ دقیقه ۷ ثانیه",
    "value": 307
  },
  "start_location": {
    "lat": 35.71664,
    "lng": 51.33673
  },
  "end_location": {
    "lat": 35.73668,
    "lng": 51.33678
  },
  "status": "OK"
}

پارامترهای خروجی

پارامتر توضیحات
legs مشخصات سفر بین هر جفت نقطه ورودی و ترتیب سفرها است. legs شامل بخش‌های است که هر بخش خود شامل شناسه یکتای ابتدا و انتهای سفر (start_id و end_id)، مسافت، زمان، مختصات نقطه شروع و پایان سفر برای هرجفت نقطه ورودی است. ترتیب این بخش‌ها مهم است، زیرا ترتیب بهینه عبور از مقصدها را مشخص می‌نماید. مبدا هر بخش (غیر از بخش اول) برابر با مقصد بخش قبل است. مسافت و زمان هر بخش نشان‌دهنده زمان و مسافت سفر بین مقصد بخش قبلی (مبدا این بخش) و نقطه‌ای است که end_id آن در این بخش مشخص شده است.
این سرویس برای هر نقطه یک مشخصه یکتا (id) در نظر می‌گیرد. اولین ورودی دارای id صفر است و شناسه یکتای بقیه نقاط به‌ترتیب از یک تا آخر شماره‌گزاری می‌شوند. به عنوان مثال اگر سه نقطه وارد شود، id نقاط به ترتیب ۰، ۱ و ۲ است. id صفر برای نقطه اول و یا همان مبدا است.
start_id نشان دهنده‌ی id نقطه‌ شروع سفر هر بخش شود و end_id شناسه یکتای پایان سفر هر بخش است. به‌عنوان مثال start_id صفر و end_id دو به معنای شروع سفر از اولین نقطه با id صفر به سومین نقطه با id دو است. 
  • distance : مسافت سفر هر بخش leg است. مسافت فوق شامل مقدار عددی (text) و حرفی (value) فاصله‌ی بین دو نقطه بر حسب متر است.
  • duration : فاصله زمانی سفر هر بخش leg با احتساب ترافیک است. زمان فوق شامل مقدار عددی (text) و حرفی (value) فاصله زمانی بین دو نقطه بر حسب ثانیه است.
  • start_location : مختصات نقطه شروع سفر هر بخش leg است.
  • end_location : مختصات نقطه پایانی سفر هر بخش leg است.
distance این پارامتر مسافت کلی سفر از مبدا به مقصدها است. واحد اندازه‌گیری مسافت متر است. خروجی به دو صورت مقدار عددی (text) و حرفی (value) نشان داده می‌شود.
duration این پارامتر زمان کلی سفر از مبدا به مقصدها نقاط مقصد است. واحد اندازه‌گیری آن ثانیه است. خروجی به دو صورت مقدار عددی (text) و حرفی (value) نشان داده می‌شود.
start_location مختصات جغرافیایی نقطه شروع سفر است. مختصات این نقطه برابر است با مختصات نقطه اولی است که کاربر وارد کرده است.
end_location مختصات نقطه پایانی سفر است. اگر کاربر گزینه last_destination را فعال کند، مختصات این نقطه برابر است با مختصات آخرین نقطه‌ای که کاربر وارد کرده است.
status نتیجه درخواست را نشان می‌دهد. برای مثال نتیجه این درخواست OK است که به معنی موفق بودن درخواست است. نتیجه پاسخ به درخواست ارسالی توسط کاربر در قالب جدول زیر ارائه شده است: جدول

درخواست بهینه‌سازی سفر چند مقصده با وسیله نقلیه موتورسیکلت

با ارسال مختصات جغرافیایی نقاط، ترتیب بهنیه سفر از مبدا به مقصدها با وسیله نقلیه موتورسیکلت و با شرط عبور از تمامی مقصدها در پاسخ برگردانده می‌شود.

https://api.parsimap.ir/direction/optimized-route?key=PMI_API_TOKEN&travel_mode=motorcycling&waypoints=51.33673,35.71664|51.33748,35.72074|51.33678,35.73668|51.33669,35.71698&traffic=true

نمونه پاسخ

{
  "legs": [
    {
      "start_id": 0,
      "end_id": 3,
      "distance": {
        "text": "۱۷۷ متر",
        "value": 177
      },
      "duration": {
        "text": "۲۷ ثانیه ",
        "value": 27
      },
      "start_location": {
        "lat": 35.71664,
        "lng": 51.33673
      },
      "end_location": {
        "lat": 35.71698,
        "lng": 51.33669
      }
    },
    {
      "start_id": 3,
      "end_id": 1,
      "distance": {
        "text": "۷۹۸ متر",
        "value": 798
      },
      "duration": {
        "text": "۱ دقیقه ۲۸ ثانیه",
        "value": 88
      },
      "start_location": {
        "lat": 35.71698,
        "lng": 51.33669
      },
      "end_location": {
        "lat": 35.72074,
        "lng": 51.33748
      }
    },
    {
      "start_id": 1,
      "end_id": 2,
      "distance": {
        "text": "۲ کیلومتر ۲۷۲ متر",
        "value": 2272
      },
      "duration": {
        "text": "۳ دقیقه ۵۵ ثانیه",
        "value": 235
      },
      "start_location": {
        "lat": 35.72074,
        "lng": 51.33748
      },
      "end_location": {
        "lat": 35.73668,
        "lng": 51.33678
      }
    }
  ],
  "distance": {
    "text": "۳ کیلومتر ۲۴۸ متر",
    "value": 3248
  },
  "duration": {
    "text": "۵ دقیقه ۵۲ ثانیه",
    "value": 352
  },
  "start_location": {
    "lat": 35.71664,
    "lng": 51.33673
  },
  "end_location": {
    "lat": 35.73668,
    "lng": 51.33678
  },
  "status": "OK"
}

درخواست بهینه‌سازی سفر چند مقصده با تعیین شدن مقصد نهایی با وسیله نقلیه خودرو

با ارسال مختصات جغرافیایی نقاط و تعیین کردن آخرین ورودی به عنوان مقصد نهایی، ترتیب بهنیه سفر از مبدا به مقصدها با شرط عبور از تمامی مقصدها در پاسخ برگردانده می‌شود.

https://api.parsimap.ir/direction/optimized-route?key=PMI_API_TOKEN&last_destination=last&travel_mode=driving&waypoints=51.33673,35.71664|51.33748,35.72074|51.33669,35.71698|51.33678,35.73668&traffic=true

نمونه پاسخ

  {
  "legs": [
    {
      "start_id": 0,
      "end_id": 2,
      "distance": {
        "text": "۱۷۷ متر",
        "value": 177
      },
      "duration": {
        "text": "۲۶ ثانیه ",
        "value": 26
      },
      "start_location": {
        "lat": 35.71664,
        "lng": 51.33673
      },
      "end_location": {
        "lat": 35.71698,
        "lng": 51.33669
      }
    },
    {
      "start_id": 2,
      "end_id": 1,
      "distance": {
        "text": "۷۹۸ متر",
        "value": 798
      },
      "duration": {
        "text": "۱ دقیقه ۲۰ ثانیه",
        "value": 80
      },
      "start_location": {
        "lat": 35.71698,
        "lng": 51.33669
      },
      "end_location": {
        "lat": 35.72074,
        "lng": 51.33748
      }
    },
    {
      "start_id": 1,
      "end_id": 3,
      "distance": {
        "text": "۲ کیلومتر ۲۷۲ متر",
        "value": 2272
      },
      "duration": {
        "text": "۳ دقیقه ۴۵ ثانیه",
        "value": 225
      },
      "start_location": {
        "lat": 35.72074,
        "lng": 51.33748
      },
      "end_location": {
        "lat": 35.73668,
        "lng": 51.33678
      }
    }
  ],
  "distance": {
    "text": "۳ کیلومتر ۲۴۸ متر",
    "value": 3248
  },
  "duration": {
    "text": "۵ دقیقه ۳۱ ثانیه",
    "value": 331
  },
  "start_location": {
    "lat": 35.71664,
    "lng": 51.33673
  },
  "end_location": {
    "lat": 35.73668,
    "lng": 51.33678
  },
  "status": "OK"
}

درخواست بهینه‌سازی سفر چند مقصده با تعیین شدن مقصد نهایی با وسیله نقلیه موتورسیکلت

با ارسال مختصات جغرافیایی نقاط و تعیین کردن آخرین ورودی به عنوان مقصد نهایی، ترتیب بهنیه سفر از مبدا به مقصدها با وسیله نقلیه موتورسیکلت و با شرط عبور از تمامی مقصدها در پاسخ برگردانده می‌شود.

https://api.parsimap.ir/direction/optimized-route?key=PMI_API_TOKEN&last_destination=last&travel_mode=motorcycling&waypoints=51.33673,35.71664|51.33748,35.72074|51.33669,35.71698|51.33678,35.73668&traffic=true

نمونه پاسخ

{
  "legs": [
    {
      "start_id": 0,
      "end_id": 2,
      "distance": {
        "text": "۱۷۷ متر",
        "value": 177
      },
      "duration": {
        "text": "۲۷ ثانیه ",
        "value": 27
      },
      "start_location": {
        "lat": 35.71664,
        "lng": 51.33673
      },
      "end_location": {
        "lat": 35.71698,
        "lng": 51.33669
      }
    },
    {
      "start_id": 2,
      "end_id": 1,
      "distance": {
        "text": "۷۹۸ متر",
        "value": 798
      },
      "duration": {
        "text": "۱ دقیقه ۲۸ ثانیه",
        "value": 88
      },
      "start_location": {
        "lat": 35.71698,
        "lng": 51.33669
      },
      "end_location": {
        "lat": 35.72074,
        "lng": 51.33748
      }
    },
    {
      "start_id": 1,
      "end_id": 3,
      "distance": {
        "text": "۲ کیلومتر ۲۷۲ متر",
        "value": 2272
      },
      "duration": {
        "text": "۳ دقیقه ۵۵ ثانیه",
        "value": 235
      },
      "start_location": {
        "lat": 35.72074,
        "lng": 51.33748
      },
      "end_location": {
        "lat": 35.73668,
        "lng": 51.33678
      }
    }
  ],
  "distance": {
    "text": "۳ کیلومتر ۲۴۸ متر",
    "value": 3248
  },
  "duration": {
    "text": "۵ دقیقه ۵۲ ثانیه",
    "value": 352
  },
  "start_location": {
    "lat": 35.71664,
    "lng": 51.33673
  },
  "end_location": {
    "lat": 35.73668,
    "lng": 51.33678
  },
  "status": "OK"
}

درخواست تعیین زمان سفر بدون در نظر گرفتن ترافیک

با ارسال مختصات جغرافیایی نقاط و false ارسال کردن پارامتر traffic، فاصله زمانی سفر بین نقاط بدون درنظر گرفتن ترافیک تعیین می‌شود.

https://api.parsimap.ir/direction/optimized-route?key=PMI_API_TOKEN&last_destination=last&travel_mode=driving&waypoints=51.41995,35.70156|51.42884,35.80729|51.42095,35.72123|51.37415,35.77339&traffic=false

نمونه پاسخ

{
  "legs": [
    {
      "start_id": 0,
      "end_id": 2,
      "distance": {
        "text": "۲ کیلومتر ۷۹۱ متر",
        "value": 2791
      },
      "duration": {
        "text": "۵ دقیقه ۳ ثانیه",
        "value": 303
      },
      "start_location": {
        "lat": 35.70156,
        "lng": 51.41995
      },
      "end_location": {
        "lat": 35.72123,
        "lng": 51.42095
      }
    },
    {
      "start_id": 2,
      "end_id": 1,
      "distance": {
        "text": "۱۱ کیلومتر ۴۳۳ متر",
        "value": 11433
      },
      "duration": {
        "text": "۱۲ دقیقه ۳۱ ثانیه",
        "value": 751
      },
      "start_location": {
        "lat": 35.72123,
        "lng": 51.42095
      },
      "end_location": {
        "lat": 35.80729,
        "lng": 51.42884
      }
    },
    {
      "start_id": 1,
      "end_id": 3,
      "distance": {
        "text": "۸ کیلومتر ۶۱۸ متر",
        "value": 8618
      },
      "duration": {
        "text": "۱۰ دقیقه ۴۶ ثانیه",
        "value": 646
      },
      "start_location": {
        "lat": 35.80729,
        "lng": 51.42884
      },
      "end_location": {
        "lat": 35.77339,
        "lng": 51.37415
      }
    }
  ],
  "distance": {
    "text": "۲۲ کیلومتر ۸۴۲ متر",
    "value": 22842
  },
  "duration": {
    "text": "۲۸ دقیقه ۲۱ ثانیه",
    "value": 1701
  },
  "start_location": {
    "lat": 35.70156,
    "lng": 51.41995
  },
  "end_location": {
    "lat": 35.77339,
    "lng": 51.37415
  },
  "status": "OK"
}

بهینه‌سازی سفر چند مقصده با متد POST

پارامترهای سرویس به صورت POST ارسال می‌گردند. برای ارسال درخواست با استفاده از متد POST پارامتر headers باید به صورت زیر تعیین شود.

"Content-Type": "application/x-www-form-urlencoded"

نمونه درخواست Node.js

درخواست بهینه‌سازی سفر چند مقصده با وسیله نقلیه خودرو

var request = require("request");
var options = {
  method: "POST",
  url: "https://api.parsimap.ir/direction/optimized-route?key=PMI_API_TOKEN",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
  },
  form: {
    travel_mode: "driving",
    waypoints:
      "51.39110, 35.70085|51.40513, 35.70114|51.41889, 35.70158|51.39110, 35.70085",
  },
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});

نمونه پاسخ

{
  "legs": [
    {
      "start_id": 0,
      "end_id": 3,
      "distance": {
        "text": "۰ متر",
        "value": 0
      },
      "duration": {
        "text": "",
        "value": 0
      },
      "start_location": {
        "lat": 35.70085,
        "lng": 51.3911
      },
      "end_location": {
        "lat": 35.70085,
        "lng": 51.3911
      }
    },
    {
      "start_id": 3,
      "end_id": 1,
      "distance": {
        "text": "۱ کیلومتر ۲۸۸ متر",
        "value": 1288
      },
      "duration": {
        "text": "۱ دقیقه ۴۲ ثانیه",
        "value": 102
      },
      "start_location": {
        "lat": 35.70085,
        "lng": 51.3911
      },
      "end_location": {
        "lat": 35.70114,
        "lng": 51.40513
      }
    },
    {
      "start_id": 1,
      "end_id": 2,
      "distance": {
        "text": "۱ کیلومتر ۴۲۱ متر",
        "value": 1421
      },
      "duration": {
        "text": "۳ دقیقه ۵۸ ثانیه",
        "value": 238
      },
      "start_location": {
        "lat": 35.70114,
        "lng": 51.40513
      },
      "end_location": {
        "lat": 35.70158,
        "lng": 51.41889
      }
    }
  ],
  "distance": {
    "text": "۲ کیلومتر ۷۰۹ متر",
    "value": 2709
  },
  "duration": {
    "text": "۵ دقیقه ۴۱ ثانیه",
    "value": 341
  },
  "start_location": {
    "lat": 35.70085,
    "lng": 51.3911
  },
  "end_location": {
    "lat": 35.70158,
    "lng": 51.41889
  },
  "status": "OK"
}ocation": {
    "lat": 35.70085,
    "lng": 51.3911
  },
  "status": "OK"
}