Получение информации о высотах для контуров зданий
Обзор
Готовые наборы данных с контурами зданий встречаются очень часто. Вытягивание этих контуров позволяет быстро получить 3D здания, которые затем можно использовать в ArcGlobe или в ArcScene. Во многих случаях, информация о высоте может уже быть ассоциирована с этими полигонами. Она может быть представлена как количество этажей здания, абсолютная высота вытягивания или высота относительно земли. Или, может оказаться, что данные о высотах необходимо получить где-то еще, чтобы создать 3D здания. Если у вас имеются данные первых точек лидара, вы можете определить либо высоту крыши здания, либо высоту здания относительно земли.
В этом руководстве показано, как получить значения высот крыш зданий для контуров, используя первые точки лидара.
Создание растровой поверхности высот по данным лидара
Сначала, конвертируйте данные лидара в растровую поверхность высот. В руководстве Создание растровых ЦМР (DEM) и ЦМП по большим наборам точек лидаров описан процесс создания растровой поверхности высот. При создании поверхности высот, убедитесь, что выбранный размер ячеек подходит для определения высот зданий. Размер ячеек должен быть достаточно мал, чтобы по значениям высот вдоль контура здания можно было определить, что является частью здания, а что – нет. Обычно, ячеек размером 1 метр достаточно.
Определение высот зданий по случайным точкам
Теперь, когда у вас есть слой высот, необходимо определить высоты зданий, используя случайную выборку. Первый шаг – сгенерировать набор случайных точек для каждого контура здания. Вы можете использовать инструмент геообработки Создать произвольно расположенные точки (Create Random Points), чтобы получить набор случайных опорных точек, распределенных по контурам зданий и связанных с их уникальными идентификаторами. Число точек, которое следует создать для каждого контура, зависит только от вашего желания. Чем больше точек, тем более точным будет значение средней высоты, и тем больше времени понадобится на обработку. При задании минимально допустимого расстояния между точками, имейте в виду, что оно не должно быть меньше размера ячеек растра. Если оно будет меньше, это может привести к пересчету некоторых значений ячеек.

В результате вы получите новый класс пространственных объектов, содержащий группы точек, по одной группе на каждое здание. Обратите внимание, что каждое здание может содержать другое количество точек, чем указано в инструменте геообработки. Инструмент закончит создание точек, когда не сможет разместить точку, не нарушая заданное вами минимально разрешенное расстояние.

Информация о высотах, полученная из поверхности высот, сгенерированной по первым точкам лидара, может быть добавлена к каждой точке в виде атрибута, с помощью инструмента геообработки Добавить данные высот поверхности (Add Surface Information)

Теперь можно суммировать информацию о высотах, чтобы получить одно значение для каждого здания, используя инструмент геообработки Суммарная статистика (Summary Statistics). Статистический метод будет зависеть от требуемого результата. Например:
- Метод MEAN дает среднее значение высоты крыши здания и обеспечивает наилучшие результаты для отображения.
- Метод MAXIMUM присваивает высоте крыши самое большое значение и обеспечивает наилучшие результаты для анализа линии взгляда.
- Метод MINIMUM присваивает высоте крыши самое низкое значение, и обеспечивает наилучшие результаты для анализа линии горизонта.


- Значения высот, полученные для каждого здания, используют те же единицы измерения, что и слой поверхности высот, по которому они были получены. Эти единицы измерения могут не соответствовать единицам проекции вертикального датума, заданного для класса объектов контуров зданий. Вам может понадобиться выполнить конвертацию единиц измерения для итогового поля высот, используя Калькулятор поля (Field Calculator), чтобы преобразовать единицы высот в те единицы, которые используются в вертикальном датуме и/или в вашей проекции.
Отображение контуров в виде зданий так же просто, как использование вытягивания 3D символов в ArcGlobe или в ArcScene. Откройте диалоговое окно Свойства слоя (Layer Properties) и сначала включите опцию Вытягивать объекты слоя (Extrude features in the layer). Используйте Конструктор выражений (Expression Builder) , чтобы выбрать атрибут для вытягивания. Далее, после задания значений вытягивания, убедитесь, что выбран метод использовать это как значение, в соответствии с которым вытягиваются объекты (using it as a value that features are extruded to). Для успешного вытягивания, необходимо добавить поверхность высот для слоя контуров (Свойства слоя (Layer Properties) > закладка Базовые высоты (Elevation)). Если этого не сделать, контуры будут вытянуты относительно высоты 0, или уровня моря.


- В ArcGlobe предполагается, что значения полей, использующихся в вычислении вытягивания, приведены в метрах. Вам может потребоваться использовать Конструктор выражений (Expression Builder), чтобы конвертировать единицы измерения в полях в метры.
Определение высоты контуров зданий
Теперь, когда у вас есть значения высот, представляющие высоту крыши здания, можно вычислить высоту каждого здания. Для этого, вам потребуется высота каждого здания на поверхности земли. Есть несколько различных способов вычисления высоты контуров на поверхности. Если у вас есть доступ к обработанным данным лидара по поверхности земли или к ЦМР с высоким разрешением, вы можете легко получить высоту каждого контура. Используйте тот же метод, описанный в предыдущем разделе, который применялся для создания контрольных точек для каждого здания и получения информации о высотах по слою растровой поверхности высот. Суммируйте эти значения в одно для каждого здания и присоедините их к исходным данным. Добавьте поле к исходным данным и вычтите высоту крыши здания из высоту поверхности земли. В результате вы получите значение высоты для каждого здания.

- Перед вычислением высоты зданий, убедитесь, что единицы измерения высоты поверхности земли и растра высот по первым точкам совпадают. Вам может понадобиться выполнить некоторые преобразования единиц измерения, используя Калькулятор поля (Field Calculator), если они отличаются.
Или, можно получить значения высоты поверхности из тех же самых данных лидара по первым точкам, которые использовались для получения первоначальных высот крыш зданий. Использование того же источника данных уменьшает вероятность ошибок в связи с несоответствием между наборами данных. При этом потребуется создание второго набора контрольных точек – в виде кольца вокруг здания – и определения высоты поверхности земли в местах их расположения.
Необходимо учесть несколько вещей, перед построением кольца контрольных точек вокруг зданий. Во-первых, эти точки должны быть достаточно далеко от здания, чтобы на них не повлияла высота самого здания. Расстояние отступа должно быть не менее размера одной ячейки растровой поверхности высот, полученной по данным лидара. Кроме того, необходимо, чтобы контрольные точки одного здания не пересекались с соседними зданиями. Чтобы создать эти опорные точки, выполните следующее:
- Постройте буфер вокруг контуров зданий с расстоянием, равным размеру одной ячейки растра слоя поверхности высот.
- Постройте буфер вокруг контуров зданий с расстоянием, равным двум ячейкам растра слоя поверхности высот. Не используйте опцию слияния в инструменте геообработки Буфер (Buffer), поскольку для каждого контура необходим отдельный уникальный полигон.
- Используйте инструмент геообработки Стереть (Erase), чтобы стереть буфер, полученный в шаге 1 из буфера, полученного в шаге 2. Результат должен выглядеть как набор колец вокруг каждого здания.
- Используйте описанный ранее метод для построения набора случайных точек.
В итоге вы получите набор точек в пределах колец вокруг зданий. Обратите внимание, что кольца могут пересекаться друг с другом, но не с контурами зданий. Благодаря первому буферу, все кольца находятся достаточно далеко от зданий, чтобы на высоты контрольных точек не влияли высоты крыш зданий.

Можно использовать метод, описанный ранее, для суммирования значений высот поверхности земли по данным точкам. Однако, в этом случае, следует использовать метод MINIMUM. Это необходимо потому, что данные лидара по первым точкам могут содержать другие объекты, такие как растительность, уличное оборудование и автомобили. Использование минимального значения обеспечивает наилучшую точность определения высоты поверхности для здания. После того, как вы суммировали значения высот поверхности земли, вы можете вычесть их из ранее полученных значений высот крыш зданий, чтобы определить высоту каждого здания.

При вытягивании контуров по высоте зданий, убедитесь, что выбран метод добавления к минимальной высоте каждого объекта.
В этом руководстве было показано, как использовать растровые данные высот, полученные по данным лидара по первым точкам, чтобы определить высоту крыш зданий и относительную высоту над поверхностью земли.