Более

Выбор объекта по атрибуту с выражением, чтобы удалить его из того же класса объектов в ModelBuilder?


Я хочу создать модель в ModelBuilder, содержащую два процесса:

  • Первый процесс - выбрать функцию с помощью выражения.
  • Второй процесс - удалить объект, выбранный в первом процессе.

Я хочу выполнять оба процесса в одном классе пространственных объектов, поэтому я не могу использовать инструмент Выбрать (Анализ), потому что он дает мне новый класс пространственных объектов в качестве выходных данных.

Я использую ArcGIS 10.2 for Desktop.

Я нашел инструмент Выбрать слой по атрибутам, но он не принимает формат класса пространственных объектов, и у меня нет другого формата, кроме класса пространственных объектов.


Если модель находится за пределами ArcMap, вам сначала нужно будет использовать инструмент Создать слой объектов, затем вы можете использовать инструмент Выбрать слой по атрибуту, а затем инструмент Удалить объекты.


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

Если вы планировали выбрать по атрибуту, где поле = 'X', а затем удалить выбранные записи, просто используйте Выбрать (анализ), чтобы выбрать записи, где поле <> 'X'.


Распространенную идиому «запрещение копирования» теперь можно выразить прямо:

[. ]

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

  1. = 0 означает, что функция чисто виртуальная, и вы не можете создать экземпляр объекта из этого класса. Вам нужно извлечь из него и реализовать этот метод
  2. = delete означает, что компилятор не будет генерировать эти конструкторы за вас. AFAIK это разрешено только для конструктора копирования и оператора присваивания. Но я не очень хорошо разбираюсь в предстоящем стандарте.

Этот отрывок из Язык программирования C ++ [4-е издание] - Бьярн Страуструп книга говорит о настоящая цель позади using = delete:

3.3.4 Подавляющие операции

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

Теперь попытка скопировать Shape будет перехвачена компилятором.

Механизм = delete является общим, то есть его можно использовать для подавления любой операции.

Существуют ли другие «модификаторы» (кроме = 0 и = delete)?

Поскольку, похоже, никто больше не ответил на этот вопрос, я должен упомянуть, что также есть = default.

В стандартах кодирования, с которыми я работал, для большинства объявлений классов было следующее.

Если вы используете любой из этих 6, вы просто закомментируете соответствующую строку.

Пример: классу FizzBus требуется только dtor, поэтому остальные 5 не используются.

Мы закомментируем только 1 здесь и установим его реализацию в другом месте (возможно, там, где это предлагает стандарт кодирования). Остальные 5 (из 6) запрещены при удалении.

Вы также можете использовать '= delete', чтобы запретить неявное продвижение значений разного размера. пример

= delete - это функция, представленная в C ++ 11. В соответствии с = delete не разрешено вызывать эту функцию.

При вызове этой функции для назначения obj это не допускается. Означает, что оператор присваивания будет ограничивать копирование от одного объекта к другому.

Новый стандарт C ++ 0x. См. Раздел 8.4.3 в рабочем проекте N3242.


⇒ Расчет геометрии

Акров

  1. В таблице атрибутов «Многоугольник событий» щелкните правой кнопкой мыши и выберите «Рассчитать геометрию».
  2. Откроется окно «Расчет геометрии».
    Выбирать Площадь как Собственность и Акров как единицу площади.
    Выбирать Многоугольник событий в качестве системы координат, и она будет обновлена ​​до GCS_WGS_1984.
  3. Щелкните ОК.

Длина

  1. В таблице атрибутов линии событий щелкните правой кнопкой мыши и выберите «Рассчитать геометрию».
  2. Откроется окно «Расчет геометрии».
    Выбирать Длина как Собственность и Ноги как Единица длины.
    Выбирать Линия событий в качестве системы координат, и она будет обновлена ​​до GCS_WGS_1984.
  3. Щелкните "Выполнить".

Широта / Долгота

  1. В таблице атрибутов точки события щелкните правой кнопкой мыши и выберите «Рассчитать геометрию».
  2. Откроется окно «Расчет геометрии».
    И широту, и долготу можно рассчитать сразу.
    Введите десятичные градусы минут в качестве формата.
  3. Щелкните ОК.

Их дедушка - инструмент Intersect.

Всякий раз, когда у вас есть запрос наложения, первым делом вам следует подумать об использовании Intersect. Из всех перечисленных выше инструментов это единственный инструмент, который создает новые объекты на основе геометрического пересечения входных объектов. Новые функции имеют правильную область пересечения, что означает, что мы можем вычислить поля AREA и PERCENT, показанные на рисунке 1. Кроме того, Intersect может распределять любой атрибут в зависимости от площади.
Ниже приведены результаты Intersect для одного из сайтов, Ar_8496. Левый рисунок (A) показывает исходную геометрию, выводимую Intersect. Правый рисунок (B) показывает выходные характеристики по отношению к участкам, показывая метки PID (Parcel ID) и SID (Site ID), а также части участков как внутри, так и за пределами участка Ar_8496.

Рисунок 2: Использование инструмента «Пересечение».

Рисунок 3: Таблица атрибутов для вывода Intersect

Вот несколько примечаний о полях таблицы вывода:

  • FID_Sites - это OBJECTID многоугольника в слое сайтов, а SID - это уникальный идентификатор сайта для многоугольника. Поскольку многие участки пересекают один участок, в этих полях есть повторяющиеся значения.
  • FID_Parcels - это OBJECTID участка, который пересекает многоугольник участка, а PID - это уникальный идентификатор участка. Для участка Ar_8496 существует 10 уникальных участков, которые он пересекает.
  • СТАТУС - это поле на слое участков.
  • Shape_Area и Shape_Length - это вычисленная площадь и длина границы многоугольников, созданных Intersect. Единицы этих двух полей наследуются от первого входного слоя. В данном случае это футы.

В приведенной выше таблице содержится вся необходимая информация для создания таблицы табуляции, показанной на рисунке 1 - это просто требует небольшой работы, которую инструмент Табулировать пересечение выполняет за вас. В Использование пересечения Модель, доступная для загрузки, показывает, как это делается, и выводит таблицу, идентичную таблице на рисунке 1. Вкратце, вот шаги для преобразования вышеприведенной таблицы в вывод таблицы табуляции с помощью Tabulate Intersection:

  • Добавьте поле с именем AREA и вычислите его значения, используя Calculate Field с [email protected]! как выражение.
  • Скопируйте таблицу атрибутов объекта в отдельную таблицу с помощью инструмента Таблица в таблицу. Этот инструмент имеет параметр карты полей, который вы можете использовать для определения полей, которые вы хотите скопировать в выходную таблицу. В модели я удаляю все поля, кроме SID, PID, STATUS и AREA. (См. Ниже пример инструмента Таблица в таблицу.)

Рисунок 4: многоугольник, дважды пересекающийся


Урок 3 Практическое упражнение C Решение

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

Видео ниже предлагает построчные комментарии к структуре вышеуказанного решения:

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

После импорта пакета сайта arcpy в строке 4 мы устанавливаем переменную, представляющую этот порог. В данном случае мы устанавливаем это значение равным 500 парковочным местам.

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

В строке 7 я настраиваю рабочее пространство arcpy так, чтобы оно совпадало с расположением моей файловой базы геоданных.

Строка 11, вероятно, самая важная строка этого сценария. Он настраивает выражение запроса SQL, чтобы получить объекты для парковки и езды, у которых количество парковочных мест превышает количество парковочных мест, указанное выше в строке 6. Итак, если вы посмотрите на это в Pro, где средства парковки и езды отмечены черным цветом. точек, мы бы сделали выбор по атрибутам. И мы запрашиваем у этого атрибута, что Approx_Par больше 500. И это даст нам те большие парки и аттракционы, которые в основном встречаются в районах Сиэтла и Такомы.

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

После того, как вы настроили эту строку запроса, вы можете запустить SelectLayerByAttribute, чтобы получить слой функций ParkAndRide только с теми выбранными парками и аттракционами, которые соответствуют критерию.

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

Второй параметр - это метод выбора (хотим ли мы создать новую выборку, добавить к существующей выборке, выбрать из текущей выборки и т. Д.). Здесь мы хотим создать новое выделение.

И, наконец, третий параметр - это выражение запроса SQL.

Инструмент возвращает нам слой объектов, содержащий выбранные функции ParkAndRide, которые мы сохраняем в переменной parkAndRideLayer.

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

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

Ниже представлен альтернативный подход к упражнению.

Видео ниже предлагает построчные комментарии к структуре вышеуказанного решения:

В этом видео описывается альтернативное решение для Урока 3, Практическое упражнение C. Это решение отличается от первого, начиная со строки 14. Вместо использования SelectLayerByAttribute и сохранения возвращенного им функционального слоя в переменной эта версия скрипта использует инструмент MakeFeatureLayer для создайте слой объектов, на который позже можно будет ссылаться, используя строку «ParkAndRideLayer».

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

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

Итак, в этой версии скрипта, когда мы хотим записать выбранные функции на диск, мы вставляем этот именованный векторный слой в оператор CopyFeatures, а не в переменную.

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


В чем разница?

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

Следующая таблица даст более четкое представление о различиях между ними:

Автоматический запуск одного инструмента геообработки

Да - может автоматически запускать один инструмент как часть шага

Разрешить пользователям вводить данные в инструменты перед запуском

Автоматически и последовательно запускать несколько задач геообработки

Быть включенным в модель геообработки

Предоставляется документированный рабочий процесс

Запускаться вне ArcGIS Pro

Интегрируйте с другими приложениями

Запланировать запуск в определенное время и в определенные дни

Требуется знание языка программирования


Советы по добавлению типов функций и управлению ими

Схема Writer определяет «то, что мы хотим» как целевой набор данных. Поэтому, если вы хотите записать данные в конкретный слой в определенном наборе данных, вы должны убедиться, что слой определен как тип объекта на холсте.

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

Когда FME & # 160 добавляет типы объектов Writer как часть новой рабочей области, эти типы объектов получат фиксированное (ручное) определение атрибута, которое берется из выбранного исходного набора данных. Затем вы можете вручную отредактировать эти атрибуты.

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

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

Типы функций могут быть добавлены в писатель вручную с помощью писателей. & gt Добавьте тип функции в строку меню.

В иерархии переводов должен существовать хотя бы один писатель, иначе этот параметр будет неактивен.

При выборе «Добавить тип элемента» объект типа элемента помещается в рабочую область, а затем открывается диалоговое окно «Тип элемента», в котором вы можете редактировать свойства типа элемента.

Как и при редактировании схемы, вкладку «Параметры» можно использовать для определения имени нового типа объекта.

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

После добавления типа объекта схема определяется на вкладке «Пользовательские атрибуты».

Функция «Импортировать типы объектов» добавляет типы объектов к существующему набору данных путем импорта схемы из любого набора данных. Этот второй набор данных может быть тем же самым, что и читаемый, но на самом деле это не обязательно, он даже не обязательно должен быть в том же формате - определение схемы является важной частью, и FME может прочитать это из любого формат. & # 160

  • В меню «Читатели» или «Писатели» выберите «Импортировать типы функций». Если у вас более одного считывателя, вам будет предложено выбрать набор данных, в который вы хотите добавить схему.
  • В диалоговом окне «Импорт типов объектов» укажите формат и набор данных (а также параметры и систему координат, если применимо) и нажмите «ОК».

В журнале будет отображаться информация об обработке, и типы объектов будут добавлены к выбранному набору данных.

Вы также можете импортировать типы объектов из выбранного формата во всю папку, нажав кнопку Advanced Browser.

Когда вы добавляете новый Writer, вы также можете управлять типами функций, которые добавляются в рабочую область:

Есть шесть вариантов добавления типов функций:

  • Автоматически: & # 160 Добавляет новый тип объекта с параметром определения атрибута, установленным на автоматический. Это значение по умолчанию.
  • Вручную: добавляет новый тип объекта с параметром определения атрибута, установленным в ручной режим.
  • Копировать из Reader: & # 160 Добавляет новый тип объекта с параметром определения атрибута, установленным на ручной, но предопределенным в схеме существующего типа объекта Reader.
  • Импорт из набора данных: & # 160 Добавляет новый тип объекта с параметром определения атрибута, установленным на ручной, но предопределенным для схемы внешнего набора данных (точно так же, как при использовании инструмента Импорт типов объектов).
  • Динамический: добавляет новый тип объекта с параметром определения атрибута, установленным на динамический.
  • Нет: новые типы функций не добавляются.

При добавлении Writer можно создать новый тип объекта, схема атрибутов которого предопределена для существующего Reader. Однако, если у вас уже есть Writer, вы все равно можете выполнить ту же процедуру копирования схемы Reader. Для этого достаточно выбрать требуемые типы функций Reader, щелкнуть их правой кнопкой мыши и использовать параметр Duplicate on Writer.

Команда заставляет дубликаты типов функций Reader быть добавленными в писатель, а типы объектов источника / назначения автоматически подключаются.

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

Чтобы удалить выбранные типы компонентов, выберите «Удалить типы компонентов» в меню «Читатели» или «Писатели» и установите соответствующие флажки.

Вы также можете выбрать типы элементов на холсте или в панели навигации и нажать клавишу Delete.

Перемещение типа объекта доступно только в том случае, если у вас есть более одного целевого набора данных и хотя бы один целевой тип объекта в рабочей области.

Он используется для быстрого изменения набора данных для группы типов объектов. Например, если у вас есть набор данных MIF с типами объектов и набор данных Oracle без каких-либо типов объектов. Вы можете быстро переключить все типы объектов MIF на типы объектов Oracle, изменив связанный с ними набор данных. Все типы объектов MIF будут перенесены в набор данных Oracle.

Вы также можете сделать это, используя элементы одного типа за раз, выполнив следующие действия:

  1. Откройте диалоговое окно "Тип объекта назначения".
  2. Щелкните поле раскрывающегося списка «Набор данных:» и выберите из списка наборов данных (это изменит набор данных типа объекта).

Чтобы вывести только один тип объекта, щелкните правой кнопкой мыши тип объекта и выберите Включить только этот тип функции.

Чтобы включить несколько типов функций, выберите типы функций, затем щелкните правой кнопкой мыши и выберите Включить объекты.

Вы также можете выбрать эти параметры в меню «Читатели» и «Писатели».

Чтобы отключить тип объекта и все его ссылки, щелкните тип объекта правой кнопкой мыши и выберите Запрещать.

Чтобы отключить несколько типов функций, выберите их все, затем щелкните правой кнопкой мыши и выберите Отключить объекты.


Предоставление многозначного атрибута

Некоторые атрибуты, такие как phoneNumbers и emails, являются многозначными атрибутами, и вам может потребоваться указать разные типы номеров телефонов или адресов электронной почты. Используйте приведенное ниже выражение для многозначных атрибутов. Он позволяет указать тип атрибута и сопоставить его с соответствующим атрибутом пользователя Azure AD для значения.

phoneNumbers [введите eq & quotwork & quot] .value

phoneNumbers [введите eq & quotmobile & quot] .value

phoneNumbers [введите eq & quotfax & quot] .value


Редактировать слой Landmarks

В слое Landmarks отсутствует несколько ключевых мест, например площадь Сан-Марко, которую вы исследовали на предыдущем уроке. Данные не всегда могут быть идеальными. Ничего страшного, вы можете отредактировать слой, чтобы добавить недостающие места.

  1. Увеличьте закладку Piazza San Marco.
  2. На ленте щелкните вкладку Правка. В группе Features нажмите кнопку Create.

Появится панель «Создать объекты», на которой отображаются слои, доступные для редактирования.

Теперь вы можете добавлять ориентиры на карту.

Новая точка будет автоматически выделена синим цветом.

Если вам не нравится, где вы разместили свою точку, вы можете отменить его. Кроме того, вы можете удалить его: убедитесь, что точка выбрана, и на вкладке «Редактировать» в группе «Функции» нажмите кнопку «Удалить».

Затем вы добавите достопримечательность к другому важному месту в Венеции: мосту Риальто.

Это мост Риальто, самый старый мост Венеции.

Когда вы добавляете точку, указатель может привязываться к другим слоям объектов. Привязка - это функция редактирования, которая упрощает размещение объектов рядом друг с другом. Чтобы отключить привязку, на вкладке «Правка» нажмите кнопку «Привязка» (или временно приостановите привязку, удерживая клавишу пробела во время редактирования).

Вы добавите еще одну достопримечательность в месте, которое выполняет важную функцию для Венеции: на острове Сан-Микеле.

Сан-Микеле - место упокоения многих из мертвых в Венеции (но не всегда последнее место упокоения - пространство в дефиците, и иногда тела необходимо перемещать). Хотя он не так знаменит, как площадь Сан-Марко или мост Риальто, он все же является важной достопримечательностью.

Кнопка «Сохранить» на вкладке «Правка» сохраняет любые изменения, внесенные в выбранный слой на панели «Содержание». Это не спасает проект. Чтобы сохранить весь проект, нажмите кнопку «Сохранить» на панели быстрого доступа.


Группы атрибутов предметов и атрибуты

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

Чтобы создать группу атрибутов и атрибут, вы используете задачу «Управление группами атрибутов элементов и атрибутами» из предложения «Управление продуктами» в рабочей области «Настройка и обслуживание». Создайте группу атрибутов и укажите использование контекста в качестве элемента. Вы можете предоставить группе атрибутов права просмотра или редактирования или и то, и другое. Выберите поведение атрибута: однорядный или многорядный:

Однорядная группа атрибутов: содержит набор атрибутов, которые отображаются в виде отдельных полей в области, названной в честь группы атрибутов. Например, однорядная группа атрибутов с именем «Процессор» содержит атрибуты, соответствующие процессору. Когда эти группы атрибутов отображаются в пользовательском интерфейсе, поля атрибутов для каждой группы компактно располагаются внутри области, названной именем группы атрибутов. Атрибуты могут иметь несколько типов данных.

Группа атрибутов из нескольких строк: атрибуты отображаются в виде столбцов в таблице, представляющей группу атрибутов. Каждая строка в таблице считается группой атрибутов. Атрибуты - это набор значений, указанных в столбцах таблицы. Таблица отображается в пользовательском интерфейсе в области с названием группы атрибутов, например, MSRP Price. Никаких других полей в таблице нет. Например, многострочная группа атрибутов с именем MSRP Price содержит атрибуты Country, MSRP и Currency. Каждая строка таблицы описывает цену MSRP и является значением группы атрибутов Цена MSRP.

При настройке группы атрибутов вы можете назначать привилегии. Используя эти привилегии, вы управляете возможностью пользователя просматривать или редактировать атрибуты следующим образом: просматривать или редактировать задачи элемента, анализ влияния изменения порядка и отчет о структуре элемента. Для этого выберите привилегии просмотра и редактирования для группы атрибутов в «Использование контекста».

В группе атрибутов создайте атрибут и набор значений. Например, создайте группу атрибутов с именем «Стоимость и соответствие» и в нее добавьте атрибут с именем «Стоимость материала». Используя наборы значений, определите набор валют, применимых к стоимости товара. После создания групп атрибутов и атрибутов выполните следующие задачи:

Свяжите атрибут с классом элемента с помощью задачи Управление классом элемента