การนับรูปหลายเหลี่ยมที่ทับซ้อนกันจากหนึ่ง Shapefile โดยใช้ ArcGIS Desktop?


10

ฉันมีไฟล์รูปร่างที่มี 16,400 รูปหลายเหลี่ยม รูปหลายเหลี่ยมแต่ละอันแสดงให้เห็นถึงการขยายพันธุ์ของนกทั้งโลก

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

ตอนนี้ฉันต้องนับรูปหลายเหลี่ยมที่ทับซ้อนกัน ฉันลองกับสหภาพและยุบ (นับยูเนี่ยน) แต่สหภาพไม่ทำงานสำหรับรูปหลายเหลี่ยมจำนวนมาก

จากนั้นฉันพยายามที่จะคลิปทวีป แต่ก็ไม่ได้ผลเพราะรูปหลายเหลี่ยมจำนวนมาก ยิ่งกว่านั้นฉันลองวิธีนี้แต่ก็ไม่ประสบความสำเร็จ

ดังนั้นฉันขอให้คุณฉันมีวิธีการนับรูปหลายเหลี่ยมที่ทับซ้อนกันถ้ารูปหลายเหลี่ยม 16400 มีอยู่ในรูปร่างเดียวหรือไม่

ฉันทำงานกับ 10.0 และสามารถทำงานกับ 10.2 โซลูชันของ ArcPy นั้นยอดเยี่ยมเช่นกัน

ในขณะนี้ฉันกำลังคิดเกี่ยวกับการสร้างแหอวนและวนซ้ำแถวของ shp ด้วย 16400 polygons และเขียน 1 ไปยังเขตข้อมูลค่าของเซลล์ fishnet หากรูปหลายเหลี่ยมอยู่ในเซลล์นี้และใช้แถวถัดไป (รูปหลายเหลี่ยม) และ ถ้าสิ่งนี้อยู่ในเซลล์ fishnet ด้วย +1

แต่ฉันไม่รู้ว่านี่เป็นวิธีแก้ปัญหาที่ดีหรือไม่และจะรู้ได้อย่างไร หรือฉันต้องเรียนรู้ R เพื่อใช้วิธีนี้

ผลลัพธ์: ควรเป็นรูปร่างที่คุณมีรูปหลายเหลี่ยมใหม่จากส่วนที่ทับซ้อนกันและเขตข้อมูลที่มีการนับการทับซ้อน

ดังนั้นในที่สุดควรมีไฟล์รูปร่างที่คุณสามารถดูจำนวนนกที่พบในสถานที่เดียวกัน


ปัญหาของคุณเป็นปัญหาเนื่องจากขนาดของชุดข้อมูลของคุณ คำตอบ (และลิงก์ที่คุณเสนอ) นั้นถูกต้อง แต่คุณจะมีปัญหาด้านความจำ บางทีคุณอาจลองผสานรวมกับข้อมูลของคุณในระยะสองสามร้อยเมตร (ขึ้นอยู่กับความแม่นยำที่คาดไว้) เพื่อหลีกเลี่ยงการสร้างรูปหลายเหลี่ยมพันล้านเศษไม้) ตรวจสอบให้แน่ใจว่าได้ทำงานกับสำเนาเพราะจะแก้ไขข้อมูลของคุณ
radouxju

1
แบ่ง Shapefile ของเราเป็น Shapefiles ระดับภูมิภาคจากนั้นทำการวิเคราะห์ใน Shapefiles ระดับภูมิภาคจากนั้นละลายไฟล์เหล่านั้นเพื่อให้ได้ไฟล์แบบเต็มอีกครั้ง
til_b

ฉันพยายามที่จะคลิปรูปร่างนี้ด้วยประเทศเดียว แต่ฉันได้ข้อผิดพลาด 999999 กลับมา
โนรา

1
คุณดูที่เครื่องมือลูกเต๋าเพื่อลดความซับซ้อนของรูปหลายเหลี่ยมของคุณหรือไม่ นอกจากนี้หากคุณได้รับข้อผิดพลาด 999999 เพียงพยายามคลิปข้อมูลของคุณคุณได้ลองใช้เครื่องมือตรวจสอบรูปทรงเรขาคณิตเพื่อดูว่ามีความเข้าใจที่ลึกซึ้งขึ้นหรือไม่?
Hornbydd

2
ฉันทำการตรวจสอบรูปทรงเรขาคณิตบางส่วนเกี่ยวกับข้อมูลและมีการแยกตัวเองมากมาย ฉันขอแนะนำ 1. ให้แน่ใจว่าใช้ RAM สูงสุดและไฟล์เพจขนาดใหญ่ 2. ซ่อมแซมเรขาคณิต 3. ถ้าจำเป็นให้ลดความซับซ้อนของรูปหลายเหลี่ยม 3. ข้อมูลย่อยเป็น 1 / 3s หรือ 1 / 4s (หรืออะไรก็ตามที่จำเป็น) 4. เรียกใช้เวิร์กโฟลว์ Union-Dissolve-Rasterize ดังที่คำตอบนี้ 5. สรุปแรสเตอร์
Cotton.Rockwood

คำตอบ:


9

ฉันจะแนะนำให้ใช้จำนวนที่ทับซ้อนกันคุณสมบัติ (วิเคราะห์)เครื่องมือ

สร้างคุณลักษณะการทับซ้อนของ planarized จากคุณสมบัติอินพุต จำนวนของคุณลักษณะที่ทับซ้อนกันถูกเขียนไปยังคุณลักษณะของเอาต์พุต

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


ฉันก็ลองสิ่งนี้และมันใช้ไม่ได้กับ shp ของฉัน (ใหญ่เกินไป) ขอบคุณสำหรับการตอบ
Nora

1
@Aaron ลิงค์ตายไปแล้ว ขณะนี้มีการนำไปใช้ใน Pro: pro.arcgis.com/en/pro-app/tool-reference/analysis/ ......
Albert

1
ขอบคุณ @Albert โพสต์ได้รับการปรับปรุงตามคำแนะนำของคุณ
แอรอน

5

การใช้โทเค็นเรขาคณิตของ arcpy คุณสามารถลองดังนี้:

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

import os
import arcpy

arcpy.env.workspace = r"" #path to workspace
arcpy.env.overwriteOutput = 1

polygon_fc = r"" #path to polygon fc

base = [row for row in arcpy.da.SearchCursor(polygon_fc,["OID@","SHAPE@"])]
compare = base

overlaps_stats = {}

for b in base:
    for c in compare:
        if b[1].overlaps(c[1]):
            #print "{0} overlaps {1}".format(b[0],c[0])
            if overlap_stats.has_key(b[0]):
                overlap_stats[b[0]].append(c[0])
            else:
                overlap_stats[b[0]] = [c[0]]

for key,value in overlap_stats.iteritems():
    print "Polygon {0}:  Overlaps: {1}.".format(key,len(value))

สำหรับข้อมูลตัวอย่างข้างต้นโค้ดจะส่งกลับจำนวนการทับซ้อนต่อไปนี้: ป้อนคำอธิบายรูปภาพที่นี่

โค้ดตามที่เป็นจะส่งคืนการนับสำหรับรูปหลายเหลี่ยมที่มีการทับซ้อนอย่างน้อยหนึ่งรายการ


@ Nxau: โอเคฉันเดาว่าฉันทำผิดพลาดเพื่ออธิบายว่าผลลัพธ์ควรมีลักษณะอย่างไร ควรเป็นรูปทรงที่คุณมีรูปหลายเหลี่ยมใหม่จากรูปที่ซ้อนทับกัน ตัวอย่างเช่นในรูปภาพวงกลม 4 และ 5 ซ้อนทับกัน รูปร่างใหม่ควรมีรูปหลายเหลี่ยมสามรูป (ยูเนี่ยนไม่ทำงานสำหรับรูปร่างที่ใหญ่นี้) พื้นที่ที่ทับซ้อนกันควรมีค่า 2 ในเขตข้อมูลและส่วนที่เหลือของวงกลม 4 และ 5 ควรมีค่า 1 ในเขตข้อมูลนี้ ดังนั้นในที่สุดควรมีไฟล์รูปร่างที่คุณสามารถดูจำนวนนกที่พบในสถานที่เดียวกัน ขอบคุณสำหรับสคริปต์ของคุณ!
โนรา

5

วิธีการง่าย ๆ คือ:

  1. ยูเนี่ยน shapefile กับตัวมันเอง;
  2. แปลงการส่งออกหลายส่วนที่จะเป็นส่วนหนึ่งเดียว ;
  3. ใช้เครื่องมือเข้าร่วมเชิงพื้นที่เพื่อนับการทับซ้อน (ใช้ตัวเลือกการจับคู่ ARE_IDENTICAL_TO)
  4. สัญญลักษณ์ใช้join_countฟิลด์

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


1

ฉันเดาว่าคุณได้ลองวิธีนี้แล้ว: การนับและการซ้อนทับหลายเหลี่ยมแรสเตอร์ใน ArcGIS Desktop หรือไม่

รูปหลายเหลี่ยม 16,400 ไม่มากนัก อย่างไรก็ตามวิธีแก้ปัญหาที่อาจเกิดขึ้นอย่างหนึ่งคือเพียงเข้าร่วม Spatial แบบปกติ ArcMap toolbox, > Analysis Tools -> Overlap -> Spatial Joinใน

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

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

ฉันทำมันต่อไป


ใช่ฉันได้ลองวิธีใช้จากลิงค์แล้ว แต่การใช้สหภาพเป็นไปไม่ได้สำหรับ shp นี้ ลอง Spatial Join ฉันได้รับสิ่งนี้กลับมา: ERROR 000426: หน่วยความจำไม่พอ
โนรา

ฉันใช้งานบนเครื่องที่มี RAM ขนาด 4GB และมีคุณสมบัติหลายอย่างประมาณ 5 เท่าดังนั้นฉันจึงประหลาดใจที่ไม่ได้ทำงานกับตัวเลขที่ต่ำกว่ามาก คุณอาจมีจุดยอดมากเกินไปในข้อมูลของคุณ (ของฉันมีขนาดประมาณ 60MB ไฟล์. shp ของคุณใหญ่แค่ไหน) ลอง generalising มัน
GIS- Jonathan

หากเพียงแค่ shp อยู่ใน fgdb fgdb จะมี 1,73 GB ในโฟลเดอร์รูปร่างมี 2,00GB
โนรา

ฉันใช้ชุดข้อมูลนี้เช่นกันและฉันคิดว่าปัญหาหลายอย่างเกิดขึ้นเพราะรูปหลายเหลี่ยมหลายส่วนมีหลายส่วน เมื่อใช้ร่วมกับความละเอียดทำให้งานนี้เป็นงานที่ต้องใช้หน่วยความจำมาก
Cotton.Rockwood

@ Cotton.Rockwood: และคุณหาวิธีแก้ปัญหาใน R ใช่ไหม? ฉันคิดว่าการใช้กล่องเครื่องมือ 'Count Overlapping Polygons' กับอินพุต 500 รูปหลายเหลี่ยม (33 ตัวเลือก) กว่ารูปหลายเหลี่ยมถึง raster ด้วยค่า "เข้าร่วมนับ" และในตอนท้ายคำนวณ raster (ModelBuilder) มันใช้เวลานาน ...
Nora

1

ฉันดาวน์โหลดและทดลองใช้เครื่องมือ "Count Overlapping Polygons" อาจใช้งานได้ แต่ใช้เวลานานมาก (อาจเป็นเพราะขนาดไฟล์ แต่อินพุต FC ของฉันมีบันทึกน้อยกว่า 5,000 รายการ)

ในขณะที่ฉันกำลังรอให้เครื่องมือทำงานฉันเปิดหน้าต่าง ArcMap อื่นและใช้เวลาเพียงไม่กี่ก้าวในการรับสิ่งที่ฉันต้องการ 1) Spatial Join - ใช้คลาสคุณลักษณะเดียวกับ Target และ Join Features และเลือกตัวเลือก "เข้าร่วมหนึ่งถึงหลายคน" 2) Dissolve - การใช้เอาต์พุตจากขั้นตอนสุดท้าย ใช้ฟิลด์ "TARGET_FID" เป็นฟิลด์ละลายและสำหรับสถิติคุณสามารถ SUM ฟิลด์ "Join_Count" หรือ COUNT ในฟิลด์ "JOIN_FID" 3) ในไฟล์เอาต์พุตจากขั้นตอนที่ 2 ให้ใช้เครื่องคิดเลขลบฟิลด์ 1 จากฟิลด์สถิติ ("SUM_Join_Count" หรือ "COUNT_JOIN_FID") - เนื่องจากแต่ละฟีเจอร์จะตัดกัน

ฉันแนะนำให้ใช้วิธีนี้กับเครื่องมือ "Count Overlapping Polygon" ฉันเริ่มใช้เครื่องมือ COP ~ 5 นาทีก่อนที่จะเริ่มวิธีการเข้าร่วม -> นี้และมันให้ผลลัพธ์ฉันด้วยเวลาเพียงพอที่จะเขียนสิ่งนี้ก่อนที่เครื่องมือ "Count Overlapping Polygon" ก็เสร็จสิ้นแล้ว

หวังว่านี่จะช่วยได้!

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