মানচিত্র রাউটিং, একটি লা Google মানচিত্র?

আমি সবসময় মানচিত্র রাউটিং দ্বারা আতঙ্কিত হয়েছি, কিন্তু আমি এটিতে কোন ভাল পরিচায়ক (বা এমনকি উন্নত!) স্তরের টিউটোরিয়াল খুঁজে পাইনি। কেউ কোন পয়েন্টার আছে, ইঙ্গিত, ইত্যাদি?

Update: I'm primarily looking for pointers as to how a map system is implemented (data structures, algorithms, etc).

0
ro fr hi

9 উত্তর

উন্মুক্ত রাস্তার মানচিত্র প্রকল্প দেখুন একটি নিখুঁত সফটওয়্যারে কিভাবে এই ধরণের জিনিসটি মোকাবেলা করা হচ্ছে তা দেখুন শুধুমাত্র ব্যবহারকারী সরবরাহকৃত এবং লাইসেন্সকৃত ডেটা ব্যবহার করে এবং একটি উইকি ধারণকারী সামগ্রী যা আপনি আকর্ষণীয় হতে পারে

কয়েক বছর আগে বলছি জড়িত যেখানে বেশ সহজ এবং অনেক প্রশ্নের উত্তর আমি ছিল তাই আমি কোন কারণ তারা এখনও একটি চমৎকার গুচ্ছ না হয় দেখুন।

0
যোগ

Instead of learning APIs to each map service provider ( like Gmaps, Ymaps api) Its good to learn Mapstraction

"ম্যাপট্রিকশন একটি লাইব্রেরি যা বিভিন্ন জাভাস্ক্রিপ্ট ম্যাপিং API এর জন্য একটি সাধারণ API উপলব্ধ করে"

আমি আপনাকে URL এ যান এবং একটি সাধারণ API শিখতে সুপারিশ করবে। খুব ভাল পরিমাণে কত টোটো আছে

0
যোগ

ব্যারি ব্রুমিট, গুগল ম্যাপস রুট অনুসন্ধানের প্রকৌশলীদের একজন, আগ্রহের বিষয় হতে পারে এমন একটি পোস্ট লিখেছেন:

The road to better path-finding 11/06/2007 03:47:00 PM

0
যোগ

মানচিত্র রাউটিং দ্বারা, আপনি কি একটি রাস্তার নেটওয়ার্কের পাশ দিয়ে ছোট্ট পথ খুঁজে পাচ্ছেন?

Dijkstra shortest-path algorithm is the best known. Wikipedia has not a bad intro: http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

এখানে একটি জাভা অ্যাপলেট রয়েছে যেখানে আপনি এটিতে কাজ করতে পারেন: http://www.dgp.toronto.edu/people/JamesStewart/270/9798s/Laffra/DijkstraApplet.html এবং Google আপনাকে সোর্স কোডে যেকোনও ভাষাতে নিয়ে যায়।

ড্রাইভিং রুটের উত্পাদনের জন্য কোন বাস্তব বাস্তবায়নে রাস্তার নেটওয়ার্কগুলির বেশ কিছু তথ্য অন্তর্ভুক্ত থাকবে যা ট্র্যাভেরসিং লিঙ্ক এবং নোডগুলির সাথে সংযুক্ত খরচের সাথে সম্পর্কিত। রাস্তার নেটওয়ার্ক অনুক্রম, গড় গতি, বিচ্ছিন্নতা অগ্রাধিকার, ট্রাফিক সংকেত লিংকিং, নিষিদ্ধ করা ইত্যাদি।

0
যোগ
মানচিত্রটি সাধারণত ছোট্ট প্রান্তিক পাথ অ্যালগরিদমগুলির জন্য খুব বড়, আপনি একটি subgraph নির্বাচন করার জন্য কিছু heuristics নির্মাণ করতে হবে। উপরন্তু আপনি একটি রুট খুঁজে সম্পূর্ণরূপে ভিন্ন, আনুভূমিক দৃষ্টিভঙ্গি (যেমন মোটরগাড়ি প্রথম, ..) ব্যবহার করতে পারে।
যোগ লেখক Don Johe, উৎস

আমি রাউটিং একটি ভাল টিউটোরিয়াল এখনও খুঁজে আছে কিন্তু পড়তে কোড প্রচুর আছে:

OpenStreetmap ডেটা ব্যবহার করে GPL রাউটিং অ্যাপ্লিকেশনগুলি রয়েছে, যেমন Gosmore যা উইন্ডোজ (+ মোবাইল) এবং লিনাক্সে কাজ করে। বেশ কয়েকটি আকর্ষণীয় অ্যাপ্লিকেশন একই ডেটা ব্যবহার করে আছে, কিন্তু Gosmore কিছু ভাল ব্যবহার আছে উদাহরণস্বরূপ ওয়েবসাইটের সাথে ইন্টারফেস

রাউটিংয়ের সাথে সবচেয়ে বড় সমস্যাটি খারাপ তথ্য, এবং আপনি যথেষ্ট পরিমাণে ডেটা পান না। তাই আপনি যদি এটি চেষ্টা করতে চান তাহলে আপনার পরীক্ষাটি খুব স্থানীয়ভাবে রাখুন যাতে আপনি ডাটাটি নিয়ন্ত্রণ করতে পারেন।

0
যোগ

একটি * আসলে উত্পাদন ম্যাপিং আলগোরিদিম পর্যন্ত খুব কাছাকাছি। Dijikstra এর মূল অ্যালগরিদমের তুলনায় এটা খুব কম অনুসন্ধানের প্রয়োজন।

0
যোগ
প্রকৃতপক্ষে, সংশোধিত D * সাধারণত যতটা আমি জানি তা ব্যবহৃত হয়।
যোগ লেখক mmcdole, উৎস

দৃশ্যের একটি ধারণাগত বিন্দু থেকে, একটি পুকুরে একটি পাথর ড্রপ কল্পনা এবং তরঙ্গ পর্যবেক্ষণ কল্পনা। রুটগুলি পুকুর এবং পাথরটি আপনার শুরুর অবস্থানের প্রতিনিধিত্ব করবে।

অবশ্যই অ্যালগরিদমটি n ^ 2 এর কিছু অনুপাত সন্ধান করতে হবে যেমন দূরত্ব n বৃদ্ধি। আপনি অবস্থান শুরু করতে এবং যে বিন্দু থেকে সব উপলব্ধ পাথ চেক করবে। তারপর recursively যারা পাথ শেষে পয়েন্ট জন্য কল এবং তাই।

আপনি একটি পথ রুট পুনরায় পরীক্ষা না করে যদি এটি ইতিমধ্যে ঢেকে আছে এবং পাথ যে খুব দীর্ঘ গ্রহণ করা হয় না দ্বারা, একটি পাথ উপর ডবল ব্যাকিং না দ্বারা কর্মক্ষমতা বৃদ্ধি করতে পারেন।

একটি বিকল্প উপায় পিঁপড়ে ফিরোইন পদ্ধতি ব্যবহার করা হয়, যেখানে পিঁপড়া শুরু বিন্দু থেকে এলোমেলোভাবে ক্রল করে এবং একটি সুগন্ধি লেজ ছেড়ে দেয়, যা একটি নির্দিষ্ট পথ অতিক্রম আরো পিঁপড়া আপ আপ বিল্ড। যদি আপনি উভয় প্রারম্ভিক বিন্দু এবং শেষে পয়েন্ট থেকে (যথেষ্ট) পিঁপড়ে পাঠান, তাহলে অবশেষে শক্তিশালী সুগন্ধি দিয়ে পথটি সবচেয়ে কম হবে। এটি কারণ একটি নির্দিষ্ট সময়ের মধ্যে সর্বাধিক পথ আরো বার পরিদর্শন করা হবে, পিঁপড়া একটি অভিন্ন গতিতে হাঁটা দেওয়া যে দেওয়া।

@ স্পিকার সম্পাদনা করুন

কীভাবে পুকুর অ্যালগরিদম বাস্তবায়ন করা যায় তা আরও ব্যাখ্যা - প্রয়োজনীয় তথ্য কাঠামো হাইলাইট করা হয়েছে:

আপনি একটি নেটওয়ার্ক হিসাবে মানচিত্র সঞ্চয় করতে হবে। এটি কেবল নোডগুলি এবং প্রান্তগুলি এর মধ্যে একটি সেট। নোডের একটি সেট একটি রুট গঠন করে । একটি প্রান্ত দুটি নোড (সম্ভবত উভয় একই নোড) যোগদান করে, এবং একটি সংশ্লিষ্ট <�কোড> খরচ </কোড> যেমন দূরত্ব বা সময় প্রান্ত অতিক্রম করার জন্য। একটি প্রান্ত হয় উভয় উভয় দ্বিধনশীল বা uni- নির্দেশমূলক হতে পারে। সম্ভাব্য সহজে ইউনিলি-ডাইরেক্টলি এবং নক্সের মধ্যে দুটি পথ ভ্রমণের জন্য দ্বিগুণ করুন (যেমন A থেকে B এবং A থেকে B এর জন্য পৃথক এক)।

উদাহরণস্বরূপ উদাহরণস্বরূপ তিনটি রেলওয়ে স্টেশনগুলি অনুমান করে একটি সমবয়সী ত্রিভুজের দিকে নির্দেশ করে। তাদের মধ্যে প্রতিটি অর্ধেক আরও তিনটি স্টেশন রয়েছে। প্রান্তগুলি সকল সন্নিহিত স্টেশনগুলির একসঙ্গে যোগ করে, চূড়ান্ত চিত্রটিতে একটি ত্রিভুজটি বড় ত্রিভুজের ভিতরে বসানো হবে।

লেবেল নোড নীচে বাম থেকে শুরু, বাম থেকে ডানে এবং উপরে, যেমন A, B, C, D, E, F (উপরে F)।

অনুমান করুন প্রান্তগুলি উভয় দিকের দিকে ছড়িয়ে যেতে পারে। প্রতিটি প্রান্তে 1 কিমি খরচ আছে

ঠিক আছে, তাই আমরা নীচের বাম থেকে A থেকে শীর্ষস্থানীয় স্টেশন এফ পর্যন্ত রুট করতে চাই। অনেকগুলি সম্ভাব্য রুট রয়েছে, যাদের মধ্যে আবার তাদের ব্যাক আপ রয়েছে, যেমন- ABCEBDEF।

আমরা একটি রুটিন বলছি, NextNode , এটি একটি নোড এবং একটি খরচ গ্রহণ করে এবং প্রতিটি নোডের জন্য নিজেকে কল করতে পারে যা এটি করতে পারে।

স্পষ্টতই আমরা এই রুটিন চালানো যাক যদি এটি সম্ভাব্য দৈর্ঘ্য অসীম (যেমন আব্বাসবব ইত্যাদি) সহ সব রুট, অবশেষে আবিষ্কার করবে। আমরা মূল্য </কোড> এর বিরুদ্ধে পরীক্ষা করে এই ঘটনার প্রতিরোধ করি। যখনই আমরা একটি নোড পরিদর্শন করি যা আগে পরিদর্শন করা হয় নি, আমরা উভয় খরচ এবং নোড আমরা যে নোডের বিরুদ্ধে থেকে এসেছিলেন উভয়। যদি আমরা বিদ্যমান খরচ বিরুদ্ধে চেক আগে একটি নোড পরিদর্শন করা হয় এবং আমরা সস্তা তারপর আমরা নোড আপডেট এবং (recursing) বহন করা। যদি আমরা আরো ব্যয়বহুল, তাহলে আমরা নোডটি বাদ দিই। যদি সব নোডগুলি ছেড়ে দেওয়া হয় তবে আমরা রুটিন ছাড়ি।

আমরা আমাদের লক্ষ্য নোড আঘাত হলে আমরা রুটিন খুব প্রস্থান আউট।

এই উপায় সব টেকসই রুট চেক করা হয়, কিন্তু গুরুতরভাবে শুধুমাত্র সর্বনিম্ন খরচ সঙ্গে যারা। প্রসেসের শেষে প্রতিটি নোডের এই নোডের জন্য সর্বনিম্ন খরচ থাকবে যা আমাদের লক্ষ্য নোড সহ।

আমরা আমাদের লক্ষ্য নোড থেকে পিছন দিকে কাজ রুট পেতে যেহেতু আমরা নোডটি সঞ্চিত করেছি তাই আমরা খরচ সহ বরাবরই এসেছি, আমরা কেবল পিছন দিকে রাস্তা নির্মাণের পিছনে হেটেছি। আমাদের উদাহরণের জন্য আমরা কিছু মত শেষ হবে:

Node A - (Total) Cost 0 - From Node None
Node B - Cost 1 - From Node A
Node C - Cost 2 - From Node B
Node D - Cost 1 - From Node A
Node E - Cost 2 - From Node D / Cost 2 - From Node B (this is an exception as there is equal cost)
Node F - Cost 2 - From Node D

তাই ছোট্ট রুট হল এডিএফ।

0
যোগ
@ জনাথন, দয়া করে আপনি পুকুর অ্যালগরিদমের পাথরের বিস্তারিত বর্ণনা দিতে পারেন এবং কিভাবে এটি একটি ম্যাপে আবেদন করতে পারেন। আমি বলছি যে আমি একটি বিন্দুতে আছি এবং আমি পরবর্তী বহির্মুখী প্রবাহে যাওয়ার আগে চূড়ান্ত অনুসন্ধান করতে চাই। এবং ড্যুড আমি জানি এবং 2 বছর কথোপকথন দেরী
যোগ লেখক Spikie, উৎস

প্রতিটি ট্র্যাভরসালের খরচ সম্পর্কে আমার কাছে আরেকটি ধারণা আসে, তবে গণনা করার জন্য প্রয়োজনীয় সময় ও প্রক্রিয়াকরণ শক্তি বৃদ্ধি পাবে।

Example: There are 3 ways I can take (where I live) to go from point A to B, according to the GoogleMaps. Garmin units offer each of these 3 paths in the Quickest route calculation. After traversing each of these routes many times and averaging (obviously there will be errors depending on the time of day, amount of caffeine etc.), I feel the algorithms could take into account the number of bends in the road for high level of accuracy, e.g. straight road of 1 mile will be quicker than a 1 mile road with sharp bends in it. Not a practical suggestion but certainly one I use to improve the result set of my daily commute.

0
যোগ

এই ক্ষেত্রে কাজ করার আমার অভিজ্ঞতা থেকে, এ * খুব ভাল কাজ করে। এটি (উপরে উল্লিখিত) Dijkstra এর অ্যালগরিদম তুলনায় দ্রুততর, কিন্তু বাস্তবায়ন এবং বুঝতে একটি সাধারণভাবে সক্ষম প্রোগ্রামার জন্য এখনও যথেষ্ট সহজ।

রুট নেটওয়ার্কটি তৈরি করা কঠিন অংশ, কিন্তু এটি সহজ ধাপগুলির একটি সিরিজ ভেঙ্গে যেতে পারে: সমস্ত রাস্তা পান; ক্রম বিন্দু সাজান; বিভিন্ন সড়কে ছেদচিহ্নগুলি (নোড) এ একই ধরণের গোষ্ঠী তৈরি করা; উভয় দিকের দিক দিয়ে নোডগুলি সংযোগ করতে অ্যাক্সেস যোগ করুন (বা শুধুমাত্র এক-রাস্তা রাস্তার জন্য এক দিক থেকে)

A * অ্যালগরিদম নিজেই উইকিপিডিয়াতে ভালভাবে দস্তাবেজ । অপ্টিমাইজেশনের মূল স্থান হল খোলা তালিকা থেকে সেরা নোডের নির্বাচন, যার জন্য আপনাকে একটি উচ্চ-কার্য সম্পাদন অগ্রাধিকার লাইন প্রয়োজন। আপনি যদি C ++ ব্যবহার করেন তবে আপনি STL অগ্রাধিকার_কুয়েউ অ্যাডাপটার ব্যবহার করতে পারেন।

গতির গতি, দূরত্ব বা অন্যান্য মানদণ্ডের নেটওয়ার্কের বিভিন্ন অংশের (যেমন, পথচারী, গাড়ী, পাবলিক ট্রান্সপোর্ট ইত্যাদি) রুট করার জন্য অ্যালগরিদম কাস্টমাইজ করা খুবই সহজ। আপনি নেটওয়ার্ক তৈরির সময় কোন রুট বিভাগগুলি উপলব্ধ আছে তা নিয়ন্ত্রণ করতে ফিল্টারগুলি লিখে এবং প্রতিটি ওপরে যে ওজনকে বরাদ্দ করা হয়

0
যোগ