จะสร้างจุดสุ่มนอกรูปหลายเหลี่ยมได้อย่างไร


11

เครื่องมือสร้างจุดสุ่มสามารถสร้างจำนวนจุดที่แน่นอนภายในรูปหลายเหลี่ยม ฉันสงสัยว่ามีกล่องรับขอบเขตอยู่มีวิธีใดบ้างที่ฉันสามารถสร้างจุดสุ่มภายนอกรูปหลายเหลี่ยมเหล่านั้นได้

คำตอบ:


13

โดยส่วนตัวแล้วฉันไม่ชอบอัลกอริธึมจุดสุ่มใน ArcGIS หรือใช้ฟังก์ชั่นGeospatial Modeling Environment (GME) genrandompntsคุณจะสามารถระบุรูปหลายเหลี่ยมเฉพาะที่จุดสุ่มจะถูกแยกออก (ดูพื้นที่ที่เน้นใน. jpg ที่แนบมา) ดีที่สุดของซอฟต์แวร์นี้ฟรี

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

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


1
คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่คุณไม่ชอบอัลกอริธึมคะแนนสุ่มเริ่มต้นได้หรือไม่และทำไม GME ถึงเหมาะสมที่สุด
Stephen Lead

@Aaron Nice หนึ่ง! ยังไม่ได้ลองเพราะมันเป็นเครื่องมือสร้างแบบจำลองของ Hawth - ฉันจะต้องดาวน์โหลดและให้มันแตก!
om_henners

3
@ สตีเฟ่นภายในเดือนที่แล้วฉันได้รับคะแนนสุ่มจากสี่คลาส ฉันพบปัญหาหลายประการ: 1) ArcGIS ผลิตหลายจุดนอกรูปหลายเหลี่ยมอินพุตของฉัน 2) Arc มีช่วงเวลาที่ยากลำบากในการจัดการกับพื้นที่ที่เล็กเกินไปสำหรับพารามิเตอร์อินพุตของฉัน (เช่นระยะห่างต่ำสุดที่อนุญาต = 50m & คะแนน = 50) ในขณะที่ GME จัดการสิ่งเหล่านี้ ปัญหาโดยการสร้างคะแนนแบบสุ่มจนกระทั่งกฎถูกละเมิดจากนั้นจึงแสดงข้อความเตือน 3) RPG ของ Arc นั้นช้ากว่า GME เนื่องจากอาจใช้หน่วยความจำในท้องถิ่นของ R
แอรอน

ทำได้ดีนี่! มันมี python bounding เพื่อให้ฉันสามารถทำการประมวลผลแบบแบทช์ @Aaron ได้หรือไม่?
เห็น

2
@ ดูการตรวจสอบอัตโนมัติและส่วนการประมวลผลแบทช์ (p10) ในเอกสารสนับสนุน: spatialecology.com/gme/images/SpatialEcologyGME.pdf
Aaron

4

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


เพียงแค่ภาคผนวก: ด้วยสิทธิ์การใช้งาน ArcInfo คุณสามารถทำได้ด้วยเครื่องมือลบ
om_henners

3

ขอโทษฉันไม่สามารถต้านทานได้ เนื่องจากเป็นการดีเสมอที่จะรู้ว่าเกิดอะไรขึ้นภายใต้ประทุนกับบางสิ่งบางอย่างเช่น GME นี่คือวิธีแก้ปัญหาในรหัส R จริง

require(sp)
require(rgeos)

# Create example polygon data
x <- readWKT("POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))")
y <- readWKT("POLYGON ((3 3, 7 3, 7 7, 3 7, 3 3))")

# Calculate difference in polygon geometries to create null polygon
d <- gDifference(x,y)

# Create random sample in non-null polygon
rs <- spsample(d, 20, type="random")  

# Plot results  
plot(d, col="red")
  plot(rs,pch=19,col="black",add=TRUE)

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

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