Раскрасить слой без датасета.
-
- Гуру
- Сообщения: 527
- Зарегистрирован: 21 окт 2012, 00:17
- Репутация: 15
- Ваше звание: developer
Раскрасить слой без датасета.
Есть, например, слой, который создан без использованися базы данных. Например сгенерирован из шейпфайла и дополнен точками. Можно ли его раскрасить?
Последний раз редактировалось novice 14 май 2013, 17:03, всего редактировалось 1 раз.
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Раскрасить слой без датасета.
Слой - основная часть карты. Он и предназначен для настройки внешнего вида данных, которые он визуализирует. Ответ - да. Заходите в свойства слоя и настраиваете как необходимо отобразить слой.
-
- Гуру
- Сообщения: 527
- Зарегистрирован: 21 окт 2012, 00:17
- Репутация: 15
- Ваше звание: developer
Re: Раскрасить слой без датасета.
Если это так, то как объяснить ошибку:
Код: Выделить всё
...
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 (33.4 КБ) 8641 просмотр
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Раскрасить слой без датасета.
Если вручную в ArcMap работает, значит ошибка в коде. Проверяли на этих же данных?
-
- Гуру
- Сообщения: 527
- Зарегистрирован: 21 окт 2012, 00:17
- Репутация: 15
- Ваше звание: developer
Re: Раскрасить слой без датасета.
Проблема заключается в том, что я не знаю как работает ArcMap. Его исходники закрыты, а в документации я не нашел.
Вполне возможно, что когда в ArcMap-e пользователь меняет цвет слоя, то в базе данных по умолчанию создается RasterDataset, а затем после изменения цветов удаляется.
Ошибка выскакивает, всего скорей, тогда, когда я пытаюсь создать рендерер для классификации и в качестве его параметра rasterRenderer.Raster = указываю результат операции PointDensity. Программа вылетает на обновлении рендерера
Вполне возможно, что когда в ArcMap-e пользователь меняет цвет слоя, то в базе данных по умолчанию создается RasterDataset, а затем после изменения цветов удаляется.
Ошибка выскакивает, всего скорей, тогда, когда я пытаюсь создать рендерер для классификации и в качестве его параметра rasterRenderer.Raster = указываю результат операции PointDensity. Программа вылетает на обновлении рендерера
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Раскрасить слой без датасета.
Все операции пользователя в ArcMap не связанные с редактированием данных ничего не пишут в базу данных или Shape файл. Описание того как отобразить слой записывается в файл проекта mxd.novice писал(а): Вполне возможно, что когда в ArcMap-e пользователь меняет цвет слоя, то в базе данных по умолчанию создается RasterDataset, а затем после изменения цветов удаляется.
Я не могу понять что запрограммировано, пока не увижу результата (или падения) в ArcMap.
-
- Гуру
- Сообщения: 527
- Зарегистрирован: 21 окт 2012, 00:17
- Репутация: 15
- Ваше звание: developer
Re: Раскрасить слой без датасета.
Код: Выделить всё
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;
Код: Выделить всё
rasterRenderer.Update();
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Раскрасить слой без датасета.
Повторяю в очередной раз в ArcMap расрасьте слой как вам нужно и приложите скриншот с раскрашенным слоем и окном настроек рендерера. Иначе я вам ничем помочь не смогу.
-
- Гуру
- Сообщения: 527
- Зарегистрирован: 21 окт 2012, 00:17
- Репутация: 15
- Ваше звание: developer
Re: Раскрасить слой без датасета.
Настройки рендерера
- Вложения
-
- НастройкиРендерера.GIF (74.3 КБ) 8466 просмотров
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Раскрасить слой без датасета.
Да, теперь понятно чего хочется.
По вышеприведенному коду - вроде все нормально, но смущает ряд моментов:
1. Вначале добавляется слой, а потом назначается рендерер
2. Рендерер создается после добавления слоя.
В примере рендерер назначается слою до добавления на карту (http://help.arcgis.com/en/sdk/10.0/arco ... 2tt000000/)
Я вот думаю тут надо поэкспериментировать:
1. Попробовать выполнить код со стандартным ренером
2. Создать ренедерер без добавления на карту - убедится, что не падает на Update
Еще один момент - а какая статистика у растра - интересует максимальное и минимальное значения.
По вышеприведенному коду - вроде все нормально, но смущает ряд моментов:
1. Вначале добавляется слой, а потом назначается рендерер
2. Рендерер создается после добавления слоя.
В примере рендерер назначается слою до добавления на карту (http://help.arcgis.com/en/sdk/10.0/arco ... 2tt000000/)
Я вот думаю тут надо поэкспериментировать:
1. Попробовать выполнить код со стандартным ренером
2. Создать ренедерер без добавления на карту - убедится, что не падает на Update
Еще один момент - а какая статистика у растра - интересует максимальное и минимальное значения.
-
- Гуру
- Сообщения: 527
- Зарегистрирован: 21 окт 2012, 00:17
- Репутация: 15
- Ваше звание: developer
Re: Раскрасить слой без датасета.
Под статистикой растра имелось ввиду это окно?
Слой PointDe_shp4 совпадает по способу создания и внешнему виду с результатом операции PointDensity(создали IRaster и поместили на карту как слой)
Слой PointDe_shp4 совпадает по способу создания и внешнему виду с результатом операции PointDensity(создали IRaster и поместили на карту как слой)
- Вложения
-
- Statistics.GIF (31.99 КБ) 8388 просмотров
-
- Гуру
- Сообщения: 939
- Зарегистрирован: 29 май 2011, 19:41
- Репутация: 94
- Откуда: Киев
Re: Раскрасить слой без датасета.
Нет, статистика растра - это диапазон, показывающий его минимальное и максимальное значение пикселей, в режиме рендерера Stretch, которое отображается слева в Table of Contents (там, где все добавленные слои отображаются).
Но если это мультиспектральный снимок, то поканальная статистика видна во вкладке Source (в самом низу) по каналам Band1, Band2,...

Но если это мультиспектральный снимок, то поканальная статистика видна во вкладке Source (в самом низу) по каналам Band1, Band2,...

-
- Гуру
- Сообщения: 527
- Зарегистрирован: 21 окт 2012, 00:17
- Репутация: 15
- Ваше звание: developer
Re: Раскрасить слой без датасета.
Статистика
- Вложения
-
- Теперь действительно статистика
- StatisticsRight.GIF (7.42 КБ) 8374 просмотра
- Дмитрий Барышников
- Гуру
- Сообщения: 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.
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.
-
- Гуру
- Сообщения: 939
- Зарегистрирован: 29 май 2011, 19:41
- Репутация: 94
- Откуда: Киев
Re: Раскрасить слой без датасета.
novice, тип данных (в АГ - pixel depth и pixel type) прописываются также в свойствах слоя во вкладке Source.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость