ওভারল্যাপিং বিভাগগুলি সহ একটি লাইনস্ট্রিং থেকে কীভাবে সাবলাইনস্ট্রিং নিষ্কাশন করা যায়


15

সমস্যার বিবৃতি: একটি বাস রুট দেওয়া হয়েছে (একটি লাস্টারিং ln.the_geom হিসাবে সংজ্ঞায়িত), এবং বাস স্টপের লোকেশনগুলির একটি সেট (pt1.the_geom, pt2.the_geom, ... ptn.the_geom), বাস রুটকে বাস স্টপের মাঝে বিভাগগুলিতে ভাগ করুন । আমি দুটি পোস্টগিস ফাংশন ব্যবহার করছি

    ST_line_substring(ln.the_geom,ST_line_locate_point
    ln.the_geom,pt1.the_geom),ST_line_locate_point(ln.the_geom,pt2.the_geom))

উপরের অংশটি ভালভাবে কাজ করে যদি বাস রুটে কোনও ওভারল্যাপিং বিভাগ না থাকে। যাইহোক, যদি ওভারল্যাপিং বিভাগগুলি থাকে তবে ST_line_locon_Point লাইনস্ট্রিংয়ের অন্য প্রান্তে একটি বিন্দু স্ন্যাপ করবে। উদাহরণ হিসাবে: বাস এ থেকে বিতে ভ্রমণ করে, একটি লুপ তৈরি করবে, তারপরে বি থেকে ক এ ভ্রমণ করবে "এ থেকে বি" এবং "বি থেকে এ" সমস্ত পয়েন্টকে ওভারল্যাপ করে সমান্তরাল রুট। P1 এবং P2 বাস থামার ক্ষেত্রে P2 কে পরিবর্তে (বিপরীত দিকে) পয়েন্ট P2 'তে ম্যাপ করা হবে। এই ক্ষেত্রে বিভাগটি ভুলভাবে উত্তোলন করা হয়েছে (যেখানে অতিরিক্ত বিভাগগুলি অন্তর্ভুক্ত করা হয়েছে)।

এই জাতীয় সমস্যাগুলি কীভাবে সমাধান করবেন? ওভারল্যাপিং বাসের রুটগুলি রুটের যে কোনও বিভাগে ঘটতে পারে ... EXAMPLE টি


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

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

1
আপনি কি দয়া করে প্রদত্ত বাসের রুটের জ্যামিতি WKT সরবরাহ করবেন?
kttii

উত্তর:


1

ধরে নিই যে বাস রুটটি কোনও নির্দিষ্ট পয়েন্টে 2 বারের বেশি নিজেকে ওভারল্যাপ করে না, তবে দ্বিতীয় লাইনের অবস্থান পয়েন্টের জন্য লাইনটি উল্টো করে লাইনের শেষের নিকটতম নিকটতম স্থানটি চিহ্নিত করে এটি সমাধান করা যেতে পারে। ST_LineSubstring কোয়েরিতে আপনাকে 1 থেকে এটি বিয়োগ করতে হবে। যেমন

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