পাইথন: শর্তের উপর ভিত্তি করে ব্রেক লাইনস্ট্রিং


11

আমার কাছে একগুচ্ছ লাইনস্ট্রিংয়ের একটি জিওপ্যান্ডাস ডেটাফ্রেম রয়েছে যা প্রতিটি শীর্ষবিন্দু / পয়েন্টের সাথে কিছু ডেটা যুক্ত করে:

Point_x = (Lat, Lon, Time, ID, Data1, Data2, Data3)

পয়েন্টগুলি আইডির ভিত্তিতে লাইনস্ট্রিংগুলিতে রূপান্তরিত হয় এবং সময় অনুসারে অর্ডার করা হয়।

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

বর্তমান সমস্যাটি হ'ল কিছু ট্র্যাকগুলি এমন পয়েন্টগুলি থেকে তৈরি করা হয়েছে যা নকল আইডির লাইনস্ট্রিংটি বিশাল দূরত্বে পিছনে পিছনে লাফিয়ে যায় এবং আমি এই লাইনগুলি ভাঙ্গার জন্য একটি প্রান্তিক চাই।

এই বা লাইব্রেরি / পদ্ধতিগুলি কার্যকর হতে পারে সেগুলি গঠনের সঠিক উপায়ে কোনও ধারণা?

এতে ডেটাফ্রেমের ট্র্যাক প্রতি অনেক পয়েন্ট সহ 150k এরও বেশি ট্র্যাক রয়েছে যাতে দক্ষতাটি দুর্দান্ত হয়।

এখানে ট্র্যাকগুলির একটি উদাহরণ ডিএফ:

ID         geometry                                                  
204235000  LINESTRING (37.62001 -28.99535, 37.62015 -28.9...   
205400000  LINESTRING (3.807816666666666 -18.083181666666...   
207138000  LINESTRING (22.73206 -34.97915833333333, 22.73...   
209016000  LINESTRING (8.447673333333331 -23.522783333333...     

এখানে পয়েন্ট ডিএফ থেকে একটি নমুনা দেওয়া হয়েছে। ডেটটাইম, পয়েন্ট (লোন, ল্যাট), গতি, আকার ইত্যাদি সহ 18 টি কলাম রয়েছে:

Index           Heading   Latitude  Longitude       ID  
20              92.8 -35.946802  13.089695  210725000               
21              93.5 -35.946912  13.091808  210725000               
22              95.4 -35.965520  13.497698  210725000               
23              94.7 -35.965803  13.501898  210725000               
24              94.9 -35.965987  13.504573  210725000               

সম্পাদনা: একটু পরিষ্কার হওয়ার চেষ্টা করা হয়েছে।


আপনার জিওডাটা ফ্রেমের কাঠামো কী? একটি অনুলিপি gd.head()স্বাগত জানানো হবে।
জিন

মাথা দেখাতে সম্পাদিত
RedM

আমি অতীতে জিওপি (জিওপি.ডেসটেন্স.ভান্সটি) ব্যবহার করেছি। আমার পয়েন্টগুলি সংযুক্ত করার দরকার ছিল, তবে তারা আমার নির্ধারিত প্রান্তিকের চেয়ে দীর্ঘ হলে সেগুলি সংযুক্ত করতে চাইত না। আমি ফাংশনটির মাধ্যমে প্রতিটি জোড় স্থানাঙ্ক প্রেরণ করেছি এবং সেগুলি আমার সংখ্যার চেয়ে কম হলে কেবল তাদের সংযুক্ত করেছি। geopy.readthedocs.io/en/1.10.0/#geopy.distance.vincenty
জনআর

সদৃশ আইডি বৈশিষ্ট্যের জন্য প্রাথমিক কী / বাছাই শর্তটি: সময় বনাম আইডি বা আইডি বনাম সময়?
হাকফিন

আপনি কী বোঝাতে চেয়েছেন তা নিশ্চিত নয়। পয়েন্টগুলি আইডি দ্বারা গোষ্ঠীভুক্ত হয় তারপরে সময় অনুসারে বাছাই করা হয় এবং তারপরে সেই আদেশকৃত অবস্থানগুলি লাইন স্ট্রিং তৈরি করতে ব্যবহৃত হয়। আইডি কখনও কখনও বস্তুর মধ্যে নকল হয়। উদাহরণ: নগরী এ শহরে আইডি = '123' সহ একটি গাড়ি রয়েছে। এটি তার অবস্থান এবং সময় সঞ্চারিত করছে। আইডি = '123' সহ বি সি শহরে একটি গাড়িও রয়েছে এবং এটি এর অবস্থানগুলিও প্রেরণ করে এবং সময়গুলি আন্তঃবিভক্ত হয়। এই পয়েন্টগুলি থেকে তৈরি একটি লাইন এ এবং বি এর মধ্যে লাফিয়ে যাবে
রেডএম

উত্তর:


1

আমি এখনও সুদৃশ্য / জিওপ্যান্ডা ব্যবহার করি নি, তাই আমি কেবলমাত্র সিউডোকোড সরবরাহ করতে পারি:

distance_threshold = 50 # Value at which distance to cut off
new_lines = [] # Array to hold the newly created, split lines
new_line_marker = 0 # Let's remember where our new line starts
for linestring in linestrings: # Iterate over all linestrings
  for i, coord in enumerate(linestring.coords[:-1]): # Iterate over all coords of the linestring
    if distance(coord, coords[i+1]) >= distance_threshold: # Check if threshold is met
      # If condition is met, we generate a new linestring,
      # starting from the last split to the current one
      new_lines[] = new LineString(coords[new_line_marker:i])
      new_line_marker = i+1 # remember to reset the marker

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

দক্ষতা ওখান থেকে প্রয়োজন হিসাবে উন্নত করা যেতে পারে, তবে এটি একটি ভাল সূচনা পয়েন্ট হওয়া উচিত।

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