Страница 1 из 1
Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 22:27
Odd-Bird
Доброй ночи всем! Я пытаюсь решить очень сложную задачу, а именно - извлечь координаты углов клеток в растре GeoTiff. Проблема, собственно, состоит только в том, что растр этот очень большой; конечно, его можно разбить на части, преобразовать их в полигоны функцией rasterToPolygon(){raster} и извлечь из них координаты, но это займет чрезвычайно много времени.
Если кто-нибудь сталкивался с такой задачей - посоветуйте, пожалуйста: стоит ли пытаться решить ее в R или лучше воспользоваться другими программами, и какими именно?..
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 22:36
Максим Дубинин
Ваша очень сложная задача не выглядит как очень сложная
Если вам нужны координаты углов пикселей, то почему бы вам просто их не нагенерировать циклом, зная координаты верхнего левого угла и разрешение. Это можно сделать абсолютно где угодно, хоть в cmd.
Ну и непонятно в каком виде нужен результат.
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 23:09
Odd-Bird
Максим Дубинин писал(а):
Если вам нужны координаты углов пикселей, то почему бы вам просто их не нагенерировать циклом, зная координаты верхнего левого угла и разрешение. Это можно сделать абсолютно где угодно, хоть в cmd.
Ну и непонятно в каком виде нужен результат.
Я построил простейший цикл, он обсчитывает координаты со скоростью пикселя в секунду; 8 миллиардов пикселей (300-метровая карта мира) будут обсчитываться примерно 130 лет

.
А нужно все в виде простейшей таблицы (четыре строки с координатами углов на пиксель плюс колонки с номером пикселя и значением соответствующей ячейки растра).
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 23:11
Odd-Bird
Максим Дубинин писал(а):Ваша очень сложная задача не выглядит как очень сложная
Если вам нужны координаты углов пикселей, то почему бы вам просто их не нагенерировать циклом, зная координаты верхнего левого угла и разрешение. Это можно сделать абсолютно где угодно, хоть в cmd.
Ну и непонятно в каком виде нужен результат.
Да, проблема еще в том, что пиксели на сфере не идеально квадратные, и их размер варьирует в разных широтах.
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 23:27
Александр Мурый
Распишите подробнее, что за растр, какая система координат, какие именно "углы клеток" надо найти?
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 23:42
sergsh
8 миллиардов пикселей будут иметь 32 миллиарда координат углов ...
а может проще все же вычислять каждый раз 4 координаты для нужного пикселя, и не хранить их все ?
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 23:47
Odd-Bird
Растр Land Cover Maps отсюда:
http://maps.elie.ucl.ac.be/CCI/viewer/download.php (GeoTiff ~4 Гб)
Система координат longlat, эллипсоид wgs84.
Мне нужно, чтобы значения из этого растра можно было бы извлекать средствами базы данных. Для этого нужно преобразовать его в таблицу с координатами углов ячеек или центроидов. Как это сделать на небольшом растре - я знаю, проблема только с повышением эффективности в случае большого файла.
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 23:48
Odd-Bird
sergsh писал(а):а может проще все же вычислять каждый раз 4 координаты для нужного пикселя, и не хранить их все ?
Пиксели неравного размера, вычислять их координаты не получится - только считывать.
Re: Координаты углов клеток в очень большом растре
Добавлено: 20 авг 2015, 23:53
Odd-Bird
В общем, я решил ограничиться координатами центров пикселей.
Re: Координаты углов клеток в очень большом растре
Добавлено: 21 авг 2015, 10:46
sergsh
Спасибо за ссылку, интересные данные.
Re: Координаты углов клеток в очень большом растре
Добавлено: 21 авг 2015, 11:26
gamm
Odd-Bird писал(а):Проблема, собственно, состоит только в том, что растр этот очень большой;
проблема собственно в том, что никакие координаты ячеек вам хранить не нужно, поскольку растр и придуман для того, чтобы хранить только два 2-3 угла, и шаг сетки, а все остальное вычислять 4 действиями арифметики вместо SQL запросов. Если растр у вас в lon/lat, то достаточно просто перевести координаты в lon/lat, и вычислить номер ячейки/ячеек, куда они попадают. Т.е. от всей сетки вам нужно хранить 8 чисел, независимо от размера растра ... ну, может еще строку проекции. Пересечения ячеек с полигонами тоже быстро вычисляются без запросов (заметанием), с линиями - та же картина.