Получение границы растрового изображения как многоугольника в ArcGIS Desktop?

28

У меня есть прямоугольное растровое изображение в ArcGIS Desktop.

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

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

Я попытался просто выполнить преобразование Растр-> Полигон, но он пытается использовать данные на изображении для создания контура - все, что мне нужно, это контур края изображения.

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

robintw
источник

Ответы:

33

Если у вас есть Spatial Analyst, вы можете:

  1. Умножьте растр на 0, чтобы создать растр с постоянным значением, используя Raster Calculator. (не забудьте преобразовать его в целочисленный тип или шаг 2 не будет работать)
  2. Преобразуйте результат шага 1 в полигон с помощью инструмента Растр в полигон.

Другое решение:

Если у вас есть лицензия 3D Analyst, вы можете использовать инструмент Растровый домен в разделе 3D Analyst> Конвертация> из растра (однако он не имеет функции сглаживания)

Алекс Марков
источник
12

Вы можете использовать инструмент Растровый домен из 3D Analyst, чтобы создать полигон с тем же экстентом, что и ваши растровые данные.

Andreas
источник
Добро пожаловать в ГИС ЮВ! Не могли бы вы добавить ссылки на ваш ответ? Таким образом, это было бы более солидно.
РК
Инструмент Raster Domain отлично справился со своей задачей! Создает контур или границу растровых данных.
1
Предупреждение об этом инструменте - созданный ограничивающий многоугольник - это экстент ваших растровых данных, начинающийся и заканчивающийся в центре пикселей, а не на внешнем краю пикселей. Я только попробовал это и думал, что это вернуло внешнюю ограничительную рамку растра, но когда вы увеличите масштаб, вы увидите, что ограничивающая рамка начинается в центре пикселя.
fbiles
На самом деле есть метод для метода IRasterDomainExtractor.ExtractDomain, который контролирует, использует ли он центр или внешний край пикселей / ячеек.
Престон
Это потрясающе! Один инструмент, и у меня есть контур многоугольника моего растра. Благодарность!
user3281667
11

А как насчет просто оцифровки? Клик-клик-клик-клик готово.

Matt
источник
8
Не совсем уверен, почему этот вариант был отклонен. Вы можете найти координаты углов экстента и создать вершины по этим координатам. Это может даже использоваться для анализа. Если это только для отображения, щелчок-щелчок-щелчок-щелчок отлично работает.
Балток
3
Я бы сказал, потому что растр может иметь неправильную форму и, в зависимости от сложности, может привести к довольно утомительной работе по оцифровке
Фил Хенли,
4
Но ОП сказал, что это было прямоугольное. Похоже, довольно простая работа для меня. При увеличении и точности, разница между фактическим контуром растра и оцифрованным контуром будет незначительной для любого реального применения.
Мэтт
10

Вы можете использовать инструмент Build Footprint на панели инструментов управления данными. Вы должны создать набор данных мозаики из своего растра.

Создайте новую Мозаику в Файловой базе геоданных, добавьте свой растр.

Откройте свою мозаику в ArcMap и распакуйте след.

Это то, что я бы сделал.

Дом
источник
8

Я использую этот простой скрипт на Python, он создает полигональный класс объектов с размером всего растра, присутствующего в папке. Чтобы использовать его, вы можете создать инструмент в ArcToolbox или просто изменить переменные InFolder и Dest (Destination).

import arcpy,os

InFolder = arcpy.GetParameterAsText(0)
Dest=arcpy.GetParameterAsText(1)

arcpy.env.workspace=InFolder
#The raster datasets in the input workspace
in_raster_datasets = arcpy.ListRasters()

arcpy.CreateFeatureclass_management(os.path.dirname(Dest),
                                   os.path.basename(Dest),
                                   "POLYGON")
arcpy.AddField_management(Dest,"RasterName", "String","","",250)
arcpy.AddField_management(Dest,"RasterPath", "String","","",250)

cursor = arcpy.InsertCursor(Dest)
point = arcpy.Point()
array = arcpy.Array()
corners = ["lowerLeft", "lowerRight", "upperRight", "upperLeft"]
for Ras in in_raster_datasets:
    feat = cursor.newRow()  
    r = arcpy.Raster(Ras)
    for corner in corners:    
        point.X = getattr(r.extent, "%s" % corner).X
        point.Y = getattr(r.extent, "%s" % corner).Y
        array.add(point)
    array.add(array.getObject(0))
    polygon = arcpy.Polygon(array)
    feat.shape = polygon
    feat.setValue("RasterName", Ras)
    feat.setValue("RasterPath", InFolder + "\\" + Ras)
    cursor.insertRow(feat)
    array.removeAll()
del feat
del cursor  
Джеб
источник
можете рассказать нам подробно, как использовать этот код. Я хочу использовать его в растровом файле .asc. Мои изображения разные разные подпапки.
ГИС Data Butcher
1
Ответ от Джеба сработал для меня, не хватает представителя, чтобы проголосовать за него. @GIS Data Butcher Сохраните полный источник в файл script.py и выполните его из окна Python в ArcMap. Вы можете использовать следующую команду в окне Python, чтобы выполнить скрипт из файла. > execfile (r'd: \ temp \ script.py ')
Асад
идеальный!! Интересно, есть ли способ для инструмента читать подпапки, а?
Рафаэль
@raphael, конечно, вам просто нужно реализовать стандартный python os.listdir или os.walk в скрипте.
Джеб
@ Jeb Да, я понял ... бот, я очень новичок в этом, и не мог заставить его работать ... Вы можете помочь?
Рафаэль
4

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

Адриан Кроитор
источник
4

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

  • Получить maxX, maxY, minX, minY (это можно сделать в Python с помощью команды description)
  • Запустите Create Fishnet с экстентом, как указано выше, и количеством строк / столбцов, как 1

Если у вас много растров, это должно быть сделано в Python и может создать сотни следов за считанные секунды.

Фелиция Фицджеральд
источник
0

В ArcCatalog вы можете создать каталог растров в .gdb (Инструменты управления данными-> Растр). Неуправляемый это хорошо. Затем щелкните правой кнопкой мыши и загрузите (если растры просто находятся в папке, то «загрузить из рабочей области». Если вы загрузите каталог растров в ArcMap, вы можете щелкнуть правой кнопкой мыши -> data-> export footprint, как файл формы или класс объектов. Файл формы будет иметь поле «имя», заполненное именем растра.

Каталог растров автоматически отобразит экстенты, но мне нужно было отправить экстенты тому, кто не использовал ArcGIS.

SgtSchultz
источник
0

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

Boyle300
источник
8
Вы уверены, что это не просто создает огромный беспорядок полигонов, по одному на каждый непрерывный набор пикселей равного значения в исходном изображении?
whuber
После этого вы всегда можете добавить растворение, чтобы получить степень Poly. Тем не менее, держу пари, что решение на python, указанное @jeb, работает быстрее.
GeoJohn
0

Инструмент «Растровый домен» создаст многоугольник вокруг растра неправильной формы. Я считаю, что это требует лицензии для расширения 3d-аналитика.

RWRogers
источник
0

Использование ArcCatalog - лучший вариант. Создайте набор данных мозаики из доступных растров. Определите «NO VALUE» в мозаике, чтобы избежать включения фона растра в многоугольник. Построить следы, используя радиометрический метод. Откройте набор данных Mosaic в ArcGIS и экспортируйте Footprints в файл shp. Отличный способ получить границы мозаики ...

user109590
источник
0

Если вы пытаетесь получить схему растра DEM, вам нужно будет сделать следующее

Если у вас есть Spatial Analyst и 3d Analyst, то вы можете:

  1. умножьте растр на 0, чтобы создать растр с постоянным значением, используя Raster Calculator.
  2. Преобразуйте результаты шага 1 в растровое целое число, используя «INT (Инструмент)». Это необходимо для следующего шага.
  3. преобразовать результат шага 2 в полигон с помощью инструмента Растр в полигон (работает только с растровыми целыми числами).
seamster02
источник
Привет Seamster02, добро пожаловать в GIS Stack Exchange :) Как написано, это не заметно отличается от принятого ответа, gis.stackexchange.com/a/22016/108 .
Мэтт Уилки