রুটে অফসেটগুলি কীভাবে যুক্ত করবেন?


13

সম্পাদিত:

নমুনা

আমি আমার প্রশ্নটি ইলাস্ট্রেট করতে চাই মনে করুন আপনি "পয়েন্ট এ" তে আছেন এবং "পয়েন্ট বি" তে যেতে চান। এই পয়েন্টগুলি "at_2po_4pgr" তে থাকবে না সারণী কারণ উত্স / লক্ষ্য নোড নয় are তারপরে, আমি পয়েন্ট এ এবং বি (সবুজ পয়েন্ট) জন্য নিকটতম নোডের জন্য অনুসন্ধান করব। এর পরে, আমি গ্রিন পয়েন্ট আইডি ব্যবহার করে একটি সংক্ষিপ্ত_পথ কল করতে পারি এবং আমি "কমলা" পথ পাব। তবে আসল পাথ ব্যয় (দূরত্ব) পেতে প্রথমে আমাকে "অফসেটএ" বিয়োগ করতে হবে এবং দ্বিতীয় ক্ষেত্রে ডি "অফসেট বি" যুক্ত করতে হবে। লাল-পয়েন্ট এবং সবুজ-পয়েন্টের মধ্যে দূরত্ব গণনা করতে, আমি নিম্নলিখিত কোয়েরিটি চালাচ্ছি:

SELECT * FROM st_distance( ST_GeomFromText('POINT(-3.6963314 42.3498066)',4326), ST_GeomFromText('POINT(-3.6954276 42.3479634)',4326))

অফসেট যুক্ত বা বিয়োগ করার সময় আমি কীভাবে জানতে পারি?

আমার ইংরেজীর জন্য দুঃখিত!


1
Gis.stackexchange স্বাগতম। এটি এমন একটি প্রশ্নোত্তর সাইট যেখানে প্রতিটি থ্রেডে ঠিক একটি প্রশ্ন এবং এর উত্তর থাকতে হবে। প্রশ্ন # 3 জন্য একটি পৃথক থ্রেড খুলুন। # 2 এর উত্তর দেওয়া হয়েছে gis.stackexchange.com/questions/33471/…
আন্ডার ডার্ক

1
আমি একই সমস্যা আছে। আপনি কি কোন সমাধান খুঁজে পেয়েছেন? প্রচুর ধন্যবাদ
রবার্ট

1
উত্তর বিভাগে আপনার সমাধান পোস্ট করুন। তারপরে এটি upvated করা যেতে পারে।
আন্ডার ডার্ক

উত্তর:


2

আমি মনে করি না যে আপনি নিকটতম প্রান্তে নির্ভর করতে পারেন। কল্পনা করুন উত্স এবং লক্ষ্য একই প্রান্তের নিকটে একই প্রান্তে অবস্থিত।

আপনি বরং তিনটি বিবেচনা করতে চাই! বিভিন্ন ক্ষেত্রে:

  1. একটি শীর্ষবিন্দু হল নিকটতম বিন্দু।
  2. প্রান্তের একটি ফর্ম নোডটি সঠিক
  3. প্রান্তরেখা নিজেই কাছাকাছি। (লম্ব)

দুঃখিত তবে এটি সঠিক উত্তর নয়। pgr_trsp - টার্ন সীমাবদ্ধতম শর্টেস্ট পাথ (টিআরএসপি) @amball উত্তরের শো হিসাবে অফসেট পেয়েছে।
হুয়ান কার্লোস ওরোপেজা

7

আপনি এখানে এখানে একটি ফাংশনটি খুঁজে পেতে পারেন: https://github.com/pgRouting/pgrouting-contrib/blob/master/wrapper/routing_core_smar.sql#L69

এটি নেটওয়ার্কের নিকটতম লিঙ্কটি অনুসন্ধান করে, যা সাধারণত আরও ভাল ফলাফল দেয়। আপনি যদি শ্যুটিং স্টার ব্যবহার করেন তবে আপনি এই লিঙ্কটি থেকে / এ যাত্রা শুরু করতে পারেন। A * বা Djkstra এর জন্য আপনি হয় লিঙ্কটির শুরু বা শেষ পয়েন্ট নির্বাচন করুন, বা আপনি লিঙ্কটি দুটিকে বিভক্ত করে একটি "ভার্চুয়াল" নোড তৈরি করেন।


1

আমি যে সমাধানটি পেয়েছি তার সমাধানটি ব্যাখ্যা করতে যাচ্ছি (সম্ভবত সেরা না।

পোস্টের চিত্র অনুসারে, ধরা যাক আমরা পয়েন্ট এ তে আছি এবং আমরা পয়েন্ট বিতে যাব । আমি যেমন এই পয়েন্টগুলি উপরে বর্ণিত নই (osm2po সরঞ্জাম দিয়ে উত্পন্ন টেবিলের উত্স / লক্ষ্যগুলি)।

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

সংক্ষিপ্ততম পথটি পেতে আমি নীচের ক্যোয়ারীটি চালাচ্ছি (আপনার এখানে পিজরাউটিং এক্সটেনশনটি ব্যাখ্যা করা দরকার pgRouting - ইনস্টলেশন এবং প্রয়োজনীয়তা এখানে ইনস্টলেশন এবং প্রয়োজনীয়তা ):

SELECT gid, cost, st_astext(the_geom) as the_geom FROM dijkstra_sp_delta('xx_2po_4pgr', source_vertex, target_vertex, 0.1);

এটি সম্পূর্ণ রুটের প্রতিনিধিত্ব করে এমন ধারগুলির সেটগুলিতে ফল দেয়। উদাহরণস্বরূপ, এই প্রশ্নের জন্য একটি সম্ভাব্য আউটপুট হতে পারে:

সম্ভাব্য আউটপুট

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

আমরা যদি অফসেটটি পরীক্ষা করে দেখি তবে অবশ্যই আমাদের উপরের ক্যোয়ারীতে প্রাপ্ত প্রান্তগুলির সেটটির প্রথম প্রান্তটি পয়েন্ট এ- এর নিকটতম পথের সমান কিনা তা পরীক্ষা করে দেখতে হবে । যদি সেগুলি মেলে, তবে আমরা অফসেটটি বিয়োগ করব। যদি তারা ম্যাচ না করে তবে আমরা অফসেটটি যুক্ত করব। বিন্দুটির নিকটতম লিঙ্কটি পেতে, আমি নিম্নলিখিত কোয়েরিটি চালাচ্ছি:

SELECT * FROM find_node_by_nearest_link_within_distance(point, 0.1, 'xx_2po_4pgr') as id;

আপনাকে অবশ্যই এই ফাংশনটি মানিয়ে নিতে হবে যাতে এটি নিকটতম প্রান্তটি ফিরিয়ে দেয়। প্রথমে আপনাকে অবশ্যই লিঙ্ক_পয়েন্ট প্রকারটি সংশোধন করতে হবে ( নিকটস্থ_লিংক ক্ষেত্র যুক্ত করুন):

CREATE TYPE link_point AS
   (id integer,
    name character varying,
    nearest_link integer);
ALTER TYPE link_point
  OWNER TO postgres;

আপনাকে অবশ্যই অনুসন্ধান_নোড_ই_নেস্ট_লিংক_ওইথিন_ দূরত্বটি পরিবর্তন করতে হবে । কেবল শেষ লাইনটি জুড়ুন (আমি কেবল ফাংশন থেকে একটি এক্সট্র্যাক্ট দেখাই):

-- Searching for a nearest link

    FOR row in EXECUTE 'select id from find_nearest_link_within_distance('''||point||''', '||distance||', '''||tbl||''') as id'
    LOOP
    END LOOP;
    IF row.id is null THEN
        res.id = -1;
        RETURN res;
    END IF;
    link:=row.id;
    res.nearest_link:=link;

তারপরে আপনাকে জানতে হবে যে বিন্দু ( পয়েন্ট এ / পয়েন্ট বি ) এবং নিকটতম প্রান্ত (অফসেট) এর মধ্যে দূরত্ব কী। এই উদ্দেশ্যে আমি এই প্রশ্নটি চালাচ্ছি:

SELECT ST_Line_Locate_Point(geom , point)as offset; 

যেখানে জিওম হল osm2po উত্পন্ন সারণীতে the_geom ক্ষেত্র।

এই মুহুর্তে, আমাদের যুক্ত বা বিয়োগ করার অফসেটটি থাকবে।

পরিশেষে, আপনি প্রান্ত legth উপরে ক্যোয়ারীতে প্রাপ্ত মান প্রয়োগ এবং বাস্তব সমন্বয় (যদি আপনি জ্যামিতি ধরনের সঙ্গে কাজ করে, আপনি মিটার মান প্রাপ্ত করার স্বাভাবিক করতে হবে জানি করার প্রয়োজন হবে। শুধু সংখ্যাবৃদ্ধি 111000 দ্বারা দৈর্ঘ্য প্রাপ্ত ক্যোয়ারী):

select st_length(the_geom) from (select ST_ASTEXT(the_geom) as the_geom FROM dr_2po_4pgr WHERE id= edge_identifier)t";

আমরা যদি শেষটি অফসেটটি যাচাই করে দেখি, তবে আমাদের দেখতে হবে যে উপরের ক্যোয়ারীতে প্রাপ্ত পাথের সেটের শেষ পাথটি শেষ পয়েন্ট ( পয়েন্ট বি ) এর নিকটতম পাথের সমান কিনা এবং আমরা এখানে সংযোজন / সংযোজন করব আগের মতোই

আমার ইংরাজিকে ক্ষমা করুন


1

পিগ্রাউটিংয়ে, পিজিআর_টরস্প - টার্ন সীমাবদ্ধতার সবচেয়ে ছোট পথ (টিআরএসপি) ঠিক আপনি যা খুঁজছেন তা করে।

উত্স এবং লক্ষ্য নোড নির্দিষ্ট করার পরিবর্তে, আপনি উত্স এবং লক্ষ্য প্রান্ত এবং আপনার উত্স এবং গন্তব্য যেখানে অবস্থিত যেখানে প্রান্তে ভগ্নাংশ নির্দিষ্ট করতে পারেন।

(আপনি নিকটতম প্রান্তটি ধরে রেখেছেন বলে ধরে নিলেন, আপনার বিন্দু জ্যামিতি থেকে সেই ভগ্নাংশটি পেতে আপনি ST_Line_Locon_PPoint ব্যবহার করতে পারেন))

Http://docs.pgrouting.org/2.0/en/src/trsp/doc/index.html#trsp দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.