Как бы вы генерировали тени здания от следов здания?
У меня есть значения атрибутов для высоты зданий.
Поэтому желательно, чтобы размеры теней варьировались в зависимости от этого.
Лучшее предложение, которое я нашел с помощью ArcGIS - это тени от теней: http://blogs.esri.com/Support/blogs/mappingcenter/archive/2008/10/21/3d-effect-for-a-building-footprints.aspx
arcgis-desktop
arcmap
polygon-creation
shadow
EightyTwenty
источник
источник
Ответы:
Быстрый и грязный метод состоит в том, чтобы нарисовать тени только крыш зданий, сделать их темно-серыми (желательно полупрозрачными, если есть нижележащие слои грунта) и нарисовать полигоны зданий над ними. Тени крыши получают путем перевода полигонов здания на расстояния, определяемые высотой здания, в направлении, определяемом азимутом и высотой источника света (считается бесконечно далеко). (Формула суммы перевода приведена ниже.)
Это работает нормально, за исключением небольших высот или высоких зданий (таких как небоскребы): посмотрите, как тени от более высоких изолированных зданий на правой стороне отделены от самих зданий.
Чтобы правильно соединить тени со зданиями, необходимо включить тени от стен здания . Это не сложно сделать. Тень стены, проходящей между точкой, расположенной в точке 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, и что кольца многоугольников явно замкнуты (последняя точка в списке совпадает с первой точкой).
источник
Я не думаю, что то, о чем вы говорите (ищите), будет возможностью в arcmap (версия?).
Посмотрите на этот вопрос, возможно, для ограничения, которое вам не нужно.
Используя расширение 3d Analyst и arcscene, вы можете добавить свет, но есть некоторые ограничения.
Есть некоторое движение esri по этому вопросу с cityengine .
Прокрутите вниз до раздела точности тени.
Ранее я был связан с lightcape (который был удален, и я уверен, что живет внутри 3dsmax).
Теперь путь, вероятно, будет через линейку продуктов технической визуализации ...
3ds Max
источник
Расширение 3D Analyst имеет несколько инструментов ( Skyline и Skyline Barrier ) для создания силуэтов и теней, но оно находится в контексте проецирования на вертикальную плоскость, как на горизонте, поэтому я не уверен, как или можно ли его легко адаптировать. к этому случаю (проецирование против горизонтальной плоскости, земли).
источник