Краткая информация
Класс LayerElevation позволяет определять характеристики высоты для 3D-слоев на Карте.
Обсуждение
Чтобы пространственные данные отображались в 3D, вы можете задавать параметры высоты для слоев в категории 3D-слои вашей локальной или глобальной сцены. Сюда входит определение elevationMode и verticalUnits слоя, а также при необходимости определение cartographicOffset.
elevationMode позволяет выбирать, где отображается объект по отношению к поверхности Земли или пользовательской поверхности высот. См. класс ElevationSurface для дополнительных примеров работы с поверхностью Земли или пользовательскими поверхностями высот. Картографическое смещение можно применить для уточнения места по вертикали, где объекты будут прорисованы относительно базовой высоты. Используйте свойство вертикальных единиц измерения в ситуациях, когда значения Z могут иметь другие линейные единицы измерения, чем значения XY.
Для дополнительной информации о настройке параметров высоты слоя в ArcGIS Pro см. раздел справки Определение высотных характеристик для слоев.
Примечание:
3D-слои могут поддерживать или не поддерживать все режимы высот. Используйте поиск ошибок для задания нужного режима высот для данного типа слоя. См. примеры ниже, чтобы понять, как это работает.
Свойства
| Свойство | Описание | Тип данных |
| cartographicOffset (чтение и запись) | Получает и устанавливает картографическое смещение. Смещение может применяться для настройки положения объектов по вертикали относительно базовой высоты, заданной значением elevationMode. | Double |
| elevationMode (чтение и запись) | Получает и устанавливает режим отображения рельефа, который управляет высотой слоя. Слои в категории 3D-слои на панели Содержание поддерживают ON_THE_GROUND, ABSOLUTE_HEIGHT, ON_CUSTOM_SURFACE, RELATIVE_TO_GROUND, RELATIVE_TO_SCENE и RELATIVE_TO_CUSTOM_SURFACE. | String |
| verticalExaggeration (чтение и запись) | Получает и устанавливает вертикальное преувеличение Все объекты будут увеличены в зависимости от заданного значения. Единицы измерения, в которых выражается это значение, соответствуют единицам измерения по вертикали. Применяется только если для elevationMode задано ABSOLUTE_HEIGHT, RELATIVE_TO_GROUND или RELATIVE_TO_CUSTOM_SURFACE. | Double |
| verticalUnits (чтение и запись) | Получает и устанавливает для данного слоя единицы измерения по вертикали. Если для источника данных слоя задана вертикальная система координат, то единицы измерения высоты такого слоя совпадают с линейной единицей измерения вертикальной системы координат. Примечание:Единицы измерения по вертикали, отображаемые в категории Высота в диалоговом окне Свойства слоя, могут показывать значение "Вертикальные единицы измерения источника данных", но свойство verticalUnits вернет конкретную единицу измерения. | String |
Обзор метода
| Метод | Описание |
| setElevationMode (elevation_mode, expression, surface) | Базовая высота слоя настраивается с использованием одного или нескольких параметров в зависимости от указанного elevation_mode. |
| setVerticalUnits ({vertical_units}) | Строковая константа, которая задает вертикальные единицы измерения высоты. Рекомендуется, чтобы вертикальные единицы измерения всегда совпадали с горизонтальными единицами измерения слоя при отсутствии вертикальной системы координат. Могут быть случаи, например, когда набор данных был создан с горизонтальными линейными единицами измерения в метрах, но вертикальные единицы измерения в футах. |
Методы
setElevationMode (elevation_mode, expression, surface)
| Параметр | Описание | Тип данных |
elevation_mode | Below is a list of valid strings.
| String |
expression | An optional VB Script or Arcade expression to be applied depending on the specified elevation_mode. Примечание:VB Script is deprecated in Windows. It is recommended to use Arcade. | String |
surface | An optional ElevationSurface to be applied depending on the specified elevation_mode. | Object |
setVerticalUnits ({vertical_units})| Параметр | Описание | Тип данных |
vertical_units | Below is a list of valid strings.
(Значение по умолчанию — METERS) | String |
Важно задать вертикальную систему координат при работе с 3D-данными. Если у источника слоя задана вертикальная система координат, единицы измерения слоя совпадают с линейной единицей измерения вертикальной системы координат.
Пример кода
Следующий скрипт перебирает 3D-слои в сцене и задает их режим высот На поверхности земли.
import arcpy
aprx = arcpy.mp.ArcGISProject("C:/projects/redlands/redlands.aprx")
m = aprx.listMaps("Scene")[0]
for lyr in m.listLayers():
e = lyr.elevation
# Use try/except for layers that support on the ground and
# skip over layers that do not support this elevation mode
try:
e.setElevationMode('ON_THE_GROUND')
except Exception as e:
print(f"An error occurred: {e} for {lyr.name}")
aprx.save()Следующий скрипт перебирает 3D-слои в вашей сцене и задает их режим высот Относительно пользовательской поверхности с выражением Arcade 50.
import arcpy
aprx = arcpy.mp.ArcGISProject("C:/projects/redlands/redlands.aprx")
m = aprx.listMaps("Scene")[0]
for lyr in m.listLayers():
e = lyr.elevation
# Use try/except for layers that support on the ground and
# skip over layers that do not support this elevation mode
try:
e.setElevationMode('RELATIVE_TO_CUSTOM_SURFACE','50',s)
except Exception as e:
print(f"An error occurred: {e} for {lyr.name}")
aprx.save()Следующий скрипт перебирает 3D-слои в вашей сцене и задает их режим высот Абсолютная высота на основе Z-значений объектов.
import arcpy
aprx = arcpy.mp.ArcGISProject("C:/projects/redlands/redlands.aprx")
m = aprx.listMaps("Scene")[0]
for lyr in m.listLayers():
e = lyr.elevation
# Use try/except for layers that support on the ground and
# skip over layers that do not support this elevation mode
try:
e.setElevationMode('ABSOLUTE_HEIGHT', 'Shape.Z')
except Exception as e:
print(f"An error occurred: {e} for {lyr.name}")
aprx.save()Следующий скрипт перебирает 3D-слои в вашей сцене и задает картографическое смещение 100, если текущее смещение равно 0.
import arcpy
aprx = arcpy.mp.ArcGISProject("C:/projects/redlands/redlands.aprx")
m = aprx.listMaps("Scene")[0]
for lyr in m.listLayers():
e = lyr.elevation
if e.cartographicOffset == 0:
e.cartographicOffset = 100
aprx.save()