LayerElevation

Краткая информация

Класс 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.

  • ABSOLUTE_HEIGHT For features that occur at a constant height above a datum, regardless of ground elevation, such as airplanes. In addition, you can add a vertical exaggeration to the absolute height. Use the Shape.Z keyword for the expression argument.
  • ON_CUSTOM_SURFACE For features that occur on a surface not represented by ground level, such as a well site intersection on a subsurface geologic plane. You can choose a custom elevation surface from a list of defined surfaces in the scene.
  • ON_THE_GROUND For features that are situated at ground level, such as trees.
  • RELATIVE_TO_CUSTOM_SURFACE Where additional height values are added to the feature's location on a custom surface. You need a custom elevation surface to use this option. Use the feature's Z values or use the Feature Z profile to create an Arcade expression to adjust feature Z values.
  • RELATIVE_TO_GROUND For features that are placed at a known height above the ground, such as security camera positions on the side of a building. Use the feature's Z values or use the Feature Z profile to create an Arcade expression to adjust feature Z values.
  • RELATIVE_TO_SCENE For features that know where they are compared to the scene. These features align to the ground and 3D objects such as extruded polygons or buildings.
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.

  • FEETFeet
  • KILOMETERSKilometers
  • METERSMeters
  • MILESMiles
  • YARDSYards

(Значение по умолчанию — METERS)

String

Важно задать вертикальную систему координат при работе с 3D-данными. Если у источника слоя задана вертикальная система координат, единицы измерения слоя совпадают с линейной единицей измерения вертикальной системы координат.

Пример кода

LayerElevation, пример 1

Следующий скрипт перебирает 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()
LayerElevation, пример 2

Следующий скрипт перебирает 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()
LayerElevation, пример 3

Следующий скрипт перебирает 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()
LayerElevation, пример 4

Следующий скрипт перебирает 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()