การสร้างรูปหลายเหลี่ยมเส้นโค้งจริงในฐานข้อมูลไฟล์โดยใช้ ArcPy?


9

ในฐานะพื้นหลังคำถามนี้เกิดขึ้นจากการพยายามตอบคำถามเกี่ยวกับวิธีการสร้างรูปหลายเหลี่ยมที่ทับซ้อนกันจากบรรทัดผลลัพธ์จากเครื่องมือ Table To Ellipse

การใช้ ArcMap 10.1 GUI มันง่ายมากในการแปลงรูปหลายเหลี่ยมเส้นโค้งจริงให้เป็นคลาสคุณสมบัติทางภูมิศาสตร์ฐานข้อมูลโดยใช้เครื่องมือก่อสร้างEllipseแต่ ...

เป็นไปได้หรือไม่ที่จะเขียนรูปหลายเหลี่ยมเชิงเส้นโค้งจริงขณะอ่านแถว (arcpy.da.SearchCursor) จากตารางที่มีจุดศูนย์กลางแกนหลักแกนแกนเล็กและแกนราบสำหรับแต่ละอัน?

ฉันหวังว่าอาจมีโทเค็นที่พร้อมใช้งานกับarcpy.da.InsertCursorเพื่อทำสิ่งนี้ แต่SHAPE@ดูเหมือนว่าจะถูก จำกัด ด้วยสิ่งที่วัตถุเรขาคณิตสนับสนุนและไม่ปรากฏว่ามีส่วนโค้งจริง


1
ฉันได้ค้นหารอบและสิ่งเดียวที่ฉันพบว่าอาจจะเป็นประโยชน์เล็กน้อยนี้
Paul

1
และสำหรับสิ่งนั้นคำถาม & คำตอบนี้อาจมีประโยชน์: gis.stackexchange.com/questions/80/…
blord-castillo

ถ้าคุณต้องการที่จะเขียนคำตอบเกี่ยวกับเรื่องนี้ฉันจะ upvote อย่างมีความสุข แต่ฉันอาจจะออกจากการยอมรับสำหรับ ArcPy โดยไม่ต้อง ArcObjects คำตอบ (ซึ่งฉันจะให้โดยการเชื่อมโยงกับความคิด ArcGIS ถ้าไม่มีใครทำ)
PolyGeo

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่ฉันพบวิธีแก้ปัญหาด้วย arcpy มันต้องใช้คณิตศาสตร์ แต่ดูคำตอบของฉันด้านล่าง
crmackey

คำตอบ:


11

ในขณะที่วัตถุเรขาคณิต arcpy ไม่สนับสนุนเส้นโค้งจริงที่ 10.3, Esri ใช้ True Curves ใน REST API และดังนั้นจึงต้องใช้การสนับสนุน JSON สำหรับพวกเขาใน FeatureSets ดังนั้นคุณสามารถ "เคล็ดลับ" arcpy เข้าไปในการทำเช่นนี้สำหรับคุณถ้าคุณสร้างเส้นโค้งในโครงสร้าง JSON

นี่คือตัวอย่าง: สร้างไฟล์ JSON ด้วยเส้นโค้งจริง (ใช้ส่วนโค้งวงกลมและเส้นโค้ง Bezier) บางสิ่งเช่นนี้:

{   'fieldAliases': {
        'Id': 'Id',
        'FID': 'FID'
    },
    'fields': [{
        'alias': 'FID',
        'type': 'esriFieldTypeOID',
        'name': 'FID'
    }, {
        'alias': 'Id',
        'type': 'esriFieldTypeInteger',
        'name': 'Id'
    }],
    'displayFieldName': '',
    'spatialReference': {
        'wkid': 103734,
        'latestWkid': 103734
    },
    'geometryType': 'esriGeometryPolyline'
    'features': [{
        'geometry': {
                      "curvePaths":[[
                        [6,3],[5,3],
                        {"b":[[3,2],[6,1],[2,4]]},
                        [1,2],
                        {"a":[[0,2],[0,3],0,0,2.094395102393195,1.83,0.33333333]}
                      ]]
                    },
        'attributes': {
            'Id': 0,
            'FID': 0
        }
    }],
}

จากนั้นโหลดไปยังชุดคุณลักษณะและบันทึกลงในคลาสคุณลักษณะ

fs = arcpy.FeatureSet()
fs.load(r'C:\path_to_your_json_file.json')
arcpy.management.CopyFeatures(fs, r'in_memory\test_curve')

และบูมคุณมีโค้งที่แท้จริง! นี่คือสิ่งที่มันสร้างขึ้นใน ArcMap:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นในกรณีของคุณบางทีคุณสามารถสร้างโครงสร้าง json โดยการหล่อคุณสมบัติเดิมไปยังชุดคุณลักษณะและเล่นกับ JSON หรือตามที่คุณวนซ้ำแถวในเคอร์เซอร์ค้นหา คณิตศาสตร์อาจเป็นเรื่องยากเล็กน้อยที่จะได้รับสิ่งที่คุณต้องการ แต่ทำได้แน่นอน


ฉันควรจะพูดถึงว่าคุณไม่จำเป็นต้องสร้างชุดคุณสมบัติเต็มรูปแบบคุณสามารถส่งรูปทรงเรขาคณิตของ JSON ไปยังส่วนโดยตรงarcpy.AsShape(geojson, True)เพื่อรับวัตถุรูปทรงเรขาคณิตกลับมาได้


1

เราพบปัญหาเดียวกันเมื่อเราต้องดึงพัสดุนับร้อยจากคำอธิบายทางกฎหมายลงในฐานข้อมูลทางภูมิศาสตร์ เครื่องมือ COGO เป็นเพียงสิ่งเดียวที่จะช่วยให้เราสามารถวาดและรักษาเส้นโค้งที่แท้จริง น่าเสียดายที่เครื่องมือ COGO นั้นไม่สามารถเขียนสคริปต์ได้

อย่างไรก็ตามเราสามารถแปลงคำอธิบายทางกฎหมายให้เป็นรูปแบบ txt โดยที่เราสามารถโหลดคำอธิบายเหล่านั้นลงในหน้าต่างการสำรวจเพื่อสร้างรูปร่างของเรา ขึ้นอยู่กับรูปแบบตารางคุณสามารถ (ใช้ Python) แปลงตารางของคุณเป็น txt แล้วโหลดลงในหน้าต่างสำรวจ


วันนี้ผมได้พยายามที่จะนำเข้ารูปทรงโค้งจริงเป็น FGDB และวิ่งข้ามแปลง Curve Add-in ไม่แน่ใจว่ามันช่วยได้หรือไม่ แต่คิดว่ามันมีประโยชน์ในการจัดการกับโค้งที่แท้จริง

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