Раскрасить слой без датасета.

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Раскрасить слой без датасета.

Сообщение novice »

Есть, например, слой, который создан без использованися базы данных. Например сгенерирован из шейпфайла и дополнен точками. Можно ли его раскрасить?
Последний раз редактировалось novice 14 май 2013, 17:03, всего редактировалось 1 раз.
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Раскрасить слой без датасета.

Сообщение Дмитрий Барышников »

Слой - основная часть карты. Он и предназначен для настройки внешнего вида данных, которые он визуализирует. Ответ - да. Заходите в свойства слоя и настраиваете как необходимо отобразить слой.
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Раскрасить слой без датасета.

Сообщение novice »

Если это так, то как объяснить ошибку:

Код: Выделить всё

...
                IRaster raster = (IRaster)pDensityOP.PointDensity((IGeoDataset)featureClass, rasterNeighbo, ref Missing); // построили интерполированное изображение

                IRasterLayer rasterLayer = new RasterLayer();
                rasterLayer.CreateFromRaster(raster);

                ILayerEffects pLayerEffects = null;
                pLayerEffects = (ILayerEffects)rasterLayer;
                if (pLayerEffects.SupportsTransparency)
                    pLayerEffects.Transparency = 30;

                IMap map = Map1.ActiveView.FocusMap;
                map.AddLayer(rasterLayer); // добавили изображение на карту

                //начинаем создавать ренедерер
                IRasterClassifyColorRampRenderer classifyRenderer = new
                    RasterClassifyColorRampRenderer();
                IRasterRenderer rasterRenderer = (IRasterRenderer)classifyRenderer;

                rasterRenderer.Raster = raster;      // я думаю что проблема в этом участке, т.к. у класса, реализующего этот интерфейс, нет датасета 
                classifyRenderer.ClassCount = 3;
                rasterRenderer.Update();     // вот здесь вылетает ошибка
...
Вложения
ОшибкаНеПонятная.GIF
ОшибкаНеПонятная.GIF (33.4 КБ) 8629 просмотров
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Раскрасить слой без датасета.

Сообщение Дмитрий Барышников »

Если вручную в ArcMap работает, значит ошибка в коде. Проверяли на этих же данных?
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Раскрасить слой без датасета.

Сообщение novice »

Проблема заключается в том, что я не знаю как работает ArcMap. Его исходники закрыты, а в документации я не нашел.
Вполне возможно, что когда в ArcMap-e пользователь меняет цвет слоя, то в базе данных по умолчанию создается RasterDataset, а затем после изменения цветов удаляется.

Ошибка выскакивает, всего скорей, тогда, когда я пытаюсь создать рендерер для классификации и в качестве его параметра rasterRenderer.Raster = указываю результат операции PointDensity. Программа вылетает на обновлении рендерера
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Раскрасить слой без датасета.

Сообщение Дмитрий Барышников »

novice писал(а): Вполне возможно, что когда в ArcMap-e пользователь меняет цвет слоя, то в базе данных по умолчанию создается RasterDataset, а затем после изменения цветов удаляется.
Все операции пользователя в ArcMap не связанные с редактированием данных ничего не пишут в базу данных или Shape файл. Описание того как отобразить слой записывается в файл проекта mxd.

Я не могу понять что запрограммировано, пока не увижу результата (или падения) в ArcMap.
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Раскрасить слой без датасета.

Сообщение novice »

Код: Выделить всё

IRaster raster = (IRaster)pDensityOP.PointDensity((IGeoDataset)featureClass, rasterNeighbo, ref Missing); // на этом этапе изображение построено корректно(в ArcMap и в программе - одинаково выглядит), его можно добавить на карту и т.д.
Далее хочу применить рендерер для классификации.
http://help.arcgis.com/en/sdk/10.0/arco ... 267000000/ - описание, как создать renderer

Я убрал 3 и 4 строку и вместо них написал

Код: Выделить всё

rasterRenderer.Raster = raster;
Вылет происходит на 6 строке кода

Код: Выделить всё

rasterRenderer.Update();
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Раскрасить слой без датасета.

Сообщение Дмитрий Барышников »

Повторяю в очередной раз в ArcMap расрасьте слой как вам нужно и приложите скриншот с раскрашенным слоем и окном настроек рендерера. Иначе я вам ничем помочь не смогу.
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Раскрасить слой без датасета.

Сообщение novice »

Настройки рендерера
Вложения
НастройкиРендерера.GIF
НастройкиРендерера.GIF (74.3 КБ) 8454 просмотра
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Раскрасить слой без датасета.

Сообщение Дмитрий Барышников »

Да, теперь понятно чего хочется.
По вышеприведенному коду - вроде все нормально, но смущает ряд моментов:
1. Вначале добавляется слой, а потом назначается рендерер
2. Рендерер создается после добавления слоя.

В примере рендерер назначается слою до добавления на карту (http://help.arcgis.com/en/sdk/10.0/arco ... 2tt000000/)
Я вот думаю тут надо поэкспериментировать:
1. Попробовать выполнить код со стандартным ренером
2. Создать ренедерер без добавления на карту - убедится, что не падает на Update

Еще один момент - а какая статистика у растра - интересует максимальное и минимальное значения.
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Раскрасить слой без датасета.

Сообщение novice »

Под статистикой растра имелось ввиду это окно?
Слой PointDe_shp4 совпадает по способу создания и внешнему виду с результатом операции PointDensity(создали IRaster и поместили на карту как слой)
Вложения
Statistics.GIF
Statistics.GIF (31.99 КБ) 8376 просмотров
dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Раскрасить слой без датасета.

Сообщение dime1 »

Нет, статистика растра - это диапазон, показывающий его минимальное и максимальное значение пикселей, в режиме рендерера Stretch, которое отображается слева в Table of Contents (там, где все добавленные слои отображаются).
Но если это мультиспектральный снимок, то поканальная статистика видна во вкладке Source (в самом низу) по каналам Band1, Band2,...
:D
novice
Гуру
Сообщения: 527
Зарегистрирован: 21 окт 2012, 00:17
Репутация: 15
Ваше звание: developer

Re: Раскрасить слой без датасета.

Сообщение novice »

Статистика
Вложения
Теперь действительно статистика
Теперь действительно статистика
StatisticsRight.GIF (7.42 КБ) 8362 просмотра
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Раскрасить слой без датасета.

Сообщение Дмитрий Барышников »

Да, значения мелковаты. А тип данных в растре какой? Возможные значения:
1_BIT—A 1-bit unsigned integer. The values can be 0 or 1.
2_BIT—A 2-bit unsigned integer. The values supported can be from 0 to 3.
4_BIT—A 4-bit unsigned integer. The values supported can be from 0 to 15.
8_BIT_UNSIGNED—An unsigned 8-bit data type. The values supported can be from 0 to 255.
8_BIT_SIGNED—A signed 8-bit data type. The values supported can be from -128 to 127.
16_BIT_UNSIGNED—A 16-bit unsigned data type. The values can range from 0 to 65,535.
16_BIT_SIGNED—A 16-bit signed data type. The values can range from -32,768 to 32,767.
32_BIT_UNSIGNED—A 32-bit unsigned data type. The values can range from 0 to 4,294,967,295.
32_BIT_SIGNED—A 32-bit signed data type. The values can range from -2,147,483,648 to 2,147,483,647.
32_BIT_FLOAT—A 32-bit data type supporting decimals.
64_BIT—A 64-bit data type supporting decimals.

По идее должно быть 32_BIT_FLOAT.
dime1
Гуру
Сообщения: 939
Зарегистрирован: 29 май 2011, 19:41
Репутация: 94
Откуда: Киев

Re: Раскрасить слой без датасета.

Сообщение dime1 »

novice, тип данных (в АГ - pixel depth и pixel type) прописываются также в свойствах слоя во вкладке Source.
Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость