Страница 1 из 2

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

Добавлено: 16 апр 2013, 17:23
novice
Есть, например, слой, который создан без использованися базы данных. Например сгенерирован из шейпфайла и дополнен точками. Можно ли его раскрасить?

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

Добавлено: 16 апр 2013, 20:36
Дмитрий Барышников
Слой - основная часть карты. Он и предназначен для настройки внешнего вида данных, которые он визуализирует. Ответ - да. Заходите в свойства слоя и настраиваете как необходимо отобразить слой.

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

Добавлено: 17 апр 2013, 08:22
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();     // вот здесь вылетает ошибка
...

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

Добавлено: 17 апр 2013, 14:02
Дмитрий Барышников
Если вручную в ArcMap работает, значит ошибка в коде. Проверяли на этих же данных?

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

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

Ошибка выскакивает, всего скорей, тогда, когда я пытаюсь создать рендерер для классификации и в качестве его параметра rasterRenderer.Raster = указываю результат операции PointDensity. Программа вылетает на обновлении рендерера

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

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

Я не могу понять что запрограммировано, пока не увижу результата (или падения) в ArcMap.

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

Добавлено: 17 апр 2013, 16:32
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();

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

Добавлено: 20 апр 2013, 19:24
Дмитрий Барышников
Повторяю в очередной раз в ArcMap расрасьте слой как вам нужно и приложите скриншот с раскрашенным слоем и окном настроек рендерера. Иначе я вам ничем помочь не смогу.

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

Добавлено: 22 апр 2013, 11:13
novice
Настройки рендерера

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

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

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

Еще один момент - а какая статистика у растра - интересует максимальное и минимальное значения.

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

Добавлено: 24 апр 2013, 17:17
novice
Под статистикой растра имелось ввиду это окно?
Слой PointDe_shp4 совпадает по способу создания и внешнему виду с результатом операции PointDensity(создали IRaster и поместили на карту как слой)

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

Добавлено: 24 апр 2013, 17:35
dime1
Нет, статистика растра - это диапазон, показывающий его минимальное и максимальное значение пикселей, в режиме рендерера Stretch, которое отображается слева в Table of Contents (там, где все добавленные слои отображаются).
Но если это мультиспектральный снимок, то поканальная статистика видна во вкладке Source (в самом низу) по каналам Band1, Band2,...
:D

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

Добавлено: 24 апр 2013, 18:10
novice
Статистика

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

Добавлено: 24 апр 2013, 20:25
Дмитрий Барышников
Да, значения мелковаты. А тип данных в растре какой? Возможные значения:
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.

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

Добавлено: 25 апр 2013, 10:10
dime1
novice, тип данных (в АГ - pixel depth и pixel type) прописываются также в свойствах слоя во вкладке Source.