দুই বা ততোধিক ট্র্যাজিকোলজির মধ্যে মিল


11

আমার কাছে ট্রাকগুলির ডেটা রয়েছে ( http://www.chorochronos.org/ )।

এই তথ্যটি অ্যাথেন্সের একাধিক ট্রাকের জিপিএস স্থানাংক।

ট্র্যাজেটরিগুলির মধ্যে সাদৃশ্যটি গণনা করতে হবে, যা খুব মিলের সাথে মুছে ফেলার জন্য!

সমস্যা:

লাল এবং সবুজ একই রকম, তবে নীল, কালো এবং (লাল বা সবুজ) বিভিন্ন ট্র্যাজেক্টরি। আমি লাল বা সবুজ একটির মতো মুছতে চাই।

ডেটা বিন্দুতে রয়েছে (জ্যামিতি, ল্যাট এবং লম্বা, এক্স এবং ওয়াই) (জিপিএস স্থানাঙ্কী), চিত্রটি ট্র্যাজেক্টরিজের উদাহরণ


1
লাল এবং সবুজ একই রকম হয় এবং সবুজ এবং কালো একই, তবে লাল এবং কালো এক নয় তবে কী ঘটে? এছাড়াও, আপনি "অনুরূপ" কীভাবে সংজ্ঞায়িত করেন - এটি কি অন্য লাইনের দূরত্বে বা অন্য কোনও মেট্রিকের মধ্যে পড়ার রেখার অনুপাত?
phloem

আমি কেবল ট্র্যাজেক্টোরিগুলির সাথেই থাকতে চাই যা অন্যদের থেকে আলাদা। ট্র্যাজেটরিগুলি হ'ল জিপিএস স্থানাংক, লাইন নয় ...
ব্যবহারকার 2883056

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

2
আমি @ ফ্লোয়েমের সাথে একমত - মূল প্রশ্নটি "আপনি কীভাবে অনুরূপ সংজ্ঞা দেবেন"? সমস্ত রুট এবি থেকে যায়, সুতরাং সে দিক থেকে এটি 'অনুরূপ'। আপনি কীভাবে একটি সফল ফলাফলকে মূল্যায়ন করবেন সে সম্পর্কে আপনাকে আরও তথ্য সরবরাহ করতে হবে
স্টিফেন লিড

উত্তর:


10

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

হাউসডর্ফ দূরত্ব

এবং উত্থাপিত ক্রমে 6 টি সংমিশ্রণকে সাজানোর জন্য ক্যোয়ারী:

WITH data AS (
  SELECT 'blue' AS name, 'LINESTRING (60 200, 110 290, 200 320, 330 320, 430 240, 450 200)'::geometry AS geom
  UNION SELECT 'black', 'LINESTRING (60 200, 120 270, 235 297, 295 207, 450 200)'::geometry
  UNION SELECT 'green', 'LINESTRING (60 200, 280 190, 450 200)'::geometry
  UNION SELECT 'red', 'LINESTRING (60 200, 150 210, 257 195, 360 210, 430 190, 450 200)'::geometry)
SELECT a.name || ' <-> ' || b.name AS compare, ST_HausdorffDistance(a.geom, b.geom)
FROM data a, data b WHERE a.name < b.name
ORDER BY ST_HausdorffDistance(a.geom, b.geom) DESC;

     compare     | st_hausdorffdistance
-----------------+----------------------
 blue <-> green  |                  130
 blue <-> red    |                  125
 black <-> blue  |     110.102502131467
 black <-> green |     104.846289061163
 black <-> red   |     97.9580173908678
 green <-> red   |     15.2677257073823
(6 rows)

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


চমৎকার উত্তর. আমি সম্ভবত ST_Interplate পয়েন্টের মতো কিছু ব্যবহার করতাম এবং তারপরে নিষ্কলুষ দৃষ্টিভঙ্গি হিসাবে সম্পর্কিত প্রতিটি পয়েন্টের গড় দূরত্ব গণনা করি। আরও ভাল পদ্ধতি দ্বারা আপনার মনে কি ছিল?
জন পাওয়েল

1
@ জনবারিয়া আরও ভাল পদ্ধতি হ'ল প্রতিটি লাইনের কভারেজের স্থানিক পরিসংখ্যান তুলনা করা। একটি পদ্ধতি প্রতিটি লাইনে raterise করবে, রাস্টার দিয়ে একটি গাউসিয়ান অস্পষ্টতা তৈরি করবে, তারপরে প্রতিটি সংমিশ্রণ থেকে কাকতালীয় রাস্টার মানগুলির সম্পর্ককে নির্ধারণ করবে। ST_Segmentize এবং ST_Interplate সরঞ্জামের উপর ভিত্তি করে একটি পদ্ধতিও কাজ করবে।
মাইক টি

4

আমার পোস্টগ্রিস / পোস্টজিআইএসে অ্যাক্সেস নেই তবে আমি এখানে অর্কজিআইএসে (বা অন্য) কীভাবে যাব তা এখানে।

  1. স্থির কলামে মূল রেখার দৈর্ঘ্য গণনা করুন
  2. আপনি কীভাবে "অনুরূপ" সংজ্ঞায়িত করেন সে অনুসারে আপনার লাইনগুলি বাফার করুন। বাফারগুলি দ্রবীভূত করবেন না। ফলাফল বাফারগুলিতে মূল লাইনের সমান এফআইডি থাকবে।
  3. বাফার এবং মূল লাইনগুলি ছেদ করুন। ফলাফলের স্তরটি সেই নির্দিষ্ট চৌরাস্তাতে অংশ নেওয়া এফআইডিগুলিকে সনাক্ত করবে (উদাহরণস্বরূপ, "FID_lines" এবং "FID_buff")।
  4. দুটি মূল এফআইডি কলাম এবং মূল দৈর্ঘ্যের কলাম দ্বারা # 3 থেকে স্তরটি দ্রবীভূত করুন
  5. সংজ্ঞা ক্যোয়ারী বা অন্য উপায় ব্যবহার করে দুটি মূল এফআইডি কলামগুলির জন্য একই মান রয়েছে এমন ফলস্বরূপ রেখাগুলি উপেক্ষা করুন (অবশ্যই একটি রেখা বাফারযুক্ত এবং তার নিজের বাফারের সাথে ছেদ করা সম্পূর্ণরূপে ওভারল্যাপ হবে)।
  6. একটি সংখ্যাসূচক কলাম যুক্ত করুন এবং এটিকে নতুন দৈর্ঘ্যের সাথে বিশিষ্ট করুন
  7. মূল লাইনটির (একটি নতুন কলামে) নতুন দৈর্ঘ্যটি ভাগ করে নিন যার জন্য প্রতিটি লাইনটির বাফারে পড়ে থাকা মূল লাইনের অনুপাত পাওয়া যায়।
  8. অনুপাতের জন্য মানগুলি পরীক্ষা করুন। আপনি "যথেষ্ট অনুরূপ" হিসাবে সংজ্ঞায়িত করেছেন তাদের রাখুন। উদাহরণস্বরূপ, সম্ভবত একটি লাইন তার দৈর্ঘ্যের 75% এর জন্য অন্য লাইনের বাফারের মধ্যে পড়ার পরিমাণ সমান, সম্ভবত আপনার কাটফট 50% চুক্তি ইত্যাদি etc.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.