পললাইন সম্পর্কিত প্রারম্ভিক এবং শেষ বৈশিষ্ট্যগুলিতে পয়েন্ট আইডি নির্ধারণ করা?


9

আমার দুটি পয়েন্ট এবং পললাইন শাইলফাইল রয়েছে। আমি আমার পললাইন স্তরটি পয়েন্ট ডেটা আইডি (সিস্টেমআইডি) দিয়ে পপুলেশন করার চেষ্টা করছি যেখানে লাইনগুলি শেষ হয় যেখানে শুরু হয়; যেমন। দুটি কলাম তৈরি করুন (থেকে এবং এ)। রেখাগুলি ইতিমধ্যে তাদের নির্ধারিত প্রবাহের দিকনির্দেশ রয়েছে। আমি আরকিহাইড্রো সরঞ্জাম ব্যবহার করছি তবে আরকিও ভাল আছে fine

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

দ্রষ্টব্য: সমস্ত রেখার শীর্ষে বিন্দু নেই, ফাঁকা মানগুলি তাদের জন্য ভাল।


সুতরাং আপনার পয়েন্টগুলিতে একটি ফিল্ড 'সিস্টেমআইডি' আছে যা এফএনডে যেতে হবে, পলিইনে TNode ক্ষেত্রগুলি ... এটি কি ঠিক?
মাইকেল সিমিটসন

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

এটি এখানে: gis.stackexchange.com/questions/85082 এবং এটি পয়েন্টগুলিতে বৈশিষ্ট্য অনুসারে ছিল, বিন্দুতে লাইন বা বৈশিষ্ট্যগুলি নয়। প্রশ্নের শেষে আপনি যা উল্লেখ করেছেন তা খুব সুন্দর।
ক্রিস ডাব্লু

@ ক্রিসডাব্লু, আমি ফেলিক্সআইপির উত্তরটি সত্যিই পছন্দ করি like এটি কেবল দুটি বৈশিষ্ট্যে যোগদান করে।
মাইকেল সিমিটসন

উত্তর:


12

কখনও কখনও বাক্সের সমাধানটি ব্যবহার না করাই ভাল। এই কারণেই আমি পরামর্শ দিই

  1. নোড লেয়ারে এক্স এন ওয়াই ফিল্ডকে পপুলেট করুন, সেগুলি পূর্ণসংখ্যায় রূপান্তর করুন, সেমি বলুন। স্ট্রিং ফিল্ড তৈরি করুন এবং পূর্ণসংখ্যার স্ট্রিং রিপ্রেসেন্টেশনগুলি একত্রিত করে এটিকে পপুলেট করুন।
  2. আকারের প্রথম পয়েন্টের জন্য লিঙ্ক টেবিলের মধ্যে একই জিনিস করুন।
  3. সর্বশেষ তৈরি ক্ষেত্রগুলি ব্যবহার করে লিঙ্কগুলিতে নোড সারণিতে যোগদান করুন এবং নোডআইডিটিকে FROM ক্ষেত্রে স্থানান্তর করুন।

গোটো 2, তবে নোডআইডি নিয়োগের জন্য শেষ পয়েন্টটি ব্যবহার করুন


পছন্দ করি! মত ফিল্ড ক্যালকুলেট কিছু "," + + Str (বৃত্তাকার (! আকৃতি! .FirstPoint.Y, 3)) Str (বৃত্তাকার (! আকৃতি! .FirstPoint.X, 3)) + + (পাইথন পার্সার) নোড থেকে, জন্য Str (বৃত্তাকার (! শেপ! .LastPoint.X, 3)) নোড করার জন্য + "," + টিআরআর (গোলাকার (! শেপ! .LastPoint.Y, 3)) , তারপরে বিন্দুর অনুরূপ (পাঠ্য হিসাবে) তারপরে যোগ দিন ... ব্যথা ছাড়াই স্থানিকভাবে যোগদানের দুর্দান্ত উপায়! ভৌগলিক ডেটার (7 বা 8 এর মতো) জন্য আরও বেশি উল্লেখযোগ্য সংখ্যার রাউন্ড।
মাইকেল সিসটেমন

একটি স্ক্রিপ্টিং পরিবেশে খুব দ্রুতগতিতে দ্রুতগতি সম্পন্ন যেখানে
কোথাও কোথাও

ইনট (এক্স * 100) যদি তারা মেট্রেসে প্রজেক্ট করা হয় lআল্টারনেই মাইকেলের কোডটি ব্যবহার করুন
ফেলিক্সআইপি

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

1

আমি কয়েক মাস আগে খুব একই জিনিস করেছি। আমি আরকি ব্যবহার করেছি তবে স্ক্রিপ্টটি এখানে পোস্ট করা খুব দীর্ঘ is তাই আমি আপনাকে যা করেছি তার একটি রূপরেখা দেব।

  1. নির্দিষ্ট পংক্তির বৈশিষ্ট্যটির মধ্যে কোন পয়েন্ট / নোডগুলি ছিল তা সনাক্ত করতে আমি একটি স্থানিক জোড় ব্যবহার করেছি।

  2. কারণ স্থানিক যোগদানটি প্রবাহের দিকটিকে বিবেচনায় নেয় না আমি আরকিটি ব্যবহার করেছিলাম এটি শুরুর পয়েন্টটি এবং শেষ পয়েন্টটি ছিল তা নির্ধারণ করার জন্য। আমি arcpy ব্যবহার করে এই কাজ করতে সক্ষম ছিল বর্ণনা বের করে আনতে ফাংশন লাইন বৈশিষ্ট্যের সূচনা / সমাপ্তির ছেদচিহ্ন জন্য তথ্য তুল্য এবং সংযুক্ত পয়েন্ট তুল্য মান এইসব তুলনায়।

  3. অবশেষে একবার আমি মূল পললাইন ডেটাসেটে টু / থেকে ক্ষেত্রগুলি পপুলেট করার জন্য সেটভ্যালু ফাংশনটি ব্যবহার করে সেগুলির মধ্যে / পয়েন্টগুলির মধ্যে কোনটি থেকে কাজ করেছি।

স্পষ্টতই, এর চেয়ে আরও কিছুটা আছে তবে আমি মূল বিষয়গুলি উল্লেখ করেছি।


আমার জ্যামিতিক নেটওয়ার্কে, প্রবাহের দিকটি কার্ডিয়াল দিকগুলির যে কোনও একটিতে হতে পারে। আমি কাঁচা স্থানাঙ্কের তুলনা থেকে একটি প্রবাহের দিকনির্দেশ সম্ভবত সনাক্ত করতে পারি না যদি না আমি প্রবাহের দিকের রাস্টার বা সমমানের কিছু ব্যবহার না করতাম। এমনকি এটি সমস্যাযুক্ত হতে পারে কারণ কখনও কখনও পাইপগুলি প্রাকৃতিক তলদেশের বিপরীতে orালু হয় বা উপরে চলাচল করে জল সরবরাহ করা হয়। আপনি কীভাবে নিশ্চিত হতে পারেন যে আপনার প্রবাহের দিকটি সঠিক?
প্রিসিলা

1

আমি @ ফেলিক্সআইপি দ্বারা অনুপ্রাণিত হয়েছি, তবে আমি যোগদান বা অতিরিক্ত ফাইল তৈরি না করেই একটি সমাধান লিখতে চেয়েছিলাম, যেহেতু আমার নেটওয়ার্ক 400K + পাইপ এবং 500 কে + নোডের সাথে বেশ বড়।

জ্যামিতিক নেটওয়ার্ক বিল্ড নোডগুলির এক্স, ওয়াই এবং পাইপের সমাপ্তি ঘটায় forces আপনি আরকিপি কার্সারে আকৃতি টোকেন সহ এই অবস্থানগুলি অ্যাক্সেস করতে এবং সেগুলি মেলতে পারেন। রেখাগুলির জন্য আকৃতি টোকেনগুলি যেভাবে অঙ্কিত হয়েছিল সেভাবে অনুভূমিকগুলির একটি অ্যারে প্রদান করে। আমার নেটওয়ার্কে পাইপগুলির অঙ্কনের ক্রমটি খুব বেশি QA'd হয় কারণ আমরা প্রবাহের দিকনির্দেশ নির্ধারণ করতে এটি ব্যবহার করি। সুতরাং, প্রথম ভার্টেক্সটি পাইপের শুরু এবং শেষ প্রান্তটি পাইপের শেষ।

তথ্যসূত্র: ASSETID = পাইপের আইডি, পাইপের শুরুতে UNITID = নোড আইডি, পাইপের শেষে UNITID2 = নোড আইডি।

nodes = "mergeNodes"
pipes = "SEWER_1"

nodeDict = {}
pipeDict = {}

#populate node dictionary with X,Y as the key and node ID as the value
for node in arcpy.da.SearchCursor(nodes, ["UNITID", "SHAPE@XY"]):
    nodeDict[(node[1][0], node[1][1])] = node[0]

#populate pipe dictionary with pipe ID as the key and list of X,Y as values 
#vertices populated in the order that the line was draw
#so that [0] is the first vertex and [-1] is the final vertex
for pipe in arcpy.da.SearchCursor(pipes, ["ASSETID", "SHAPE@"]):
    for arrayOb in pipe[1]:
        for point in arrayOb:
            if pipe[0] in pipeDict:
                pipeDict[pipe[0]].append((point.X, point.Y))
            else: 
                pipeDict[pipe[0]] = [(point.X, point.Y)]

#populate UNITID with the first vertex of the line
#populate UNITID2 with the final vertex of the line
with arcpy.da.UpdateCursor(pipes, ["ASSETID", "UNITID", "UNITID2"]) as cur:
    for pipe in cur:
        if pipeDict[pipe[0]][0] in nodeDict:
            pipe[1] = nodeDict[pipeDict[pipe[0]][0]]
        if pipeDict[pipe[0]][-1] in nodeDict:
            pipe[2] = nodeDict[pipeDict[pipe[0]][-1]]
        cur.updateRow(pipe)

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