मल्टीपार्ट पॉलीलाइन से एक भाग पॉलीलाइन बनाना?


11

मेरे पास एक पॉलीलाइन है जिसे मल्टीपार्ट्स में विभाजित किया गया है और इन भागों को अच्छी तरह से ऑर्डर नहीं किया गया है, ताकि वर्टेक्स की आईडी पॉलीलाइन की साजिश का पालन नहीं कर रहे हैं।

यह पॉलीलाइन एक बस लाइन का प्रतिनिधित्व करती है और मुझे बस के ड्राइविंग तरीके का पालन करने की आवश्यकता है। मैं जानना चाहता हूं कि इस पॉलीलाइन के मल्टीपार्ट को कैसे मर्ज किया जाए?

मैंने पहले ही स्प्लिट और अनसप्लिट करने की कोशिश की है, साथ ही मल्टीपार्ट से सिंगल पार्ट, यूनियन, मर्ज आदि के लिए प्रयास किया है, लेकिन कोई भी मुझे वह परिणाम नहीं दे रहा है जो मैं चाहता हूं।


@bmoussea, क्या आपने डिसॉल्व टूल का उपयोग किया है?
कलाकृति 21

@ कलाकृति21 हां मैंने किया है, लेकिन यह कुछ भी नहीं बदलता है:
पॉलीलाइन

चेक ज्यामिति सत्यापित करें कि बहु-भाग को सही ढंग से पहले का आदेश दिया है help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//... तो एक artwork21 भंग का उल्लेख है
Mapperz

मैंने ज्यामिति की जाँच की और रिपोर्ट की गई कोई समस्या नहीं है। मल्टीपार्ट चेकगोमेट्री में दिखाई नहीं देते हैं क्योंकि वे पहले से ही पॉलीलाइन के हिस्से हैं।
बमसिया

मेरी पॉलीलाइन के मल्टीपर्ट उस परत को संपादित करते समय दिखाई देते हैं जहां मेरी पॉलीलाइन है, और फिर उस पर राइट क्लिक -> वर्टिस को संपादित करें और स्केच गुण में देखें। यहाँ मेरी पॉलीलाइन के विभिन्न भाग (मल्टीपार्ट्स) हैं जो मैं विलय करना चाहूंगा।
बमसिया

जवाबों:


5

मैं आपके टैग से देख रहा हूं कि आप ArcGIS 10 चला रहे हैं। मैंने एक समान कार्य के लिए निम्नलिखित विधि का उपयोग किया है:

1) एकल भाग के लिए मल्टीपार्ट का उपयोग करें

2) Unsplit का उपयोग करें

इसके लिए काम करने के लिए (यानी ताकि आपके पास उचित क्रम में लाइनें हों) आपको लाइन को घटक के अंतिम बिंदुओं में तोड़ने की आवश्यकता हो सकती है और फिर एक विशेषता के आधार पर दिशा बदल सकती है (जैसे 1 = शुरू, 2 = अंत) - आप इसका उपयोग केवल उन बिंदुओं को सशर्त रूप से कनेक्ट करने के लिए कर सकते हैं जो अलग हैं (यदि 1 + 2 तो कनेक्टिंग लाइनें बनाएं)।

यदि आप आईडीई के साथ काम कर रहे हैं तो ऐसा करने के लिए कोड काफी लंबा है, लेकिन यदि आप विशिष्ट प्रश्न हैं, तो मैं आपकी मदद करने की पूरी कोशिश करूंगा।


1
"अनसप्लिट लाइन" को एक ArcInfo लाइसेंस की आवश्यकता होती है। यदि आपके पास यह लाइसेंस स्तर नहीं है, तो "भंग" का उपयोग करें, इसमें एक अनसप्लिट लाइन विकल्प है।
क्लेविस

1

मुझे एवी 3.x और एवेन्यू का उपयोग करके कुछ समय पहले बिल्कुल वैसा ही करना था। मुझे कोड के लिए एक त्वरित नज़र था, लेकिन वह नहीं मिला। अगर मुझे सही ढंग से याद है कि तर्क कुछ इस तरह से था: (मेरे पास बस स्टॉप और टर्मिनल भी एक अलग बिंदु आकार के रूप में थे, इसलिए मैं शुरुआत और अंत भागों को निर्धारित करने में सक्षम था):

  1. सॉर्ट किए गए भागों को प्राप्त करने के लिए एक खाली पॉलीलाइन बनाएं। चलो इसे 'सॉर्ट की गई पॉलीलाइन' कहते हैं
  2. पहला भाग पाने के लिए:

    2 ए। टर्मिनल शुरू करने के लिए निकटतम भाग प्राप्त करें

    2 बी। इस हिस्से के स्टार्ट एंड एंड नोड की दूरी को स्टार्ट टर्मिनल तक पहुंचाएं। यदि स्टार्ट वर्टेक्स निकटतम है तो इस भाग को 'सॉर्ट किए गए पॉलीलाइन' में जोड़ें। यदि इसका अंत है - इसे फ़्लिप करें और फिर इसे जोड़ें।

  3. मध्य और अंत भागों को प्राप्त करने के लिए, उस भाग (पॉलीलाइन) से शुरू करें जो आपने पिछले चरण में बनाया था और थोड़ी देर (सत्य) लूप के भीतर, पहले भाग के अंतिम नोड के बीच की दूरी की तुलना इनपुट में दूसरे भागों से करना शुरू करें पॉलीलाइन। जो सबसे नज़दीक है वह है 'अगला भाग'। अगले भाग की शुरुआत और अंत नोड की दूरी की तुलना करके यह निर्धारित करें कि इसे 'सॉर्ट किए गए पॉलीटी' में जोड़ने से पहले फ्लिप करना है या नहीं
  4. लूप से बाहर निकलें जब 'सॉर्ट किए गए पॉलीलाइन' में भाग की संख्या इनपुट पॉलीलाइन के समान होती है।

... या कुछ इस तरह का! :-)

मुझे पता है अगर यह आप के लिए समझ में आता है और मैं अपने मूल एवेन्यू कोड खोजने के लिए एक और जाना हो सकता है।


1

मैंने इसी तरह की एक परियोजना में काम किया, मैंने आर्कोबजेक्ट्स का उपयोग किया। मेरा लक्ष्य दो आसन्न पॉलीलाइनों को जोड़ रहा था यदि इसका एक अंतिम बिंदु एक पॉलीलाइन में दो छोटे पॉलीलाइन बनाने के लिए एक और एक प्रारंभिक बिंदु है। मेरी प्रक्रिया थी:

1. Dictionary<PointKey, FeatureDataList> polylineDictionary;
  • पॉइंटके एक ऐसा वर्ग है जिसमें एक बिंदु होता है।
  • FeatureDataList एक ऐसा वर्ग है जिसमें IFeatures की सूची है।
  • दोनों कक्षाएं "बराबर" और "गेटहैशकोड" तरीकों से आगे निकल जाती हैं।

    Dictionary<PointKey, FeatureDataList> ToPointDictionary;
    Dictionary<PointKey, FeatureDataList> FromPointDictionary;
    public void CreateDictionary(IFeatureLayer featureLayer)
    {
        var featureFunctionality = new FeatureFunctionality();
        List<IFeature> features = GetAllFeatures(featureLayer.FeatureClass);
    
        foreach (var feature in features)
        {
            IPolyline polyline = GetPolylineFromFeature(feature);
            AddFeatureInDictionary(ToPointDictionary, feature, polyline.ToPoint);
            AddFeatureInDictionary(FromPointDictionary, feature, polyline.FromPoint);
        }
    }
    
    
    
    void AddFeatureInDictionary(Dictionary<PointKey, FeatureDataList> polylineDictionary, IFeature feature, IPoint point)
    {
        FeatureDataList featureDataList;
        PointKey key = PointKey.GetKey(point);
        if (!polylineDictionary.ContainsKey(key))
        {
            featureDataList = new FeatureDataList();
            featureDataList.Add(feature);
            polylineDictionary.Add(key, featureDataList);
        }
        else
        {
            featureDataList = polylineDictionary[key];
            featureDataList.Add(feature);
        }
    }
    

इन प्रक्रियाओं से मैंने दो शब्दकोष बनाए। शब्दकोश बनाने के बाद, मैं जांचता हूं कि क्या दोनों शब्दकोशों में एक ही बिंदु है और दोनों शब्दकोशों में, उस कुंजी में सुविधा सूची में केवल एक ही विशेषता है, तो मैंने उन दो पॉलीलाइनों के साथ एक नई पॉलीलाइन बनाई और दो लघु पॉलीलाइनों को हटा दिया।

एक में दो पॉलीलाइन को मिलाने के लिए:

   private IPolyline GetJoinedPolylineFromFeatures(List<IFeature> features)
   {
        IPolyline newPolyline = null;
        if (features.Count == 2)
        {
            IPolyline polyline1 = feature1.Shape as IPolyline;
            IPolyline polyline2 = feature2.Shape as IPolyline;
            if (PointKey.GetKey(polyline1.ToPoint).Equals(PointKey.GetKey(polyline2.FromPoint)))
            {
                var topoOperator2 = polyline1 as ITopologicalOperator2;
                if (topoOperator2 != null)
                    newPolyline = topoOperator2.Union(polyline2) as IPolyline;
            }
            else if (PointKey.GetKey(polyline1.FromPoint).Equals(PointKey.GetKey(polyline2.ToPoint)))
            {
                var topoOperator2 = polyline2 as ITopologicalOperator2;
                if (topoOperator2 != null)
                    newPolyline = topoOperator2.Union(polyline1) as IPolyline;
            }
        }
        return newPolyline;
  }

1

मुझे "Reshape Feature" टूल का उपयोग करके बस मार्गों पर किए गए अपडेट के कारण ठीक वैसी ही समस्या थी। मल्ट्जार्ट, मर्ज और अनसप्लिट काम नहीं कर रहे थे क्योंकि मल्टीपार्ट फीचर संयोग नहीं थे।

यदि आपने अभी तक इस पर ध्यान नहीं दिया है, तो अपने मल्टीपार्ट फीचर्स के बीच मेल खाने वाले कोने पर एक करीब से नज़र डालें। आवश्यकतानुसार बढ़ाएँ, ट्रिम करें या फिर से व्यवस्थित करें और फिर ऊपर बताए गए किसी भी उपकरण का उपयोग करें।


ओह, और इस तरह से: "करीब से देखो" से मेरा मतलब है बहुत बहुत बंद।
अब्राहम एल

1
मेरे पास एक ही समस्या थी और अब्राहम के सुझाव के अनुसार भाग के अंत में बहुत अधिक करीब से देखा। वे वास्तव में जुड़े हुए नहीं थे। एंडपॉइंट स्नैपिंग चालू करें और अंतिम छोरों को एक साथ स्नैप करें, समस्या हल हो गई है .. मेरे लिए किसी भी तरह।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.