Skip to main content

Пользовательские входные типы ориентированных изображений

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

При создании модуля Python используйте приведенные ниже рекомендации. Модуль предоставляет функциональные возможности для задания метаданных, извлечения значений и данных в схеме ориентированных изображений.

Правила присвоения имен для модуля и класса

Назовите папку, содержащую модуль, сам модуль и класс, в соответствии с типом входных данных для добавления изображений в набор данных ориентированных изображений. Соглашение об именовании гарантирует, что модуль и класс будут идентифицированы и интуитивно понятны в использовании.

Например, если используются входные данные MyInputType, назовите папку, модуль и класс следующим образом:

  • Имя папки - MyInputType

  • Имя модуля - MyInputType.py

  • Имя класса - MyInputType

Методы класса

Этот класс включает методы для определения схемы входных данных, вспомогательных параметров, полей набора данных ориентированных изображений и свойств набора данных ориентированных изображений, а также для создания записей об ориентированных изображениях. Класс должен содержать методы input_data_schema, auxiliary_parameters, oriented_imagery_fields, oriented_imagery_properties и oriented_imagery_records.

input_data_schema

Метод input_data_schema определяет необходимые входные данные для создания записей ориентированных изображений и возвращает значение, описанное ниже.

Возврат

Метод input_data_schema возвращает словарь, содержащий схему входных данных.

Каждый ключ представляет собой входные данные, необходимые для добавления изображений в набор данных ориентированных изображений, в значении ключа должно быть указано, является ли он обязательным или дополнительным.

Это пример метода input_data_schema.

def input_data_schema(self):
 """Defines input data."""
 return {
     "Metadata File": {"required": True},
     "Image Location": {"required": True},
     "DEM": {"required": False}
 }

auxiliary_parameters

Метод auxiliary_parameters задает вспомогательные параметры со значениями по умолчанию.

Возврат

Метод auxiliary_parameters возвращает словарь, содержащий информацию о вспомогательных параметрах.

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

Это пример метода auxiliary_parameters.

def auxiliary_parameters(self):
 """Defines auxiliary parameters."""
 return {
     "Default Ground Elevation": "0",
     "Offset": "1.2"
 }

На панели Геообработка параметры Добавить изображения из пользовательского входного типа, Входные данные и Вспомогательные параметры обновляются на основе возвращаемых значений от методов input_data_schema и auxiliary_parameters.

oriented_imagery_fields

Метод oriented_imagery_fields задает поля, которые должны быть добавлены в набор данных ориентированных изображений.

Аргументы

Аргументы следующие:

  • input_data - словарь, содержащий информацию о входных данных.

    Ключи input_data соответствуют ключам, возвращаемым методом input_data_schema, а значения являются входными данными, предоставленными пользователем в виде строк.

    Это пример значения input_data.

    {
         "Metadata File": "C:/Documents/Files/metadata.json",
         "Image Location": "C:/Documents/Images",
         "DEM": None
    }
    
  • aux_input - словарь вспомогательных параметров и значений.

    Ключи aux_input соответствуют ключам, возвращаемым методом auxiliary_parameters, а значения являются значениями параметров в виде строк.

    Это пример значения aux_input.

    {
         "Default Ground Elevation": "309",
         "Offset": "1.2"
    }
    

Возврат

Метод oriented_imagery_fields возвращает кортеж со следующими списками:

Это пример метода oriented_imagery_fields.

def oriented_imagery_fields(self, input_data, aux_params):
 """Define the input schema for the tool."""

 standard_fields = [
     "SHAPE@",
     "Name",
     "ImagePath",
     "AcquisitionDate",
     "CameraHeading",
     "CameraPitch",
     "CameraRoll",
     "HorizontalFieldOfView",
     "VerticalFieldOfView",
     "CameraHeight",
     "FarDistance",
     "NearDistance",
     "OrientedImageryType",
     "CameraOrientation"
 ]

 additional_fields = [
     {"field_name":"CameraId", "field_type":"LONG"},
     {"field_name":"CameraType", "field_type":"TEXT"}
 ]

 return standard_fields, additional_fields

oriented_imagery_properties

Метод oriented_imagery_properties задает значения по умолчанию для свойств набора данных ориентированных изображений. Эти значения можно изменить с помощью инструмента Обновить свойства набора данных ориентированных изображений.

Аргументы

Аргументы следующие:

  • input_data - словарь, содержащий информацию о входных данных.

    Ключи input_data соответствуют ключам, возвращаемым методом input_data_schema, а значения являются входными данными, предоставленными пользователем в виде строк.

  • aux_input - словарь вспомогательных параметров и значений.

    Ключи aux_input соответствуют ключам, возвращаемым методом auxiliary_parameters, а значения являются значениями параметров в формате строки.

Возврат

Метод oriented_imagery_properties возвращает словарь с именами и значениями свойств набора данных ориентированных изображений.

Функция ArcPy Describe извлекает все свойства ориентированных изображений и соответствующие им значения в виде словаря. Метод oriented_imagery_properties может возвращать любое свойство, за исключением horizontalMeasurementUnit. Горизонтальные единицы измерения определяется системой координат набора данных.

Это пример метода oriented_imagery_properties.

def oriented_imagery_properties(self, input_data, aux_params):
 """Define the default properties for the tool."""
 return {
     "maximumDistance": 2000,
     "orientedImageryType": "Oblique",
     "cameraPitch": 45,
     "farDistance": 500,
     "nearDistance": 120
 }

oriented_imagery_records

Метод oriented_imagery_records считывает метаданные для извлечения информации и выдает словари со значениями в заданной схеме.

Аргументы

Аргументы следующие:

  • input_data - словарь, содержащий информацию о входных данных.

    Ключи input_data соответствуют ключам, возвращаемым методом input_data_schema, а значения являются входными данными, предоставленными пользователем в формате строки.

  • aux_input - словарь вспомогательных параметров и значений.

    Ключи aux_input соответствуют ключам, возвращаемым методом auxiliary_parameters, а значения являются значениями параметров в виде строк.

Уступи дорогу

Метод oriented_imagery_records позволяет получить словарь, содержащий значения полей таблицы набора данных ориентированных изображений.

Словарь должен содержать все поля, которые заданы в методе oriented_imagery_fields в качестве его ключей. Ключ SHAPE@ должен содержать местоположение камеры в качестве объекта ArcPy PointGeometry.

Это пример метода oriented_imagery_properties.

def oriented_imagery_properties(self, input_data, aux_input):
 """Generate the oriented imagery records."""
 metadata = input_data["Metadata File"]
 image_folder = input_data["Image Location"]
 dem = input_data["DEM"]
 def_ground = aux_input["Default Ground Elevation"]
 offset = aux_input["Offset"]

 # Implementation goes here

 yield {
     "SHAPE@": camera_point_geom,
     "Name": image_name,
     "ImagePath": image_path,
     "AcquisitionDate": acquisition_date,
     "CameraHeading": heading,
     "CameraPitch": pitch,
     "CameraRoll": roll,
     "HorizontalFieldOfView": hfov,
     "VerticalFieldOfView": vfov,
     "CameraHeight": camera_height,
     "FarDistance": far_distance,
     "NearDistance": near_distance,
     "OrientedImageryType": oi_type,
     "CameraOrientation": cam_ori,
     "CameraId": int(c_id),
     "CameraType": c_type
 }