ผลิตเงาอาคารโดยใช้ ArcGIS Desktop หรือไม่


20

คุณจะสร้างเงาอาคารจากสิ่งปลูกสร้างได้อย่างไร
ฉันมีค่าคุณลักษณะสำหรับความสูงของอาคาร
ดังนั้นโดยเฉพาะอย่างยิ่งต้องการให้ขนาดของเงาแตกต่างกันไปตามนั้น
คำแนะนำที่ดีที่สุดที่ฉันพบในการใช้ ArcGIS คือ drop shadows: http://blogs.esri.com/Support/blogs/mappingcenter/archive/2008/10/21/3d-effect-for-a-building-footprint.aspx


2
รหัส ArcMap / งูใหญ่สำหรับการแก้ปัญหาที่มีให้ในการต่อเนื่องที่gis.stackexchange.com/questions/19935/...
whuber

คุณช่วยให้สคริปต์ใช้ python เป็นตัวอย่างแรกได้ไหมเพราะฉันต้องระบุสีของอุปกรณ์บังแดดบางตัว คำตอบของคุณได้รับการชื่นชมอย่างมาก

คำตอบ:


23

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

เงาที่หยาบ

สิ่งนี้มีแนวโน้มที่จะทำงานได้ดียกเว้นอาคารสูงหรืออาคารสูง (เช่นตึกระฟ้า): ดูว่าเงาของอาคารสูงที่แยกได้ทางด้านขวามือแยกออกจากตัวอาคารอย่างไร

ในการเชื่อมต่อเงากับอาคารได้อย่างถูกต้องคุณต้องรวมเงาของกำแพงอาคาร ไม่ยากที่จะทำ เงาของกำแพงที่ขยายระหว่างจุดที่ตั้งอยู่ที่ P และอีกจุดหนึ่งที่ตั้งอยู่ที่ Q จะเป็นรูปสี่เหลี่ยมขนมเปียกปูนโดย {P, Q, Q ', P'} โดยที่ Q 'เป็นเงาของ Q และ P' คือเงาของ P. อาคารรูปหลายเหลี่ยมจะเป็นการรวมกันของรูปหลายเหลี่ยมที่เชื่อมต่อซึ่งแสดงด้วยลำดับของจุดปิด (P (1), P (2), ... , P (n)) สำหรับรูปหลายเหลี่ยมดังกล่าวให้สร้างเงาของขอบ (P (1), P (2)), (P (2), P (3)), ... , (P (n), P ( 1)) นี่เป็นเรื่องง่ายที่จะทำโดยใช้วิธีวนรอบขอบ

สำหรับแสงที่มุมราบหนึ่งองศา (ทิศตะวันออกเฉียงเหนือ) และระดับความสูงs (จากขอบฟ้า) เงาของจุด P ที่มีพิกัดฉาย (x, y) และความสูงh (ทั้งหมดแสดงในหน่วยเดียวกัน เช่นเมตร) ตั้งอยู่ที่ P '= (x - h sin (a) / tan (s), y - h cos (a) / tan (s) คุณต้องคำนวณ sin (a) / tan (s) และ cos (a) / tan (s) หนึ่งครั้งสำหรับเลเยอร์ทั้งหมดและสำหรับแต่ละรูปหลายเหลี่ยมคุณต้องคูณปัจจัยเหล่านั้นด้วยความสูงเพียงครั้งเดียวเพื่อให้ได้ค่าออฟเซ็ตสำหรับ แต่ละจุดเงาในรูปหลายเหลี่ยม (เวิร์กโหลดการคำนวณที่แท้จริงนั้นดำเนินการโดย GIS ไม่ใช่รหัสของคุณเนื่องจากเป็นรูปแบบสหภาพของรูปสี่เหลี่ยมทั้งสี่เหล่านี้)

นี่คือตัวอย่างของผลกระทบ (ราบและระดับความสูงมีการเปลี่ยนแปลงเล็กน้อยเมื่อเทียบกับรูปแรก แต่รูปหลายเหลี่ยมอาคารและความสูง - ซึ่งแตกต่างกัน - เป็นเหมือนก่อนหน้านี้)

เงาดี

ภาคผนวก

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

' S
' Return the shadow of a shape.

' Field calculator example:
' av.run("S", {[shape], [height], 200, 35})
'======================================================================'
theShape = SELF.Get(0) ' A projected polygon
xHeight = SELF.Get(1)  ' Expressed in the projected units
xAzimuth = SELF.Get(2).AsRadians  ' Any angle (in degrees) east of north
xAltitude = SELF.Get(3).AsRadians ' Angle between 0 and 90 (vertical)
'
' Compute the shadow offsets.
'
xSpread = 1/xAltitude.Tan
x = -xHeight * xSpread * xAzimuth.Sin
y = -xHeight * xSpread * xAzimuth.Cos
xy = x@y
'
' Begin with the original shape.
'
p = theShape.Clone
'
' Adjoin the wall shadows.
'
for each lPts in theShape.AsList   ' Loop over the rings
  for each i in 1..(lPts.Count-1)  ' Loop over edges in this ring
    l = {lPts.Get(i-1), lPts.Get(i), lPts.Get(i)+xy, lPts.Get(i-1)+xy}
    p = p.ReturnUnion(Polygon.Make({l}))
  end
end
return p
' end of script

1
อาคารที่มีหลุมโดนัทมีลักษณะอย่างไรด้วยอัลกอริทึมนี้? มันอนุญาตให้พื้นที่ที่ไม่มีเงาอยู่ในลานสนามหญ้าหรือไม่บอกว่ามีลานราบที่ได้รับค่าแอซิมัทและระดับความสูงที่จะทำให้เกิดขึ้นในชีวิตจริงหรือไม่?
blah238

2
@Blah ใช่ คุณสามารถเห็นบางส่วนของสนามหญ้าในตัวอย่างของฉันเช่นกลุ่มอาคารที่มุมซ้ายล่าง
whuber

ขอบคุณสำหรับความช่วยเหลือ ฉันแค่หยิบมันขึ้นมาตอนนี้ ตัวอย่างใด ๆ ของวิธีการใช้นี้?
EightyTwenty

5
@ แปดฉันยอมรับที่จะทำงานนี้ด้วยการคำนวณภาคสนามใน ArcView 3: มันง่ายมากที่เราสามารถเขียนสคริปต์ได้เร็วกว่าที่จะใช้ในการเริ่มต้น ArcMap :-) และมันก็ดำเนินการในเวลาเกือบทั้งหมด Shapefile เอาต์พุตสามารถอ่านได้โดย ArcMap สำหรับการเรนเดอร์ถ้าคุณต้องการ
whuber

2
ฉันรอคอยที่จะได้เห็นสคริปต์ Python ที่ทุกคนรวมตัวกันเพื่อทำให้งานนี้ใน ArcMap!
RyanKDalton-OffTheGridMaps

3

ฉันไม่คิดว่าสิ่งที่คุณกำลังพูดถึง (มองหา) จะเป็นความสามารถในการ arcmap (รุ่น?)
ดูคำถามนี้สำหรับข้อ จำกัด ที่คุณไม่ต้องการ
การใช้ส่วนขยายนักวิเคราะห์ 3 มิติและarcsceneคุณสามารถเพิ่มแสงได้ แต่ก็ยังมีข้อ จำกัด อยู่บ้าง
มีบางอย่างเคลื่อนไหว ESRI เกี่ยวกับเรื่องนี้ด้วยคือCityEngine
เลื่อนลงไปที่ส่วนความแม่นยำของเงา
ก่อนหน้านี้ฉันเคยเกี่ยวข้องกับ lightscape (ซึ่งถูกปลดออกและฉันมั่นใจว่ามีชีวิตอยู่ภายใน 3dsmax)
ตอนนี้เส้นทางอาจจะผ่านสายการสร้างภาพข้อมูลวิศวกรรม ...
3ds Max


ขอบคุณสำหรับร่างของตัวเลือกของฉันแบรด ฉันกำลังใช้อาร์ค 10 ฉันไม่คิดว่าฉันจำเป็นต้องมีแสงสว่างฉันแค่ต้องการรูปทรง 2 มิติสำหรับรอยเงาเงาที่เชื่อมต่อรูปร่างเงาจากมุมของอาคารแทนที่จะเป็นผลที่เกิดจากเงาตก
EightyTwenty

ฉันต้องอ่านผิด ฉันคิดว่าจะได้รับเงาโดยความสูงคุณจะต้องสร้างโดยแหล่งกำเนิดแสง
Brad Nesom

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

1

ส่วนขยายนักวิเคราะห์ 3 มิติมีเครื่องมือบางอย่าง ( SkylineและSkyline Barrier ) สำหรับการผลิตเงาและปริมาณเงา แต่ในบริบทของการฉายภาพกับระนาบแนวตั้งเหมือนกับในเส้นขอบฟ้าดังนั้นฉันไม่แน่ใจว่าจะปรับได้ง่ายหรือไม่ ในกรณีนี้ (ฉายกับระนาบแนวนอน, พื้นดิน)

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