สร้างรูปหลายเหลี่ยม Thiessen ถ่วงน้ำหนัก?


17

ฉันมีไฟล์รูปร่างจุดและฉันสร้างรูปหลายเหลี่ยม Thiessen (Voronoi) โดยทางโปรแกรมโดยใช้ไวยากรณ์สคริปต์นี้:

CreateThiessenPolygons_analysis (in_features, out_feature_class, fields_to_copy) 

อย่างไรก็ตามแต่ละจุดมีความสัมพันธ์กับพื้นที่ (เช่นขนาดที่ต้องการของรูปหลายเหลี่ยมแต่ละรูป) และฉันต้องการให้รูปหลายเหลี่ยมของ Thiessen มีน้ำหนักตามเขตข้อมูลนี้

เป็นไปได้และอย่างไร

มีรหัสที่เกี่ยวข้องใน VBA หรือไม่

คำตอบ:


15

มีหลายวิธีในการกำหนดระยะทางในการสร้าง Thiessen polygons แนวคิดพื้นฐานในการสร้างมันขึ้นอยู่กับการเปรียบเทียบระยะห่างระหว่างจุดตามอำเภอใจxและจุดคงที่สองจุดpและq ; คุณต้องตัดสินใจว่าxใกล้เคียงกับpมากกว่าqหรือไม่ ด้วยเหตุนี้เราจึงพิจารณาระยะทาง dp = d ( x , p ) และ dq = d ( x , q ) น้ำหนักมักจะเกิดขึ้นในสองวิธี: คะแนนจะได้รับน้ำหนักเป็นบวกจำนวนน้ำหนัก wp และ wq และระยะทางที่ตัวเองสามารถเปลี่ยนได้

เพื่อความสมเหตุสมผลการแปลง (ซึ่งฉันจะเขียนเป็นf ) ควรเพิ่มขึ้นเมื่อระยะทางเพิ่มขึ้น นั่นคือ f (d ')> f (d) เมื่อใดก็ตามที่ d'> d> = 0 ตัวอย่างของการแปลงดังกล่าวคือ f (d) = d + 1, f (d) = d ^ 2 (กฎของแรงโน้มถ่วงขายปลีกของเรลลี ), f (d) = 1 - 1 / d (สมมติว่าระยะทางทั้งหมดน้อยกว่า 1), f (d) = log (d), f (d) = exp (d) -1

จากนั้นเราจะบอกว่าxเป็น "ใกล้" ถึงpมากกว่าqเมื่อใด

f (d ( x , p )) / wp <f (d ( x , q )) / wq

สังเกตการหารด้วยตุ้มน้ำหนักมากกว่าการคูณ: นี่หมายถึงตุ้มน้ำหนักขนาดใหญ่มีแนวโน้มที่จะ "ดึง" คะแนนที่ระยะไกล คุณจะเห็นสิ่งนี้ในตัวอย่างการรันด้านล่าง

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

  1. สำหรับแต่ละจุดอินพุตpให้คำนวณตารางระยะทางแบบยุคลิด [d (p)]

  2. ใช้ Map Algebra เพื่อใช้fและตุ้มน้ำหนักซึ่งจะแสดงตารางระยะทางแต่ละอันใหม่เป็น

    [fp] = f ([d (p)]) / wp

    นี่คือตัวอย่างการใช้ f (d) = 100 + d ^ (3/2); มาตราส่วนคือ 400 คูณ 600

    รูปที่ 1

    เมื่อ f (d) เพิ่มค่าจะมืดลง เห็นได้ชัดว่าระยะทางในตัวอย่างนี้เกี่ยวข้องกับจุดสีแดงกลาง อีกสี่จุดจะได้รับการคำนวณระยะทางแยกต่างหาก (ไม่แสดง) พื้นที่ของจุดเป็นสัดส่วนกับน้ำหนักของพวกเขาซึ่ง ได้แก่ 2, 10, 3, 4 และ 5

  3. คำนวณค่าต่ำสุดในพื้นที่ของกริดทั้งหมดเหล่านี้ [fp] เรียกสิ่งนี้ว่า [f] นี่คือตัวอย่าง

    รูปที่ 2

  4. โดยการเปรียบเทียบ [f] กับแต่ละ [fp] กับแต่ละเซลล์กริดกำหนดตัวระบุของpแรกที่ [f]> = [fp] (สามารถทำได้ในขั้นตอนเดียวโดยมีการดำเนินการตำแหน่งต่ำสุดเป็นต้น)

    รูปที่ 3

    (ฉันสงสัยว่ามีอัลกอริทึมอยู่ที่ใดที่จะคำนวณโซลูชันเวกเตอร์รูปแบบสำหรับฟังก์ชันการถ่วงน้ำหนักนี้ f)

แน่นอนถ้าคุณมีมากกว่ากำมือของจุดPคุณจะสคริปต์นี้และถ้าจำนวนวิ่งของพวกเขาเป็นพันคุณอาจจะละทิ้งความพยายามที่เป็นไปไม่ได้คอมพิวเตอร์ (แม้ว่าจะมีวิธีการที่จะเร่งการคำนวณโดยการปูกระเบื้องมัน)

อีกตัวอย่างหนึ่งที่แสดงให้เห็น Thiessen รูปหลายเหลี่ยมบนรีปรากฏที่/gis//a/17377/


3
+1 ฉันไม่เคยรู้เลยว่าปัญหานี้จะเกิดขึ้นได้ง่ายเพียงใดโดยใช้วิธีการแบบแรสเตอร์
Kirk Kuykendall

Whuber: กระบวนการที่ซับซ้อนมาก! อย่างไรก็ตามการมุ่งเน้นไปที่ applciation ของฉันแต่ละจุดของไฟล์อินพุตของฉันแสดงถึง centoid โดยประมาณของผืนที่ดิน ฉันสร้างโดยใช้บรรทัดสคริปต์ดังกล่าวข้างต้นไฟล์เวกเตอร์รูปหลายเหลี่ยม Thiessen รูปหลายเหลี่ยมแต่ละอันได้รับการกำหนดพื้นที่เช่นขนาดตามหลักการรูปหลายเหลี่ยมของ Thiessen ที่มีระยะห่างเท่ากันในทางกลับกันที่ดินแต่ละผืนมีขนาดที่กำหนดไว้ล่วงหน้าซึ่งมีให้ในเขตพื้นที่ และนี่คือปัจจัยที่ฉันต้องการนำมาพิจารณาดังนั้นรูปหลายเหลี่ยมจะเป็นสัดส่วนกับปัจจัยนี้ มีความคิดอะไรมั้ย
Demetris

ฉันไม่เข้าใจคำพูดของคุณ Demetris พวกเขาดูเหมือนว่าคุณต้องการ cartogram ของพื้นที่แทนที่จะเป็นรูปหลายเหลี่ยมของ Thiessen มันจะช่วยอธิบายว่าทำไมคุณจึงคำนวณรูปหลายเหลี่ยมเหล่านี้ พวกเขาจะแก้ปัญหาอะไร พวกเขาจะถูกตีความอย่างไร
whuber

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

อัลกอริทึมทางพันธุกรรมของคุณพยายามทำอะไร ยังคงดูเหมือนว่าคุณไม่ต้องการรูปหลายเหลี่ยม Thiessen ที่มีน้ำหนัก: ฉันเชื่อว่าไม่มีน้ำหนักที่เป็นไปได้ที่จะรับรองรูปหลายเหลี่ยมที่จะได้รับพื้นที่ที่กำหนดไว้ล่วงหน้าหรือแม้กระทั่งพื้นที่ที่เกี่ยวข้องก่อนกำหนด
whuber

10

สิ่งที่คุณต้องการคือแผนภาพ Voronoi แบบถ่วงน้ำหนัก: http://en.wikipedia.org/wiki/Weighted_Voronoi_diagram ยังรู้ว่าเป็นแบบวงกลม Dirichlet tessellation เมื่อเสร็จสิ้นด้วยน้ำหนักแบบทวีคูณในระนาบ 2 มิติ ดูเหมือนว่ามีคนสร้างส่วนขยาย arcgis 9 เพื่อสร้างสิ่งต่อไปนี้: http://arcscripts.esri.com/details.asp?dbid=15481 มีคู่มือผู้ใช้อยู่ที่นี่ http://geography.unt.edu/~pdong/software .htm และบทความที่ตีพิมพ์ที่ Dong, P. , 2008. การสร้างและปรับปรุงไดอะแกรม Voronoi ถ่วงน้ำหนักแบบหลายจุดสำหรับคุณลักษณะจุด, เส้นและรูปหลายเหลี่ยมใน GIS คอมพิวเตอร์และธรณี, เล่มที่ 34, ฉบับที่ 4, หน้า 411-421

มีบทความล่าสุดเกี่ยวกับอัลกอริทึมที่ใช้เวกเตอร์ (ฉันถือว่าอัลกอริทึมของ P Dong นั้นเป็นแบบราสเตอร์) สำหรับเรื่องนี้ http://www.sciencedirect.com/science/article/pii/S0098300411003037 บทคัดย่อกล่าวว่ามีรหัส c # อยู่ด้วย


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