Классифицировать градуированные данные вручную вне диапазона в ArcGIS for Desktop?


13

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

оригинал

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

Тем не менее, когда я пытаюсь классифицировать диапазоны с ручным интервалом, ArcGIS заставляет то, что должно быть самым верхним диапазоном, также включать минимальное значение из набора данных. Это можно увидеть в диапазоне «-81,64 - 10,00» левого фрейма данных ниже. Это заставляет весь слой обозначаться этим цветом. По сути, ArcGIS требует, чтобы минимальное значение в наборе данных использовалось в качестве значения в одном из диапазонов.

Новые интервалы

Есть ли способ обойти эту функцию?


Я тоже помню эту проблему, хотя не могу точно вспомнить, как я ее решил. Если вы классифицируете как «равный интервал» и дважды щелкаете значения, можете ли вы изменить их таким образом?
GISKid

@GISKid, как только я дважды щелкну, к сожалению, классификация возвращается к «Ручной».
hfisch

Как насчет корректировки значений на самой гистограмме?
GISKid

@GISKid значения возвращаются к минимальному значению, если вы перетащите их ниже минимального значения.
hfisch

2
Я думаю, что лучший и самый простой ответ на этот вопрос - gis.stackexchange.com/a/136497 - первый (и принятый в настоящее время) ответ слишком длинный, на мой взгляд.
PolyGeo

Ответы:


12

Это определенно большая боль, когда ArcMap пытается быть полезным, даже если вы действительно этого не хотите.

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

Создайте ваши символы на основе этого поддельного набора данных и сохраните эти символы в файле слоя :

введите описание изображения здесь

... затем импортируйте символы из файла * .lyr в ваш реальный набор данных:

введите описание изображения здесь


1
Это решение менее хакерское, чем мое. Я переключаюсь на ваш ответ.
hfisch

Спасибо, работает как шарм, если вы читаете все диалоги, которые arcmap бросает на вас с достаточной тщательностью.
Лууклаг

6

@ChrisW сказал:

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

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

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


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

Отправная точка

Максимальный диапазон классификации в любом из четырех фреймов данных составляет «от 0,01 до 10,00», а минимальный диапазон классификации - от «-110,62 до -110,00» (который в идеале станет «от -119,00 до -110,00»). Так как я пытаюсь сохранить 10-футовые интервалы, это означает всего 13 интервалов.


Я использую верхний левый фрейм данных в качестве источника для моей общей легенды. Я начинаю с открытия свойств слоя и иду к классификации. Поскольку я хочу, чтобы 13 интервалов были видны, мне нужно выбрать 14 интервалов, чтобы иметь доступный фиктивный диапазон. Я делаю это, выбирая Manual как метод и создавая 14 классов.

Шаг 1а

С диапазонами, установленными в их текущем состоянии (с самыми большими значениями вверху), любые изменения значения, введенного в диапазон, не будут влиять ни на что, кроме диапазона в самом низу списка. @ChrisW отметил, что это не ошибка, а особенность того, как ArcGIS назначает значения разрыва. Вот окно Свойства слоя после выбора ручного метода, но до внесения каких-либо изменений в диапазоны:

Шаг 1б


Чтобы решить эту проблему, я временно перевернул сортировку слоя. В этот момент самые низкие диапазоны находятся сверху, а самые высокие диапазоны - снизу.

Шаг 2а

Теперь, если я прокручиваю до конца списка диапазонов (где отображается самый высокий диапазон) и начинаю определять правильные интервалы снизу вверх, ArcGIS запомнит определенные мной диапазоны:

Шаг 2б

На этом изображении я определил верхнее значение в 5 из 14 диапазонов, начиная с наибольшего значения (10,00) и работая вниз.


Когда я доберусь до вершины списка и отредактирую свой 14-й диапазон, его минимальное значение все равно будет определено как минимальное значение в слое, так как у него нет другого диапазона ниже, чтобы он мог извлечь значение из:

Шаг 3а

Это не имеет значения, поскольку это фиктивный диапазон, о котором я упоминал ранее. В этот момент я снова изменяю сортировку слоя, поэтому самые высокие диапазоны снова оказываются наверху. На рисунке ниже показана обновленная легенда для верхнего левого фрейма данных, которая теперь отражает надлежащие диапазоны для всех четырех фреймов данных, включая 14-й фиктивный диапазон:

Шаг 3б


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

Шаг 4а

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

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

Однако самое простое решение - начать процесс классификации со слоя, имеющего наименьшее значение. Параметр «Импортировать символы» может затем использоваться правильно для других фреймов данных.

Шаг 4б


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

Конечная точка


Рад, что ты смог что-то решить. Я отредактировал свой ответ, чтобы исправить ошибку, которую вы цитировали (я не уверен, почему я так сказал - ваши оригинальные изображения показали, что вы можете).
Крис У,

На самом деле, у меня проблемы с копированием. Чтобы сделать ответ немного более полезным, не могли бы вы отредактировать, как именно вы создали эти диапазоны ниже минимального значения?
Крис W

@ChrisW Я значительно расширил процесс. Дайте мне знать, если это все еще не имеет смысла!
hfisch

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

1
Что касается применения символов к другим фреймам данных, как уже упоминалось в моем ответе, попробуйте начать с данных, имеющих наименьшее значение (-110,62), используя их для исходных символов. Я отмечаю, что на вашем третьем и последнем изображении минимальное значение класса-пустышки по-прежнему составляет -61,01 для всех четырех, что, как я полагаю, является причиной того, что ничего ниже этого не отображается, хотя для него есть класс. Если вы начнете с самого низкого значения, а минимальное значение будет выше, я думаю, оно будет включать или отображать минимальное количество символов для минимального значения данных, когда вы применяете символы для других наборов данных.
Крис W

5

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

Я решил это:

  1. Создайте свой первый набор данных так, как вы хотите, чтобы он отображался. В идеале с самым большим диапазоном данных, чтобы символы можно было легко скопировать во второй (меньший) набор данных.

введите описание изображения здесь

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

введите описание изображения здесь

  1. Сгруппируйте значения так, чтобы они попадали в соответствующие диапазоны, используемые в первом наборе данных. Выберите все значения для определенной категории, затем щелкните правой кнопкой мыши и выберите Group . Две верхние категории уже сгруппированы на изображении ниже, четыре выделенных долины вот-вот будут «втянуты» в третью группу.

введите описание изображения здесь

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

введите описание изображения здесь

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

введите описание изображения здесь

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

введите описание изображения здесь

Извините, если это немного упрощенно или даже неправильно / плохо. Я долгое время пользовался GIS Stack Exchange и думал, что со временем я начал вносить свой вклад, так что это мой первый пост!


2
Извините, только что понял, что ОП для градуированных данных и после быстрой проверки теперь понимаю, что мое решение является недействительным. Я буду читать более внимательно в следующий раз ....
Nige

4
  1. Выберите количество классов, которые вы хотите.
  2. Нажмите правой кнопкой мыши на символы и выберите save class breaks
  3. это сохраняет XML-файл, который вы можете открыть и редактировать в любом текстовом редакторе
  4. отредактируйте разрывы классов, которые вы хотите, в файле XML и сохраните
  5. снова щелкните правой кнопкой мыши по символам и импортируйте недавно отредактированный файл разрывов классов

СДЕЛАНО


3

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

Начните с нижнего левого результата и преобразуйте эту легенду в рисунок. Отредактируйте текст, чтобы получить желаемые диапазоны. Я заметил, что все ваши другие изображения имеют диапазон 10 единиц, но этот делает 20, и он перекрывается. Например, три изображения имеют от -49,99 до -40,00, но в нижнем левом углу - от -49,99 до -60,00, а следующий класс - от -59,99 до -70,00. Изображения также имеют противоположные диапазоны - то есть три являются нижним значением слева, в то время как нижний левый угол является нижним значением справа (для меня это выглядит намного более естественно, увеличивая числа, если не значения слева направо). Возможно, эти проблемы необходимо решить в первую очередь, чтобы сэкономить время, а не просто ручное редактирование текста.

Как только у вас есть легенда с диапазонами и цветовой шкалой, которая вам нравится, вы можете вернуться к своим первым двум слоям (которые уже классифицированы правильно) и вручную отредактировать цветовой патч каждого диапазона, чтобы он соответствовал цвету, который вы выбрали для диапазона в легенде. , Так как два слоя не будут отображать свои собственные легенды, не имеет значения, что в одном из них диапазон на самом деле составляет от -89,99 до -80,00, а в другом - от -81,64 до -80,00, потому что они оба будут одного цвета. ,

Обратите внимание, однако, что это будет означать, что оба набора данных имеют одинаковый диапазон, который они не имеют. На самом деле, похоже, что будут две цветовые заплатки, которые используются только на одной карте каждая (самая высокая и самая низкая). Возможно, вы захотите поставить примечание на каждой карте, которая дает их абсолютный диапазон данных. Я бы также использовал «to» вместо «-» между диапазонами, потому что с отрицательными значениями это немного сбивает с толку.


Альтернативное решение:

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

Итак, установите символику, используя растр, который содержит самое низкое / минимальное значение среди всех растров. Получите эти символы. Затем вы можете отредактировать метку класса, чтобы сказать, что вы хотите. Поэтому, если ваше самое низкое значение было 0,4, вы все равно можете изменить метку на 0.

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


На самом деле вы можете пропустить шаг .lyr и просто классифицировать один растр так, как вам хотелось бы (диапазоны, цвета и т. Д.), А затем использовать функцию символов импорта, чтобы применить это ко всем другим растрам. Откройте «Свойства слоя», перейдите на вкладку «Символы», выберите значок папки @ в правом верхнем углу (который будет указывать на «Импорт» при наведении на него курсора), а затем выберите растр, который нужно имитировать.
JWallace

@JWallace True, если ваши другие растры уже загружены в тот же документ карты (возможно, тот же самый фрейм данных - не могу вспомнить, если он позволит вам импортировать символы из другого), и вы готовы позволить своей работе настроить Символы находятся только в MXD (и вы можете сохранить его на случай, если что-то измените). У меня есть графический ответ, охватывающий эти шаги здесь .
Крис W

Хороший улов на странных единицах для нижнего левого результата. Я думаю, что это был артефакт моих попыток вручную определить диапазоны, и я определил их в обратном порядке. Использование «вместо» вместо «-» также является хорошим. Проблема, с которой я столкнулся с вашим оригинальным решением, заключается в том, что он требует много ручной работы с раскрашиванием и маркировкой, и мне нужно сгенерировать серию этих рисунков. Ваше альтернативное решение дало мне несколько идей. Я думаю, что нашел способ сделать это немного более элегантным и убрать проблемы минимального значения.
hfisch

3

Более простое, но и более грязное решение, которое сработало для меня. Не забудьте создать резервную копию ваших исходных данных.

  1. Откройте таблицу атрибутов и начните редактирование
  2. Отредактируйте любые два значения вручную, чтобы включить минимальное и максимальное значение, на котором вы хотите основать свою классификацию (запомните исходные значения)
  3. Сохранить и остановить редактирование
  4. Классифицировать на основе новых экстремумов
  5. Начать заново и вручную заменить измененные значения исходными значениями
  6. Существующая классификация не будет затронута

2

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

  • Слияние 2 (или более шейп-файлов) ДЕТЕЙ в один, назовем это СЕМЬЯ
  • создать легенду для семьи
  • импортировать символы для каждого РЕБЕНКА из СЕМЬИ

Надеюсь, это поможет, FP


Просто поймите, что это очень похоже на JWallace
FelixIP

2

Я сделал следующий обходной путь. Я создал собственные разрывы классов в XML-документе и загрузил их в классифицированную символику обоих слоев.

  1. Чтобы получить шаблон XML-документа breaks класса: в свойствах слоя щелкните правой кнопкой мыши по диапазону классификации, а затем «сохранить разрывы класса».
  2. Редактировать XML-документ: введите разрывы классов в XML-документе, вы также можете ввести числа, которые будут вне диапазона ваших наборов данных.
  3. Загрузить разрывы классов XML: в том же меню, где вы сохранили шаблон (см. 1), нажмите «загрузить разрывы классов»

    Шаг 1 и 3

Шаг 2


1
Какая версия ArcMap? У меня нет возможности сохранить разрывы классов в v10.6: i.imgur.com/znDqUpQ.png
Мэтт Уилки,

@mattwilkie Вопрос не в версии, а в типе данных. Вы просматриваете диалоговое окно символов для векторных данных, и сохранение таких разрывов классов доступно только для растровых данных. Этот ответ в основном дублирует ответ Крейга, но с иллюстрациями.
Крис W

1

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

Иллюстрация:
1. объедините значения всех слоев в один столбец (назовем его All_Vals) в листе Excel

  1. рядом со столбцом All_Vals добавьте два новых столбца с именами X и Y и заполните их нулями.

  2. В arcmap добавьте таблицу Excel в виде таблицы и используйте ее для создания класса точечных объектов с помощью команды / инструмента display xy data, затем экспортируйте слой событий в шейп-файл (назовем его NB_Point) и добавьте его во фрейм данных.

4 Преобразуйте файл формы NB_Point во много типов классов объектов ваших слоев, например, если тип вашего слоя объектов является полигональным, используйте инструмент буфера для создания класса объектов полигонов из файла форм NB_Point (назовем его NB_polygon).

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

Надеюсь, что это помогает и извините за любые опечатки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.