জিপিএস ট্র্যাজেক্টোরিতে আউটলিয়ারগুলি সনাক্ত করা এবং ঠিক করা


9

আমার একটি অ্যালগরিদম বা পদ্ধতি খুঁজে latitude longitude বের করতে হবে যা পোস্ট প্রসেসিংয়ের সময় একটি ট্রাজেক্টোরিতে আউটলেট পয়েন্টগুলি সনাক্ত করতে পারে , যা পরে ঠিক করা যেতে পারে (তার প্রতিবেশীদের উপর ভিত্তি করে ট্র্যাজেক্টরির পথে ফিরে আসা))

আমি যে ধরণের আউটলেট পয়েন্টগুলি সনাক্ত করতে এবং ঠিক করতে চাই তার উদাহরণ হিসাবে আমি একটি চিত্র সংযুক্ত করেছি যা প্রদর্শিত হচ্ছে:

নীল রঙের কাঁচা ডেটা।

আমি যতটা সম্ভব ডেটা মসৃণ করার জন্য একটি সিসেন্টেড কাল্মান ফিল্টার ব্যবহার করার চেষ্টা করেছি, তবে এটি আরও চরম বিদেশিদের জন্য কার্যকরভাবে কার্যকরভাবে কাজ করবে বলে মনে হয় না (নীল রঙের কাঁচা ডেটা, লাল রঙের হালকা তথ্য):

নীল রঙের কাঁচা ডেটা, ইউকেএফ লালচে ডেটা স্মুটেড।

আমার ইউকেএফ সঠিকভাবে ক্যালিব্রেট করা যাবে না (তবে আমি এটি সম্পর্কে মোটামুটি নিশ্চিত)।

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

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

আদর্শভাবে, সমাধানটি আউটলেটটিকে সনাক্ত করবে যাতে এটি সংশোধন করা যায়, ফলস্বরূপ একটি সংশোধন করা ট্র্যাজেক্টরি:

সবুজ কাঁচা তথ্য সংশোধন করা হয়েছে।


যে সংস্থানগুলি আমি সন্ধান করেছি:

উত্তর:


1

নদী নেটওয়ার্কগুলি প্রক্রিয়া করার জন্য একটি সরঞ্জামের অংশ হিসাবে আমি নেটওয়ার্কে "স্পাইক" অনুসন্ধান করার জন্য একটি মান নিয়ন্ত্রণ সরঞ্জাম তৈরি করেছি created আমি আপনাকে আমার সরঞ্জামটি ব্যবহার করার পরামর্শ দিচ্ছি না (যেমন এটি নদী নেটওয়ার্কগুলির প্রক্রিয়াজাতকরণের জন্য) আমি আপনাকে সহায়তা ফাইলের দিকে ইঙ্গিত করি যা আমার কাজগুলি একটি চিত্র দেখায়।

পললাইনটির প্রতিটি লাইন বিভাগের মধ্যে ধারাবাহিক কোণগুলি সনাক্ত করতে আমি কোসাইনগুলির আইন ব্যবহার করে চারপাশে কোড তৈরি করেছি । একটি পললাইন বরাবর পদক্ষেপ এবং চরম কোণ সনাক্ত করতে আপনি এই ধারণাটির চারপাশে আপনার নিজের কোড বিকাশ করতে পারেন ।


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

8

অ্যালগরিদম আমি ব্যবহার করি।

  1. ইউক্লিডিয়ান ন্যূনতম বিস্তৃত গাছের গণনা করুন:

এখানে চিত্র বর্ণনা লিখুন

  1. এই নেটওয়ার্কে একে অপরের থেকে দূরে 2 পয়েন্ট সন্ধান করুন

এখানে চিত্র বর্ণনা লিখুন

  1. তাদের মধ্যে সংক্ষিপ্ততম রুটটি সন্ধান করুন:

এখানে চিত্র বর্ণনা লিখুন

যেহেতু কেউ দেখতে পাবে এটি একটি তীক্ষ্ণ মোড়ের কোণে কেটে যেতে পারে।

আমার উপরের অ্যালগরিদমের আর্কজিআইএস পাইথন বাস্তবায়ন রয়েছে, এটি নেটওয়ার্কএক্স মডিউল ব্যবহার করে। এটি আগ্রহী কিনা তা আমাকে জানান এবং আমি আমার উত্তরটি স্ক্রিপ্টের সাথে আপডেট করব

হালনাগাদ:

# Connects points to make polyline. Makes 1 line at a time
# Tool assumes that 1st layer in Table of Conternt is TARGET polyline feature class,
# second layer in TOC is SOURCE point fc.
# If no selection found in SOURCE layer, works on entire dataset

import arcpy, traceback, os, sys
import itertools as itt
from math import sqrt
sys.path.append(r'C:\Users\felix_pertziger\AppData\Roaming\Python\Python27\site-packages')
import networkx as nx
from networkx import dijkstra_path_length

try:
    def showPyMessage():
        arcpy.AddMessage(str(time.ctime()) + " - " + message)
    def CheckLayerLine(infc):
        d=arcpy.Describe(infc)
        theType=d.shapeType
        if theType!="Polyline":
            arcpy.AddWarning("\nTool designed to work with polylines as TARGET!")
            raise NameError, "Wrong input\n"
        return d
    def CheckLayerPoint(infc):
        d=arcpy.Describe(infc)
        theType=d.shapeType
        if theType!="Point":
            arcpy.AddWarning("\nTool designed to work with points as SOURCE!")
            raise NameError, "Wrong input\n"
        return d
    mxd = arcpy.mapping.MapDocument("CURRENT")
    layers = arcpy.mapping.ListLayers(mxd)
    if len(layers)<=1:
        arcpy.AddWarning("\nNot enough layers in the view!")
        raise NameError, "Wrong input\n"
    destLR, sourceLR=layers[0],layers[1]
    a = CheckLayerPoint(sourceLR);d = CheckLayerLine(destLR)

#  copy all points to manageable list
    g=arcpy.Geometry()
    geometryList=arcpy.CopyFeatures_management(sourceLR,g)
    nPoints=len(geometryList)
    arcpy.AddMessage('Computing minimum spanning tree')
    list2connect=[p.firstPoint for p in geometryList]
#  create network    
    p=list(itt.combinations(range(nPoints), 2))
    arcpy.SetProgressor("step", "", 0, len(p),1)
    G=nx.Graph()
    for f,t in p:
        p1=list2connect[f]
        p2=list2connect[t]
        dX=p2.X-p1.X;dY=p2.Y-p1.Y
        lenV=sqrt(dX*dX+dY*dY)
        G.add_edge(f,t,weight=lenV)
        arcpy.SetProgressorPosition()
    arcpy.AddMessage(len(G.edges()))
    mst=nx.minimum_spanning_tree(G)
    del G

#  find remotest pair
    arcpy.AddMessage(len(mst.edges()))
    length0=nx.all_pairs_dijkstra_path_length(mst)
    lMax=0
    for f,t in p:
        lCur=length0[f][t]
        if lCur>lMax:
            lMax=lCur
            best=(f,t)
    gL=nx.dijkstra_path(mst,best[0],best[1])
    del mst
    nPoints=len(gL)
    ordArray=arcpy.Array()
    for i in gL: ordArray.add(list2connect[i])

#  append line to TARGET
    curT = arcpy.da.InsertCursor(destLR,"SHAPE@")
    curT.insertRow((arcpy.Polyline(ordArray),))
    arcpy.RefreshActiveView()
    del curT

except:
    message = "\n*** PYTHON ERRORS *** "; showPyMessage()
    message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage()
    message = "Python Error Info: " +  str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()            

হুঁ মম আকর্ষণীয় পদ্ধতির .. এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ! একটি কাজের উদাহরণ মূল্যবান হবে আমি নিশ্চিত!
16:25

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

1
যথেষ্ট ফর্সা। একে অপরের থেকে n সময় বিরতিতে নোডগুলির মধ্যে লিঙ্ক তৈরি না করে স্ক্রিপ্ট পরিবর্তন করা সহজ। আমি স্ক্রিপ্ট অন্যান্য জিনিসের জন্য ব্যবহার করছি, জিপিএস পাথের জন্য নয়। উন্নতির জন্য অন্যান্য উপায় রয়েছে যেমন,
ত্রিভুজন

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

1
পেছনের দিকে যাওয়ার পথে @ জেপি এটি প্রথম কাঁচা রেখাটি ঘনকরণে সহায়তা করতে পারে
ফেলিক্সপ

4

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


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

2

এছাড়াও দেখার মতো হল মেডিয়ান -5 পদ্ধতি।

প্রতিটি x (বা y) স্থানাঙ্কটি এর চারপাশে 5 x (বা y) মানের মাঝারি হিসাবে সেট করা হয় (যেমন নিজেই, দুটি পূর্ববর্তী মান এবং পরবর্তী দুটি মান)।

যেমন x3 = মিডিয়ান (এক্স 1, এক্স 2, এক্স 3, এক্স 4, এক্স 5) y3 = মিডিয়ান (y1, y2, y3, y4, y5) ইত্যাদি

পদ্ধতিটি দ্রুত এবং স্ট্রিমিং ডেটাতে ব্যবহার করাও সহজ।


1

এই প্রশ্ন / উত্তরে কিছু ভাল তথ্য রয়েছে।

যদিও এটি আপনার পয়েন্টগুলি কীভাবে কাজ করবে না / তা কীভাবে ক্লাস্টার করা যায় তার উপর নির্ভর করে। আপনাকে যে পয়েন্টগুলি ছড়িয়ে পড়েছে কিন্তু বিদেশী নয় তাদের প্রতি যত্নবান হতে হবে।


0

আপনি আপনার ডেটা এক্সেল বা প্যানডাস এবং পতাকা ব্যবহার করতে বা কিছু অবাস্তব দূরত্বের চৌম্বকটি অতিক্রম করে পূর্ববর্তী পয়েন্ট থেকে সমস্ত দূরত্ব মুছতে পারেন।

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