Створюєте тіні для будівництва за допомогою ArcGIS Desktop?


20

Як би ви створили будівельні тіні з будівельних слідів?
Я маю значення атрибутів для висот будівель.
Тому бажано, щоб розміри тіней залежали від цього.
Найкраща пропозиція, яку я знайшов за допомогою ArcGIS, - це тіні для крапель: http://blogs.esri.com/Support/blogs/mappingcenter/archive/2008/10/21/3d-effect-for-a-building-footprints.aspx


2
Код ArcMap / Python для рішення надається у продовженні на сайті 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)). Це легко зробити за допомогою петлі по краях.

Для світла при азимут через градуси ( до сходу від півночі) і висоти и градусів (від горизонту), тіні в точці Р з прогнозованими координатами (х, у) і висот ч (всього виражається в тих же одиницях , наприклад, метри), розташований при P '= (x - h sin (a) / tan (s), y - h cos (a) / tan (s)). Вам потрібно лише обчислити sin (a) / tan (s) та cos (a) / tan (s) один раз для всього шару, і для кожного багатокутника потрібно лише один раз помножити ці коефіцієнти на висоту, щоб отримати зрушення для кожна точкова тінь у полігоні. (Справжнє обчислювальне навантаження несе ГІС, а не ваш код, оскільки він утворює об'єднання всіх цих чотирикутників.)

Ось приклад ефекту. (Азимут і висота дещо змінилися в порівнянні з першою фігурою, але багатокутники та висоти будівлі - які змінюються - такі ж, як і раніше.)

Гарні тіні

Додаток

У відповідь на запит, ось код, який використовується для створення другого прикладу. Хоча майже ніхто не використовує цю мову (Avenue), він цілком може слугувати псевдокодом для створення рішення у вашому улюбленому ГІС. (На відміну від більшості псевдокодів, проте він був перевірений, фактично запустивши його. :-) Це так просто, що ніяких пояснень не потрібно; просто майте на увазі, що індексація починається з 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

Дякую за допомогу. Я зараз це підбираю. Будь-які приклади, як це здійснити?
Вісімдесят двадцять

5
@Eighty Я зізнаюся, що виконую цю роботу з обчисленням поля в ArcView 3: це просто, скрипт можна написати швидше, ніж потрібно для запуску ArcMap :-), і він виконується майже зовсім не за короткий час. ArcMap може вичитати файл виводу, якщо він захоче.
whuber

2
Я з нетерпінням чекаю побачення сценарію Python, який хтось збирає, щоб зробити цю роботу в ArcMap!
RyanKDalton-OffTheGridMaps

3

Я не думаю, що те, про що ти говориш (шукаєш), не може бути спроможним в arcmap (версія?)
Дивись це питання, ймовірно, обмеження, якого ти не хочеш.
Використовуючи розширення 3d Analyst та аркскен, ви можете додати світло, але все ж є деякі обмеження.
Існує деякий рух есрі з цього питання з міським інженером .
Прокрутіть вниз до розділу точності тіні.
Раніше я був пов'язаний з lightcape (який вийшов на пенсію, і я впевнений, що живе в 3dsmax).
Тепер шлях, ймовірно, пройде через продуктову лінійку інженерної візуалізації ...
3ds Макс


Дякую за окреслені мої варіанти, Бред. Я використовую Arc 10. Я не думаю, що мені обов'язково потрібне світло, мені просто потрібні 2D форми для сліду тіні, що з'єднує форму тіней з кутів будівлі, а не результат, який отримує тінь.
Вісімдесят двадцять

Я, мабуть, неправильно прочитав. Я думав, щоб отримати тінь за ростом, вам знадобиться джерело світла.
Бред Несом

2
Я думаю, що я можу змінити розмір тіньових фігур, просто використовуючи значення атрибутів, які я маю для висоти будівель? Моя проблема, здається, полягає у створенні тіні, яка є не тіньовою тінню, а тінню, яка насправді пов'язана з кутами будівельної площі.
Вісімдесят двадцять

1

Розширення 3D Analyst має деякі інструменти ( Skyline і Skyline Barrier ) для створення силуетів і об'ємів тіней, але це в контексті проектування на вертикальну площину, як на горизонті, тому я не впевнений, як і чи можна це легко адаптувати до цього випадку (виступає проти горизонтальної площини, землі).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.