Перевести растр в точки с их действительными координатами

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Variant
Активный участник
Сообщения: 133
Зарегистрирован: 15 окт 2009, 09:14
Репутация: 42
Откуда: Москва

Перевести растр в точки с их действительными координатами

Сообщение Variant » 24 дек 2010, 16:31

Бывают задачи, где удобнее всего работать с числовыми данными в табличном виде. Например, это нужно при оценке многомерных связей или кластеризации. Существенным ограничением здесь является необходимость приведения всех данных к единой системе координат. Серьёзной проблемой становится полноценное включение в анализ данных, изначально находящихся в растровой форме. Привычные обходные манёвры, наподобие растра, снабжённого файлом привязки, здесь уже не проходят, поскольку данные должны не создавать видимость нахождения в единой системе координат, а действительно находиться в ней. Наиболее рационально представить растр в виде набора точек в глобальной координатной системе с атрибутами в виде яркостных значений каналов исходного растра в каждой из них. К сожалению, готовое решение, позволяющее реализовать это, пока нигде не попадалось. Известные мне инструменты перевод растра в точки работают в локальной системе координат растра, но тогда потом и весь анализ, и результаты - в той же условной системе координат исходного растра, так что это не самый лучший вариант.

Кто-нибудь сталкивался с решением подобных задач? Есть ли какие-нибудь инструменты (желательно свободные) для их решения? Или, может, существует какой-то другой, более простой путь, который я не учёл?

Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Перевести растр в точки с их действительными координатам

Сообщение Mavka » 24 дек 2010, 17:46

Напоминает грид
лангольеры под окном жрали время ом-ном-ном

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Перевести растр в точки с их действительными координатам

Сообщение KolesovDmitry » 24 дек 2010, 18:36

Variant писал(а):Наиболее рационально представить растр в виде набора точек в глобальной координатной системе с атрибутами в виде яркостных значений каналов исходного растра в каждой из них.
Немного непонятна задача. Почему нельзя все растры спроецировать в одну систему координат и потом работать в этой системе непосредственно с растрами? Ведь для анализа растровых данных можно привлекать все те же методы, что и для точечных, плюс еще специфические растровые операции. Казалось бы растровый анализ богаче будет...

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести растр в точки с их действительными координатам

Сообщение gamm » 24 дек 2010, 19:00

Задачи никакой нет. Достаточно экспортировать сетки в той системе, как они сделаны (чтобы не интерполировать), и использовать PROJ4 для преобразования координат точек. Видимо, нет утилит для экспорта сеток в таблицу или PROJ4. Хотя то, что описано в исходном посте, называется warp. Видимо и его нет.

Variant
Активный участник
Сообщения: 133
Зарегистрирован: 15 окт 2009, 09:14
Репутация: 42
Откуда: Москва

Re: Перевести растр в точки с их действительными координатам

Сообщение Variant » 25 дек 2010, 12:11

да, примерно так дело и обстоит

Насчёт перепроецирования всех растров: действительно, кроме пиксельных искажений это мало чего принесёт: ведь цель не совместно их визуализировать, а именно загнать в одну таблицу. То есть, даже если мы их перепроецировали, и они друг с другом визуально совпадают, то дальше их надо загнать в один многослойный растр (если уж идти по пути растров), что дополнительно внесёт погрешность передискретизации. Кстати, нормальные инструменты, позволяющие сделать это (Фотошоп и всякие его аналоги не в счёт) мне также неизвестны. На тот же многослойный растр потом, кстати, надо растеризовать и наши векторные данные и подшить их в качестве дополнительных слоёв (тоже не совсем понятно, чем это делать). Такой путь действительно есть, но на самом ли деле он проще? Две передискретизации, плюс точность всех дальнейших построений будет ограничена шагом квантования базового растра, к которому мы всё приводили. Такой путь возможен, но из-за вышеописанных недостатков я его не рассматривал. Хотя мне известны некоторые персонажи, которые реально готовят себе данные чуть ли не в Фотошопе

Векторный путь предлагает собрать наши данные в массив векторных слоёв, каждая точка которых содержит в качестве атрибутов значения своего исходного растра. Передискретизации при перепроецировании здесь удаётся избежать, поскольку массив точек это уже векторный объект, для него такая проблема отсутствует. Сведение в одну таблицу можно уже делать в табличном редакторе: взять ширину класса по X и ширину класса по Y, а потом расклассифицировать все массивы по этим критериям. Получаем полный контроль над погрешностью дискретизации, и самое главное, все результирующие построения заведомо будут пространственно привязанными

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

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Перевести растр в точки с их действительными координатам

Сообщение KolesovDmitry » 25 дек 2010, 13:34

Как мне кажется, вы просто мало знакомы с возможностями растровых ГИС, и все ваши вопросы и сомнения происходят отсюда. Попробуйте в качестве эксперимента познакомиться, скажем, с GRASS GIS -- в ней очень богатые библиотеки для работы с растрами. А пока попробую рассеять ваши сомнения.
Variant писал(а):Насчёт перепроецирования всех растров: действительно, кроме пиксельных искажений это мало чего принесёт: ведь цель не совместно их визуализировать, а именно загнать в одну таблицу. То есть, даже если мы их перепроецировали, и они друг с другом визуально совпадают, то дальше их надо загнать в один многослойный растр (если уж идти по пути растров), что дополнительно внесёт погрешность передискретизации.
Речь не идет о сборке нескольких растров в одно конечное изображение (что-то вроде RGB или стека), вовсе нет. Перепроецировав все растры в одну систему координат вы получаете возможность совместно их анализировать, собрав в "растровые слои" -- тот самый аналог таблицы, о котором вы говорите. С этими растрами можно делать все, что угодно -- регрессии, кластеризации, классификации и все-все, что только можно делать с табличными данными. Плюс к этому вы получаете дополнительно и растровые способы анализа (например, фильтрацию, анализ соседства и т.д.), которые теряются при табличном представлении.

При этом (использовании слоев, а не единого растра) не требуется обязательное приведение всех растров к одному разрешению -- используйте разрешение исходников.
Variant писал(а):На тот же многослойный растр потом, кстати, надо растеризовать и наши векторные данные и подшить их в качестве дополнительных слоёв (тоже не совсем понятно, чем это делать).
В принципе, можно растеризовать и вектор, но только не на многослойный растр, а в отдельный растровый слой и анализировать все вместе. С другой стороны, никто ведь не заставляет это делать -- можно анализировать совместно вектор+растр (см. упомянутую GRASS GIS), это вопрос удобства и задачи.
Variant писал(а):Две передискретизации, плюс точность всех дальнейших построений будет ограничена шагом квантования базового растра, к которому мы всё приводили.
При работе с растровыми данными точность всегда ограничена шагом растра: даже если вы векторизуете растр векторный слой, то его точность (точность исходников) от этого не повысится. Нужна большая точность -- придется делать интерполяцию, но ее можно делать и для векторных данных, и для растровых, так что тут вы ничего не теряете.
Variant писал(а):Векторный путь предлагает собрать наши данные в массив векторных слоёв, каждая точка которых содержит в качестве атрибутов значения своего исходного растра. Передискретизации при перепроецировании здесь удаётся избежать, поскольку массив точек это уже векторный объект, для него такая проблема отсутствует.
Тут я не совсем согласен: мне кажется, при перепроецировании вы не решаете задачу передискретизации, а "прячете": ведь ваш массив был создан на основе растра (например, точки -- центроиды ячеек), поэтому при перепроецировании вы получите те же центроиды ячеек, только в новой системе координат...

Хотя да. Если преобразование будет существенно нелинейное -- разница будет. В этом случае можно уменьшить искажения, если использовать перепроецирование не по методу "ближайшего соседа", а хотя бы линейное.
Variant писал(а):Сведение в одну таблицу можно уже делать в табличном редакторе: взять ширину класса по X и ширину класса по Y, а потом расклассифицировать все массивы по этим критериям. Получаем полный контроль над погрешностью дискретизации, и самое главное, все результирующие построения заведомо будут пространственно привязанными.
Все-таки буду настырным: познакомьтесь с растровыми ГИС, думаю, они помогут решить большую часть ваших проблем.

Variant
Активный участник
Сообщения: 133
Зарегистрирован: 15 окт 2009, 09:14
Репутация: 42
Откуда: Москва

Re: Перевести растр в точки с их действительными координатам

Сообщение Variant » 25 дек 2010, 14:32

На растровые ГИС как раз вся надежда. Сам смотрю именно в сторону GRASS GIS, но готов рассмотреть и все остальные пригодные инструменты. Но ещё раз повторюсь: есть задачи, которые удобнее решать с данными в табличной форме. Преимущественно, это задачи, где в процессе преобразований данные временно выходят из XYZ-пространства, например многофакторное распознавание и прогноз. То есть ГИС здесь выступает в роли системы накопления и подготовки данных, а потом приёма результата.
Что я пытаюсь выяснить: можно ли подготовительные операции произвести средствами имеющихся программных инструментов или надо напрягать знакомых программистов (сам я пока ещё не очень опытен по части программирования). Если есть, то какие это инструменты, в каких ГИС?

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести растр в точки с их действительными координатам

Сообщение gamm » 25 дек 2010, 14:45

Variant писал(а):да, примерно так дело и обстоит
тогда для начала можно почитать документацию статистических пакетов в R (sp, spatstat, geoR, gstat, и т.д.) - раз уж речь идет об обработке. Таблицы, о которых вы говорите, не единственная (и не обязательная) форма представления пространственных данных.

Variant
Активный участник
Сообщения: 133
Зарегистрирован: 15 окт 2009, 09:14
Репутация: 42
Откуда: Москва

Re: Перевести растр в точки с их действительными координатам

Сообщение Variant » 25 дек 2010, 15:18

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

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

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Перевести растр в точки с их действительными координатам

Сообщение ericsson » 25 дек 2010, 17:09

Ну раз хочет человек упорно бинарный формат в текст (таблицу) превратить, то может пусть себе превращает?
У GDAL есть формат XYZ, не что иное как две координаты (центр точки) и значение в ней. Для пущей серьезности можно еще для многоканальных данных это преобразование делать отдельно по каналам.
То, что уже есть готовые инструменты, это, конечно, некий аргумент. Хотя работа с разнородными (разрешение, проекция и т.п.) данными в таком виде может вылиться в еще большие проблемы, чем переписывание процедур под R.

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести растр в точки с их действительными координатам

Сообщение gamm » 25 дек 2010, 18:59

Variant писал(а):Полностью согласен. Но в отдельных случаях нужна именно такая форма. Причём, не во всех случаях анализ ограничиваются обработкой с использованием R. Некоторые процедуры слишком хлопотно переписывать на R, особенно если они уже имеются в виде готовых инструментов. Для некоторых инструментов вообще проблематично отыскать исходные тексты, однако это не мешает их использовать
Поэтому вопрос и ставится, можно ли получить данные в табличной форме на действительных координатах

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

P.S. Приведите пример процедуры, которую наиболее хлопотно переписывать в R.

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Перевести растр в точки с их действительными координатам

Сообщение gamm » 25 дек 2010, 19:06

ericsson писал(а):Хотя работа с разнородными (разрешение, проекция и т.п.) данными в таком виде может вылиться в еще большие проблемы, чем переписывание процедур под R.
а вот этого понимания пока не видно. Шишек товарищъ еще не набил, и полон оптимизма :D

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Перевести растр в точки с их действительными координатам

Сообщение ericsson » 26 дек 2010, 01:43

Ну на самом деле выглядеть это все может довольно красиво - я вот тоже могу, отвлекшись, представить себе, гхм, расширение таблиц за счет oversampling'а (до того, что какие-то значения таки совпадут, потому что размер сэмпла будет неким наименьшим общим делителем), и думать, что имея над ним контроль, держишь под контролем всю ситуацию. А фигушки вот.

Variant
Активный участник
Сообщения: 133
Зарегистрирован: 15 окт 2009, 09:14
Репутация: 42
Откуда: Москва

Re: Перевести растр в точки с их действительными координатам

Сообщение Variant » 26 дек 2010, 14:21

Похоже, я то ли непонятно объяснил с самого начала, то ли мой вопрос слишком непривычный и кажется дурацким, но я вижу некоторое непонимание. Постараюсь дать более структурированное описание проблемы:

Есть набор данных в растровой и векторной форме, характеризующих определённую область пространства. Данные характеризуются непостоянной полнотой и достоверностью. Необходимо проанализировать имеющиеся между ними связи, на основе которых провести прогноз в областях с отсутствующей исходной информацией.
Современные средства ГИС рассчитаны, в первую очередь на послойную и межслойную работу; ситуация, когда анализируются все связи между всеми данными, насколько мне известно, не является характерной. В то же время, инструменты для решения задач многофакторного распознавания и прогноза обладают средствами для решения таких задач, однако изначально не располагают всеми возможностями ГИС, требуя для своей работы уже подготовленные данные, как правило в табличной форме, где каждая строка характеризует уникальную точку пространства, а каждый столбец — определённый параметр этих точек. Это может быть как дискретное значение, показывающее принадлежность тому или иному классу векторного слоя, так и яркостной параметр одного из каналов растра. И инструменты для многофакторного анализа, и ГИС в настоящее время являются сложными интерактивными средами, поэтому вопрос включения одного в другое в виде подключаемого модуля до настоящего времени остаётся слабо проработанным, непонятно даже, кого во что рациональнее включать. Дополнительную сложность создаёт и то, что не все системы многофакторного анализа и ГИС в настоящее время являются открытыми, отдельные алгоритмы могут быть защищены патентами и т. д.
В связи с этим, в настоящее время, для решения задач распознавания и прогноза над пространственными данными с использованием сред многофакторного анализа, подготовку исходных растровых и векторных данных приходится производить с помощью внешних средств. Выше были подробно расписаны методы, применяемые в настоящее время для такой подготовки, и проблемы, которые возникают в связи с использованием тех или иных подходов
Приведите пример процедуры, которую наиболее хлопотно переписывать в R
Ну вот, какую-нибудь, например, процедуру многофакторного распознавания, особенно при отсутствии исходников

Я уверен, в будущем, ГИС и среды многофакторного анализа так или иначе срастутся, некоторые шаги в этом направлении видны уже и сейчас, но пока это два отдельных мира, и если уж не в наших силах срастить их, можно хотя бы их подружить и научить обмениваться данными между собой, без привлечения всяких сомнительных посредников типа растровых редакторов

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Перевести растр в точки с их действительными координатам

Сообщение ericsson » 26 дек 2010, 15:43

Никто тут про растровые редакторы не говорил.
Превратить растр в таблицу - элементарно (я написал, чем). Получится таблица со строками вида "координата X, координата Y, значение в этой точке".
А теперь берем два растра разного происхождения, покрывающих одну территорию, условно - один в UTM/WGS84, а другой - "географической" (и тоже в WGS84) и превращаем оба в таблицы. Далее пересчитываем для первого значения координат из UTM в градусы, чтобы координаты были в одной. А теперь делаем таблицам обычный sql join по столбцу с координатами. И получаем шиш с маслом (ну то есть несколько случайных точек, центры которых совпали) потому что исходные растры - в разных проекциях. Чтобы join получился, нужно перепроецировать оба растра в одну проекцию, сделать ресемплинг для уравнивания разрешений, выровнять центры пикселей этих растров и только тогда конвертить их оба в таблицы, которые можно будет склеить по координатам.

Ответить

Вернуться в «Общий - ПО»

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

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