การคัดลอกคุณลักษณะจากรูปหลายเหลี่ยมชั้นหนึ่งไปยังอีกชั้นหนึ่งหรือไม่?


11

ฉันมีปัญหาที่ดูเหมือนว่าฉันไม่สามารถไปไหนมาไหนได้ ฉันมีรูปหลายเหลี่ยมสองชั้น:

  • รูปหลายเหลี่ยม A - เป็นชุดย่อยของรูปหลายเหลี่ยม B ที่มีเขตข้อมูลเดียวกันและมีรูปหลายเหลี่ยมที่เหมือนกันกับรูปหลายเหลี่ยม B
  • รูปหลายเหลี่ยม B - มีข้อมูลคุณลักษณะที่ฉันต้องการเป็นรูปหลายเหลี่ยม A

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


สร้าง centroids (คะแนน) ของรูปหลายเหลี่ยม A และเข้าร่วมคุณลักษณะไปยัง B และส่งออกไปยังไฟล์ใหม่เพื่อรักษาแอตทริบิวต์จาก A.
Mapperz

3
@Mapperz นี่เป็นวิธีที่อันตรายเพราะสามารถสร้างข้อผิดพลาดได้แม้ว่ามันจะสร้างคำตอบที่น่าจะเป็น หากรูปหลายเหลี่ยมทับซ้อนกันการเดิมพันทั้งหมดจะปิด แม้ว่าจะไม่มีการซ้อนทับ แต่ก็เป็นไปได้ที่เซนทรอยด์ของรูปหลายเหลี่ยมจะอยู่ในรูปหลายเหลี่ยมที่แตกต่างกัน (ไม่ทับซ้อนกัน) ความถูกต้องสามารถมั่นใจได้โดยทั่วไปเฉพาะเมื่อรูปหลายเหลี่ยมทั้งหมดใน A เป็นแบบไม่ทับซ้อนและนูน
whuber

+1 @ Diego - คำถามของคุณนำไปสู่การอภิปราย / อภิปรายที่น่าสนใจ หนึ่งที่น่าสนใจที่!
Dano

คำตอบ:


9

@Dano ยกประเด็นบางประเด็นที่แก้ไขได้ดีที่สุดในการตอบกลับแบบเต็ม

ปัญหาหนึ่งที่ @Celenius จดไว้แล้วคือการรวมกันระหว่าง B และ A (ในทิศทางใดทิศทางหนึ่ง) จะทำซ้ำฟิลด์ทั้งหมด มันอาจเป็นเรื่องยากที่จะแก้ไขสิ่งนี้ ฉันได้แนะนำในความคิดเห็นว่าวิธีง่าย ๆ ที่ชัดเจน (ส่งออกไปยังสเปรดชีต) ทำให้เกิดคำถามเกี่ยวกับความถูกต้องของข้อมูล ปัญหาอีกประการหนึ่งที่ได้รับการเสนอโดย Celenius แล้วข้อกังวลเกี่ยวกับการแก้ปัญหานี้เมื่อไม่มีการรวมกันของคุณลักษณะที่สามารถทำหน้าที่เป็นกุญแจสำคัญสำหรับทั้ง A และ B เพราะที่จรรยาบรรณเข้าร่วมฐานข้อมูล การรวมเชิงพื้นที่จะช่วยแก้ปัญหานั้นได้

อะไรคือทางออกที่ดี? วิธีการหนึ่งใช้ A เพื่อระบุระเบียนที่เกี่ยวข้องของ B ที่มีข้อมูลที่ต้องการ ขึ้นอยู่กับสมมติฐานเกี่ยวกับการกำหนดค่าของรูปหลายเหลี่ยม - ไม่ว่าจะทับซ้อนกันหรือไม่บางคนสามารถมีคนอื่น ๆ ฯลฯ - สิ่งนี้สามารถดำเนินการได้หลายวิธี: การใช้ชั้นหนึ่งเพื่อเลือกวัตถุในอื่น ๆ หรือผ่านการรวม จุดนี่คือสิ่งที่เราต้องการทำในขั้นตอนนี้คือเลือกเซตย่อยของ B ที่สอดคล้องกับ A

หลังจากประสบความสำเร็จเลือกที่ส่งออกเลือกและปล่อยให้มันเข้ามาแทนที่เอ เสร็จสิ้น

วิธีแก้ปัญหานี้อนุมานว่าเขตข้อมูลทั้งหมดใน B มีวัตถุประสงค์เพื่อแทนที่คู่ของพวกเขาใน A หากไม่จำเป็นต้องดำเนินการรวม 1-1 ของ B (แหล่งที่มา) เป็น A (ปลายทาง) เข้าร่วมขึ้นอยู่กับตัวบ่งชี้ที่ดีที่สุดคือ แต่ทำให้การเข้าร่วมในตัวตนของรูปหลายเหลี่ยม (Celenius) ทำงานได้ดีหากมี ID ที่ไม่พร้อมใช้งานและมีโอกาสรูปร่างรูปหลายเหลี่ยมใน A และ B ที่สอดคล้องกันอาจแตกต่างกันไม่มี แต่เล็กน้อย (นี่คือจุดที่บอบบางและสาเหตุที่เป็นไปได้ของข้อผิดพลาดร้ายกาจเนื่องจากการแก้ไขก่อนหน้านี้ใน B เป็นรูปหลายเหลี่ยมที่ไม่สอดคล้องกับ A ยังคงสามารถแก้ไขรูปหลายเหลี่ยมอื่น ๆ ใน B ถ้า GIS คือ "snapping" หรือ "การบำรุงรักษาโครงสร้าง" หรือทำการเปลี่ยนแปลงทั่วโลกโดยอัตโนมัติระหว่างการแก้ไขในเครื่อง)

ในช่วงหัวเลี้ยวหัวต่อนี้มีสำเนาของทุกฟิลด์สองชุด: ถ้า [Foo] เป็นเขตข้อมูลร่วมไปยัง A และ B ดังนั้นการรวมจะมี A. [Foo] และ B [Foo] ใช้การคำนวณภาคสนามคัดลอก B. [Foo] ลงใน A. [Foo] ทำซ้ำสำหรับฟิลด์ที่จำเป็นทั้งหมด หลังจากเสร็จสิ้นให้ลบการเข้าร่วม

แม้ว่าขั้นตอนนี้จะค่อนข้างยุ่งยากเมื่อมีหลายเขตข้อมูลที่เกี่ยวข้องข้อดีของมันรวมถึง

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

หลักการชี้นำบางประการที่เกี่ยวข้องในข้อเสนอแนะนี้คือ

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

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


+1 @ whuber - เห็นได้ชัดว่าคุณพยายามชั่งน้ำหนักตัวแปรทั้งหมดที่นี่ คำตอบที่คิดออกดี โปรดดูส่วนเพิ่มเติมของคำตอบเดิมของฉันเนื่องจากฉันจะมีพื้นที่เหลืออยู่ในกล่องความคิดเห็น
Dano

1
สำหรับคนที่สงสัยว่าเกิดอะไรขึ้นกับ "Celenius" กล่าวถึงสถานที่ต่างๆในกระทู้นี้: ตอนนี้รู้ว่าเป็น @djq และ / คำตอบของเขาและเธอเป็นที่นี่ ขอชื่นชมเครื่อง wayback: web.archive.org/web/20120127210858/http://gis.stackexchange.com/…
matt wilkie

5

ใน Arcmap คุณสามารถเข้าร่วมรูปหลายเหลี่ยม B ถึงรูปหลายเหลี่ยม A สิ่งนี้จะเกี่ยวข้องกับคุณลักษณะ เนื่องจากชื่อฟิลด์จะเหมือนกันมันจะสร้างชุดค่าผสมใหม่บางส่วนของชื่อ


นี่คือสิ่งที่ฉันจะใส่ ในสายตาของฉันคำตอบสั้น ๆ นี้คือคำตอบที่ถูกต้อง
Simon

4

ส่งออกตารางสำหรับ Shapefile "B" ไปยัง Excel และลบคอลัมน์ที่ซ้ำซ้อนและคอลัมน์ใด ๆ ที่มีข้อมูลที่คุณไม่ต้องการ ตรวจสอบให้แน่ใจว่าคุณเก็บคอลัมน์ตัวระบุที่ใช้ร่วมกันไว้แล้วบันทึกลงในโฟลเดอร์ที่เหมาะสม ไปใน ArcMap เพิ่มตารางแล้วเมาส์ขวาบน Shapefile "A" และดำเนินการตารางเข้าร่วม ลิงก์ควรนำไปสู่วิดีโอเกี่ยวกับวิธีการทำเช่นนี้


@ whuber - วิธีการทั้งหมดเป็นเสียงและสร้างความมั่นใจในความสมบูรณ์ของข้อมูล สิ่งเดียวที่ฉันสามารถบอกได้ว่าจะปฏิเสธคำตอบนี้ก็คือสถานการณ์ / โครงการบางอย่างไม่ทำให้เรามีเวลาหรืองบประมาณที่จะเป็นวิธีนี้ในแนวทางของเรา

ตัวอย่างชีวิตจริง:

บริษัท จูเนียร์ไมนิ่ง จำกัด กำลังนั่งอยู่บนวงล้อหลักด้วยเงินหลายร้อยล้านดอลลาร์ในเงินทุนที่วางอยู่บนความสามารถในการ "พิสูจน์" ทรัพยากร การทบทวนเดสก์ท็อปของสิ่งพิมพ์ / แผนที่ธรณีวิทยา / ข้อมูลนำไปสู่โปรแกรมเจาะที่มีเป้าหมายมากและมีราคาแพงมาก เมื่อการทดสอบกลับมาจากการเรียกใช้ครั้งแรกค่าเหล่านี้จะถูกแท็กไปยังตำแหน่งที่เกี่ยวข้องผ่านการเข้าร่วมตารางและปั๊มกลับออกมาในรูปแบบ Excel ที่มีการเตรียมข้อมูลอย่างระมัดระวังเพื่อนำเข้าสู่ DataMine (สำหรับการแก้ไขแบบ 3 มิติ)

จากประสบการณ์ของฉันนักธรณีวิทยาโครงการจำเป็นต้องให้ข้อมูลนี้ถูกเตรียมไว้ล่วงหน้าใน Excel ว่าเป็นไปตามกฎการจัดรูปแบบ / การประชุมทุกฉบับของจดหมาย (ไม่มีช่องว่างไม่มีอักขระพิเศษ ฯลฯ ) และไฟล์นำเข้า DataMine ถูกส่งในรูปแบบ. csv (ย้อนกลับไปแล้ว) สิ่งนี้จะนำไปสู่การลงทุนเพิ่มเติมในการขุดเจาะเป้าหมายและเราจะทบทวนกระบวนการ (ในบางกรณี) หลายครั้ง ทั้งหมดนี้เกิดขึ้นในช่วงเวลาที่ จำกัด และสำคัญยิ่ง

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


(-1) การใช้ Excel ในการเข้าร่วมไม่เพียง แต่ยากกว่าการใช้ GIS หรือ RDBMS เท่านั้น แต่ยังเชิญข้อผิดพลาดร้ายแรงด้วย
whuber

8
Excel นั้นใช้งานได้ง่ายและเนื่องจากอาจเป็นสาเหตุของข้อผิดพลาดที่ไม่ถูกตรวจพบและขายส่งได้มากกว่าซอฟต์แวร์ที่ผลิตขึ้นมา มันละเมิดหลักการพื้นฐานของ DBMS ที่ได้รับการพัฒนาเพื่อป้องกันข้อผิดพลาดที่ Excel ทำให้ง่ายเกินไปที่จะกระทำเช่น (1) การเรียงลำดับบางคอลัมน์ แต่ไม่ใช่คอลัมน์อื่น (2) ข้อผิดพลาดในการพิมพ์ที่เปลี่ยนชนิดข้อมูล (3) การกดแป้นที่หลงทางเพื่อลบล้างข้อมูล (4) การลบแถวหรือคอลัมน์โดยไม่ตั้งใจ (5) การแปลงข้อมูลที่ซ่อนอยู่เช่นข้อความเป็นวันที่; (6) การตัดข้อมูลที่ซ่อนอยู่ (7) การปัดเศษที่ซ่อนอยู่ของค่าตัวเลข; และอื่น ๆ อีกมากมาย.
whuber

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

3
... และเพื่อชดเชยความนิยมคำถามที่ยิ่งใหญ่คือการถามว่าทำไมการใช้ Excel เพื่อประมวลผลข้อมูลสามารถนำไปสู่ปัญหาร้ายแรงมาก และวิธีการใช้งานอย่างปลอดภัย
matt wilkie

1
(+1) สำหรับการแก้ไขที่รอบคอบและอธิบายอย่างดี @matt ตรวจสอบการสนทนาบน stats.stackexchange.com เกี่ยวกับสิ่งที่จะเป็นวิธีที่ดีในการทำงานกับชุดข้อมูลขนาดใหญ่ใน Excel? และ Excel เป็นสถิติที่ปรับแต่ง
whuber

1

ในช่วงปลายปี 1990 เราได้รับการอัปเดตจำนวนมากสำหรับแหล่งน้ำและแหล่งน้ำทั้งหมดของเราครอบคลุมแผ่นแผนที่ 55 NTS บางส่วนและคุณสมบัติมากมายที่ไม่ได้ขึ้นทะเบียน เราจำเป็นต้องรักษาคุณสมบัติที่เพิ่มคุณค่าของอุทกวิทยาเก่าของเรา (ชื่อทะเลสาบระดับพื้นผิว ฯลฯ ) และแทนที่รูปทรงเรขาคณิต เรขาคณิตของทั้งเก่าและใหม่นั้นใกล้พอที่เราจะรับประกันได้ว่า centroids ของรูปหลายเหลี่ยมแต่ละอันจะยังคงถูก จำกัด ขอบเขตโดยรูปหลายเหลี่ยมใหม่ - นี่เป็นจุดสำคัญโดยที่ความมั่นใจขั้นพื้นฐานวิธีการด้านล่างนี้ไม่ใช่ความคิดที่ดี

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

  1. จาก * Layer_with_attributes * ลบรูปหลายเหลี่ยม แต่เก็บระเบียนในตาราง
  2. จาก * Layer_with_polys * คัดลอกและวางรูปทรงเรขาคณิตลงใน * Layer_with_attributes *
  3. ผสานและบันทึก

ดูที่นี่สำหรับคำอธิบายขยายมากขึ้นและสูตรสำหรับArcInfo-worksationฉันไม่แน่ใจว่ามันเป็นไปได้ใน Arcgis หรือ Qgis ที่ทันสมัยในการลบรูปทรงเรขาคณิตโดยไม่ต้องลบบันทึกคุณลักษณะของมันไปพร้อม ๆ กัน แต่เดี๋ยวก่อนในกรณีที่เป็นนี่คือแนวคิด


1

ฉันไม่แน่ใจ แต่บางที DBMS ของการดำเนินการความเท่าเทียมกันในฟิลด์รูปร่างใน SQL (?) ดูเหมือนว่าถ้ารูปทรงเรขาคณิตสองอันที่เหมือนกันตัว=ดำเนินการSQL ควรกลับจริง ( WHERE A.Shape = B.Shape)

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


ลักษณะST_Equalsวิธี (มาตรฐาน OGC) สามารถนำมาใช้สำหรับการนี้


0

ตามปกติ whuber ถูกต้อง คุณต้องคิดให้ละเอียดเกี่ยวกับกระบวนการของคุณ โดยเฉพาะอย่างยิ่งถ้าสิ่งเหล่านี้เป็นชุดข้อมูลขนาดใหญ่และการดำเนินการนี้จะดำเนินการหลายครั้งหรือข้อมูลนั้นมีความสำคัญต่อภารกิจ

พิจารณาข้อมูลและความรับผิดชอบของคุณ:

คุณทำอะไรลงไป

คุณกำลังทำอะไร?

คุณตั้งใจจะทำอะไร

และถามเสมอว่า: ทำไม


ทีนี้สำหรับคำตอบง่ายๆที่ตรงกับคำถามที่ถาม โปรดทราบว่ามีอย่างน้อย 5 วิธีในการทำสิ่งต่าง ๆ แต่มักจะเป็นวิธีที่ดีที่สุดวิธีเดียวเท่านั้น

สมมติว่า fullset มีทุกแอ็ตทริบิวต์ที่คุณต้องการให้อยู่ในเซ็ตย่อยและเซ็ตย่อยนั้นไม่ได้มีอะไรอยู่ใน fullset ยกเว้นข้อมูลที่ล้าสมัย

เดาว่าโทโพโลยีเซตย่อยตรงกับ fullset (รวมถึง Origin / Projection และ XY Tolerance)

1) ใช้ฟีเจอร์เพื่อชี้ไปที่ช่องทำเครื่องหมาย "ภายใน" ที่ทำเครื่องหมายและสร้างคลาสคุณลักษณะของจุดหรือรูปร่างไฟล์จากชุดย่อย

2) ใช้ Select by Spatial Join เพื่อค้นหารูปหลายเหลี่ยมทั้งหมดใน fullset ที่สอดคล้องกับเซ็ตย่อยตามคลาสฟีเจอร์ Point หรือ Shapefile ที่สร้างขึ้นใหม่

3) ส่งออกส่วนที่เลือกจากชุดเต็มและนั่นอาจเป็นชุดย่อยใหม่ของคุณ


0

แน่นอนว่าถ้ารูปหลายเหลี่ยม A เป็นส่วนย่อยของรูปหลายเหลี่ยม B วิธีที่ง่ายที่สุดคือการวนซ้ำผ่านรูปหลายเหลี่ยม A ให้ใช้ ID ที่อยู่ในรูปหลายเหลี่ยม A (และ B ถ้า A เป็นส่วนย่อยหรือ B) เพื่อค้นหาข้อมูลแถวใน รูปหลายเหลี่ยม B แล้วอัปเดตแถวในรูปหลายเหลี่ยม A

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