กำลังสร้างส่วนหนึ่งส่วนหลายส่วนจากหลายส่วนแบบแบ่งส่วนได้หรือไม่


11

ฉันมีรูปหลายเหลี่ยมซึ่งแบ่งออกเป็นหลายส่วนและชิ้นส่วนเหล่านี้ไม่ได้รับการสั่งซื้ออย่างดีเพื่อให้ ID ของจุดสุดยอดไม่ได้ติดตามการวางผังของโพลีไลน์

Polyline นี้เป็นตัวแทนของรถบัสและฉันต้องมีการวางแผนตามเส้นทางการขับขี่ของรถบัส ฉันต้องการทราบวิธีผสานหลายส่วนของ polyline นี้หรือไม่

ฉันได้พยายามแยกแล้วเลิกแยกรวมทั้ง Multipart to Single Part, Union, Merge และอื่น ๆ แต่ไม่มีใครให้ผลลัพธ์ที่ฉันต้องการ


@bmoussea คุณใช้เครื่องมือ Dissolve หรือไม่
artwork21

@ artwork21 ใช่ฉันทำ แต่มันไม่เปลี่ยนแปลงอะไรเลย: polyline ยังคงแบ่งเป็นหลายส่วน ...
bmoussea

ตรวจสอบรูปทรงเรขาคณิตตรวจสอบว่าชิ้นส่วนได้รับคำสั่งอย่างถูกต้องก่อนhelp.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…จากนั้นจึงละลายงานศิลป์ 21 กล่าวถึง
Mapperz

ฉันตรวจสอบรูปทรงเรขาคณิตและไม่มีรายงานปัญหา Multipart ไม่ปรากฏใน checkgeometry เนื่องจากมันเป็นส่วนหนึ่งของ polyline แล้ว
bmoussea

เส้นหลายเส้นของโพลีไลน์ของฉันปรากฏขึ้นเมื่อแก้ไขเลเยอร์ที่โพลีไลน์ของฉันอยู่จากนั้นคลิกขวาที่รูป>> แก้ไขจุดยอดและมองหาคุณสมบัติของร่าง นี่คือส่วน differents (หลายส่วน) ของ polyline ของฉันที่ฉันต้องการผสาน
bmoussea

คำตอบ:


5

ฉันเห็นจากแท็กของคุณว่าคุณกำลังเรียกใช้ ArcGIS 10 ฉันใช้วิธีการต่อไปนี้สำหรับงานที่คล้ายกัน:

1) ใช้Multipart เป็นส่วนเดียว

2) ใช้Unsplit

เพื่อให้สิ่งนี้ทำงานได้ (เช่นเพื่อให้คุณมีเส้นตามลำดับที่ถูกต้อง) คุณอาจต้องแบ่งบรรทัดออกเป็นจุดสิ้นสุดของส่วนประกอบและเปลี่ยนทิศทางตามแอตทริบิวต์ (เช่น 1 = start, 2 = end) - คุณสามารถใช้สิ่งนี้เพื่อเชื่อมต่อเฉพาะจุดที่แตกต่างกัน (ถ้า 1 + 2 จากนั้นสร้างเส้นเชื่อมต่อ)

หากคุณทำงานกับ IDE รหัสสำหรับการทำเช่นนี้จะค่อนข้างยาว แต่ฉันจะพยายามอย่างดีที่สุดหากคุณมีคำถามเฉพาะ


1
"Unsplit Line" ต้องมีสิทธิ์ใช้งาน ArcInfo หากคุณไม่มีระดับสิทธิ์ใช้งานนี้ให้ใช้ "Dissolve" จะมีตัวเลือก Unsplit Line
klewis

1

ฉันต้องทำสิ่งเดียวกันโดยใช้ AV 3.x และ Avenue ฉันดูรหัสอย่างรวดเร็ว แต่หาไม่พบ ถ้าฉันจำได้อย่างถูกต้องตรรกะก็มีลักษณะดังนี้: (ฉันมีป้ายรถเมล์และเทอร์มินัลเป็นไฟล์รูปร่างจุดที่แตกต่างกันดังนั้นฉันจึงสามารถระบุส่วนเริ่มต้นและส่วนท้าย):

  1. สร้าง polyline ที่ว่างเปล่าเพื่อรับชิ้นส่วนที่จัดเรียง ให้เรียกมันว่า
  2. ในการรับส่วนแรก:

    2a รับส่วนที่ใกล้เคียงที่สุดเพื่อเริ่มต้นเทอร์มินัล

    2b รับระยะทางของโหนดเริ่มต้นและจุดสิ้นสุดของส่วนนี้ไปยังสถานีปลายทาง หากจุดสุดยอดเริ่มต้นเป็นจุดที่ใกล้เคียงที่สุดให้เพิ่มส่วนนี้ลงใน ถ้ามันสิ้นสุดแล้วก็เพิ่มมันเข้าไป

  3. ในการรับส่วนตรงกลางและส่วนท้ายให้เริ่มด้วยส่วน (polyline) ที่คุณสร้างขึ้นในขั้นตอนก่อนหน้าและภายในวงขณะที่ (จริง) เริ่มเปรียบเทียบระยะทางระหว่างโหนดปลายของส่วนแรกกับส่วนอื่น ๆ ในอินพุต เส้น ส่วนที่ใกล้เคียงที่สุดคือ 'ส่วนถัดไป' เปรียบเทียบระยะทางของจุดเริ่มต้นและจุดสิ้นสุดของส่วนถัดไปเพื่อพิจารณาว่าจะพลิกมันหรือไม่ก่อนที่จะเพิ่มลงใน 'เรียง polyline'
  4. ออกจากลูปเมื่อจำนวนชิ้นส่วนใน 'โพลีไลน์เรียงลำดับ' นั้นเหมือนกับในโพลีไลน์อินพุต

... หรืออะไรทำนองนั้น! :-)

แจ้งให้เราทราบว่าสิ่งนี้สมเหตุสมผลสำหรับคุณหรือไม่และฉันสามารถหารหัสอเวนิวเดิมของฉันได้


1

ฉันทำงานในโครงการคล้ายกับสิ่งนี้ฉันใช้ ArcObjects เป้าหมายของฉันคือการเชื่อมสองโพลีนที่อยู่ติดกันถ้าหนึ่งในนั้นคือจุดเริ่มต้นของอีกคนหนึ่งที่จะทำให้โพลีนสั้นสองอันเป็นโพลีไลน์เดียว กระบวนการของฉันคือ

1. Dictionary<PointKey, FeatureDataList> polylineDictionary;
  • PointKey เป็นคลาสที่มีจุด
  • FeatureDataList เป็นคลาสที่มีรายการ IFeatures
  • ทั้งคลาสจะแทนที่เมธอด "Equals" และ "GetHashCode"

    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);
        }
    }
    

โดยกระบวนการเหล่านี้ฉันทำพจนานุกรมสองเล่ม หลังจากสร้างพจนานุกรมฉันตรวจสอบว่าพจนานุกรมทั้งสองมีจุดเดียวกันและในพจนานุกรมทั้งสองคีย์นั้นมีคุณลักษณะเดียวเท่านั้นในรายการคุณลักษณะจากนั้นฉันสร้างโพลีไลน์ใหม่พร้อม polylines สองอันนั้นและลบโพลีลีนสั้นสองรายการ

ในการเข้าร่วมสอง polylines เป็นหนึ่ง:

   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

ฉันมีปัญหาเดียวกันทั้งหมดเนื่องจากมีการอัปเดตเส้นทางรถเมล์โดยใช้เครื่องมือ "ปรับรูปร่าง" จางหายไปผสานและไม่ได้ผลเนื่องจากคุณสมบัติหลายส่วนไม่เหมือนกัน

หากคุณไม่ได้สังเกตสิ่งนี้ในตอนนี้ลองมองดูจุดยอดที่ใกล้เคียงกันระหว่างคุณสมบัติหลายส่วนของคุณ ขยายตัดแต่งหรือก่อร่างใหม่ตามที่จำเป็นจากนั้นใช้เครื่องมือใด ๆ ที่ระบุไว้ข้างต้น


โอ้และโดยวิธี: โดย "มองใกล้" ฉันหมายถึง VERY VERY CLOSE
อับราฮัม L

1
ฉันมีปัญหาเดียวกันและมองเข้าไปใกล้จุดจบของส่วนที่อับราฮัมแนะนำ ที่จริงแล้วพวกเขาไม่ได้เชื่อมต่อ เปิดจุดสิ้นสุดการสแนปและจุดสุดยอดร่วมกันแก้ปัญหา .. สำหรับฉัน anyhoo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.