¿Producir sombras de edificios utilizando ArcGIS Desktop?

19

¿Cómo generarías sombras de construcción a partir de huellas de edificios?
Tengo valores de atributo para las alturas de los edificios.
Por lo tanto, preferiría que el tamaño de las sombras varíe en función de eso.
La mejor sugerencia que he encontrado al usar ArcGIS es las sombras: enlace

    
pregunta EightyTwenty 22.11.2011 - 18:59

3 respuestas

23

Un método rápido y sucio es dibujar solo las sombras de los techos del edificio, renderizarlas en gris oscuro (preferiblemente semitransparentes si hay alguna capa subyacente) y dibujar los polígonos del edificio. sobre ellos. Las sombras del techo se obtienen al traducir los polígonos del edificio por las distancias determinadas por las alturas del edificio en la dirección establecida por el azimut y la altitud de la fuente de luz (que se considera que está infinitamente lejos). (Una fórmula para la cantidad de traducción aparece a continuación.)

Estotiendeafuncionarbien,exceptoenaltitudesbajasoedificiosaltos(comorascacielos):veacómolassombrasdelosedificiosaisladosmásaltosenelladoderechoestánseparadosdelosedificiosmismos.

Paraconectarcorrectamentelassombrasalosedificios,debesincluirlassombrasdelasparedesdeledificio.Estonoesdifícildehacer.LasombradelmuroqueseextiendeentreunpuntoubicadoenPyotropuntoubicadoenQseráelcuadriláterodelineadopor{P,Q,Q',P'},dondeQ'eslasombradeQyP'eslasombradeP.Unedificiopoligonalseráunacoleccióndepolígonosconectadosrepresentadosporsecuenciascerradasdepuntos(P(1),P(2),...,P(n)).Paracadaunodeestospolígonos,formelaunióndelassombrasdelosbordes(P(1),P(2)),(P(2),P(3)),...,(P(n),P(1)).Estoessencillodehacerpormediodeunbuclesobrelosbordes.

Paraunaluzenunacimutdeagrados(estedenorte)yunaaltituddesgrados(desdeelhorizonte),lasombradeunpuntoPconLascoordenadasproyectadas(x,y)ylaalturah(todasexpresadasenlasmismasunidades,comometros)seubicanenP'=(x-hsin(a)/tan(s),y-hcos(a)/tan(s)).Solotienequecalcularsin(a)/tan(s)ycos(a)/tan(s)unavezparatodalacapa,yparacadapolígonosolotienequemultiplicaresosfactoresporlaalturaunavezparaobtenerlascompensacionesparaCadapuntodesombraenelpolígono.(LacargadetrabajocomputacionalrealesllevadaporelSIG,noporsucódigo,yaqueformalasunionesdetodosestoscuadriláteros).

Aquíhayunejemplodelefecto.(Elazimutylaaltitudhancambiadoligeramenteencomparaciónconlaprimerafigura,perolospolígonosylasalturasdeledificio,quevarían,sonlosmismosqueantes).

Apéndice

En respuesta a una solicitud, aquí está el código utilizado para crear el segundo ejemplo. Aunque ya casi nadie usa este lenguaje (Avenue), podría servir como pseudocódigo para crear una solución en su SIG favorito. (Sin embargo, a diferencia de la mayoría de los pseudocódigos, se ha probado ejecutándolo. :-) Es tan simple que no se necesita una explicación; solo tenga en cuenta que la indexación comienza con 0, no con 1, y que los anillos de polígonos se cierran explícitamente (el último punto de la lista coincide con el primer punto).

' 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 = [email protected]
'
' 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
    
respondido por el whuber 22.11.2011 - 21:11
3

No creo que lo que estás hablando (buscando) sea una capacidad de ejecución en arcmap (versión?)
Consulte esta pregunta para probablemente la limitación que no estás deseando.
Utilizando extensión Analyst 3d y arcscene puede agregar luz pero todavía hay algunas limitaciones.
Hay algún movimiento de esri al respecto con cityengine .
Desplácese hasta la sección de precisión de sombra.
Anteriormente he estado asociado con lightscape (que ha sido retirado y estoy seguro de que vive dentro de 3dsmax).
Ahora, el camino probablemente sería a través de la línea de productos de visualización de ingeniería ...
3ds Max

    
respondido por el Brad Nesom 22.11.2011 - 19:26
1

La extensión 3D Analyst tiene algunas herramientas ( Skyline y Skyline Barrier ) para producir siluetas y volúmenes de sombras, pero es en el contexto de proyectarse contra un plano vertical como en un horizonte, por lo que no estoy seguro de cómo o si podría adaptarse fácilmente a este caso (proyectar contra un plano horizontal, el suelo).

    
respondido por el blah238 23.11.2011 - 00:36

Lea otras preguntas en las etiquetas