ArcGIS Desktop kullanarak bina gölgeleri mi üretiyorsunuz?


20

Bina ayak izlerinden bina gölgeleri nasıl üretersiniz?
Binaların yükseklikleri için nitelik değerlerim var.
Bu nedenle, tercihen gölgelerin boyutlarının buna bağlı olarak değişmesini istersiniz.
ArcGIS kullanarak bulduğum en iyi öneri alt gölgeler: http://blogs.esri.com/Support/blogs/mappingcenter/archive/2008/10/21/3d-effect-for-a-building-footprints.aspx


2
Bir çözüm için ArcMap / Python kodu, gis.stackexchange.com/questions/19935/… adresinde devam etmektedir .
whuber

Bazı gölgeleme aygıtlarının gölgesini tanımlamak için ilk örnek olarak python kullanarak komut dosyası sağlayabilir misiniz. yanıtınız büyük beğeni topluyor

Yanıtlar:


23

Hızlı ve kirli bir yöntem sadece bina çatılarının gölgelerini çizmek, onları koyu gri yapmak (tercihen altta yatan zemin katmanları varsa yarı saydam) ve bina çokgenlerini üzerlerine çizmektir. Çatı gölgeleri, bina çokgenlerinin, bina yükseklikleri tarafından belirlenen ışık kaynağının azimutu ve rakımı (sonsuz uzakta olduğu düşünülen) tarafından belirlenen yönde çevrilerek elde edilir. (Çeviri miktarı için bir formül aşağıda görünür.)

Ham gölgeler

Bu, düşük rakımlar veya yüksek binalar (gökdelenler gibi) dışında iyi çalışma eğilimindedir: sağ taraftaki daha uzun izole binaların gölgelerinin binalardan nasıl ayrıldığını görün.

Gölgeleri binalara düzgün bir şekilde bağlamak için , bina duvarlarının gölgelerini eklemeniz gerekir . Bunu yapmak zor değil. P'de bulunan bir nokta ile Q'da bulunan başka bir nokta arasında uzanan duvarın gölgesi, {P, Q, Q ', P'} ile özetlenen dörtgen olacaktır; burada Q ', Q'nun ve P' nin gölgesi Çokgen bir bina, kapalı nokta dizileri (P (1), P (2), ..., P (n)) ile temsil edilen bağlı çokgenlerin bir koleksiyonu olacaktır. Bu tür çokgenler için, kenarların (P (1), P (2)), (P (2), P (3)), ..., (P (n), P ( 1)). Bu, kenarlar üzerinde bir ilmek vasıtasıyla yapılması kolaydır.

Bir derece azimutunda (kuzey doğusunda) ve s derecesinde (ufuktan) bir ışık için , öngörülen koordinatları (x, y) ve yüksekliği h olan (tümü aynı birimlerde ifade edilen ) bir P noktasının gölgesi , örneğin metre) P '= (x - h sin (a) / tan (lar), y - h cos (a) / tan (lar)) konumunda bulunur. Tüm katman için sin (a) / tan (s) ve cos (a) / tan (s) değerlerini yalnızca bir kez hesaplamanız gerekir ve her çokgen için ofsetleri elde etmek için bu faktörleri yükseklikle yalnızca bir kez çarpmanız gerekir. çokgendeki her nokta gölgesi. (Gerçek hesaplamalı iş yükü, tüm bu dörtgenlerin birliğini oluşturduğu için kodunuz değil, CBS tarafından taşınır.)

Etkinin bir örneği. (Azimut ve rakım ilk rakama göre biraz değişti, ancak bina çokgenleri ve yükseklikleri - değişkenlik - eskisi gibi.

İyi gölgeler

apandis

Bir isteğe yanıt olarak, ikinci örneği oluşturmak için kullanılan kod aşağıdadır. Artık neredeyse hiç kimse bu dili (Avenue) kullanmasa da, en sevdiğiniz CBS'de bir çözüm oluşturmak için sözde kod olarak kullanılabilir. (Çoğu sahte kodun aksine, aslında çalıştırılarak test edilmiştir. :-) Çok basit bir açıklama gerekmeyecek; dizine eklemenin 1 değil 0 ile başladığını ve çokgen halkalarının açıkça kapalı olduğunu unutmayın (listedeki son nokta ilk nokta ile çakışır).

' 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
Halka delikli binalar bu algoritma ile nasıl görünüyor? Gerçek hayatta buna neden olacak azimut ve rakım değerleri göz önüne alındığında, gölgesiz bir alanın, örneğin bir avluda var olmasına izin veriyor mu?
blah238 23:11

2
@ Evet. Örneklerimde sol alt köşedeki bina grupları gibi bazı kısmi avluları görebilirsiniz.
whuber

Yardım için teşekkürler. Bunu şimdi alıyorum. Bunun nasıl uygulanacağına dair herhangi bir örnek var mı?
EightyTwenty

5
@Eighty ArcView 3'te bir alan hesaplaması ile bu işi yapmayı itiraf ediyorum: basit, biri ArcMap :-) başlatmak için gerekenden daha hızlı komut dosyası yazabilir ve neredeyse hiç zaman kaybetmeden çalışır. Çıktı şekil dosyası daha sonra isterseniz render için ArcMap tarafından okunabilir.
whuber

2
Birinin ArcMap'ta bu işi yapmak için bir araya getirdiği Python betiğini görmek için sabırsızlanıyorum!
RyanKDalton-OffTheGridMaps

3

Ben (ne arıyor) bahsettiğinizi arcmap (sürüm?) Bir yetenek olacağını düşünmüyorum Muhtemelen istemediğiniz sınırlama için
bu soruya bakın . 3D Analyst uzantısını ve arcscene'i
kullanarak ışık ekleyebilirsiniz, ancak yine de bazı sınırlamalar vardır. Cityengine ile ilgili bazı esri hareketi var . Gölge doğruluğu bölümüne ilerleyin. Daha önce (emekli oldu ve 3dsmax içinde yaşıyor eminim) lightscape ile ilişkili olmuştur. Şimdi yol muhtemelen mühendislik görselleştirme ürün serisinden geçiyordu ... 3ds Max





Seçeneklerimin ana hatları için teşekkürler Brad. Arc 10 kullanıyorum. Işığa ihtiyacım olduğunu düşünmüyorum, sadece gölge ayak izi için gölge şekillere gölge gölgenin ürettiği sonuçtan ziyade binanın köşelerinden bağlanmak için 2B şekillere ihtiyacım var.
EightyTwenty

Yanlış okumalıyım. Bir ışık kaynağının ürettiği gölgeye ihtiyacınız olan gölgeyi almayı düşündüm.
Brad Nesom

2
Sadece binaların yüksekliği için sahip olduğum özellik değerlerini kullanarak gölge şekillerinin boyutunu değiştirebileceğimi düşünüyorum. Benim sorunum, alt gölge değil, aslında bina ayak izinin köşelerine bağlı bir gölge oluşturmak gibi görünüyor.
SeksenTwenty

1

3D Analyst uzantısının, silüetler ve gölge hacimleri üretmek için bazı araçları ( Skyline ve Skyline Barrier ) var, ancak bir ufuk çizgisinde olduğu gibi dikey bir düzleme yansıtılması bağlamında, bu yüzden nasıl veya nasıl kolayca uyarlanabileceğinden emin değilim bu duruma (yatay bir düzleme, zemine doğru yansıtma).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.