gdaltindex как использовать

fynjy888
Интересующийся
Сообщения: 35
Зарегистрирован: 06 июл 2015, 23:01
Репутация: 2

gdaltindex как использовать

Сообщение fynjy888 » 03 апр 2016, 23:51

Приветствую, вопрос про gdaltindex, не понимаю как им пользоваться. Есть нарезанный на тайлы растр, тайлы соответственно хранятся в папках z/x/y.png. Собственно вопрос, а как для них построить сетку в шейпе для mapserver'a если они находятся в папках?

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

gdaltindex wm_index.shp tiles/*.png
- этот код из примера выдаёт

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

ERROR 4: `tiles/*.png' does not exist in the file system,
and is not recognised as a supported dataset name.
что логично, ведь файлов конкретно в tiles/ конечно нет. Они находятся в tiles/z/x. Вопрос: что я делаю не так? Нужно было прописывать в названии файла {z}x{x}x{y}.png, если так, то через "x" ли? Может через точку {z}.{x}.{y}.png? Как именно съест mapserver?

P.S. Извините, если очень большие глупости спрашиваю

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: gdaltindex как использовать

Сообщение Boris » 05 апр 2016, 15:57

Поскольку ответа на формально простой вопрос не последовало, вас - не поняли. Я - точно.
Давайте еще разок:
1. в какой ОС работаем?
2. как именно выглядит структура каталогов (команду DIR /S или что там есть в Linux)
3. что нужно получить?
Как мне известно gdaltindex с подкаталогами не работает, но позволяет вставить много исходных источников в командную строку. С учетом того, что есть параметр "--optfile", который позволяет читать командную строку из файла, передать можно много(не знаю сколько) каталогов для простмотра.

fynjy888
Интересующийся
Сообщения: 35
Зарегистрирован: 06 июл 2015, 23:01
Репутация: 2

Re: gdaltindex как использовать

Сообщение fynjy888 » 05 апр 2016, 19:51

Согласен, пишу поподробнее:

Изучаю статью http://gis-lab.info/qa/mapserver-begin.html Начало работы с MapServer. Пункт про растровый слой. У меня есть растр порезанный на тайлы, которые находятся в подпапках {z}/{x}/{y}.png

Что сказанно в статье:
создается shp-файл, хранящий полигоны - границы, по которым растр был разрезан на части. При этом в атрибутах каждого полигона хранится название файла, в котором содержится соответствующий кусочек растра.

операцию создания индексного shp-файла можно проделать автоматически при помощи программы gdaltindex (часть пакета GDAL). Параметры использования:

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

gdaltindex [-tileindex имя_поля] имя_индексного_файла [имя_растров]*
Например:

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

gdaltindex wm_index.shp WorldMap/*.tif
Пытаюсь сделать этот индексный shp-файл. Однако не понимаю как его сделать, если учесть что у меня всё в каталогах и подкаталогах.
ОС: Windows 10

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: gdaltindex как использовать

Сообщение Boris » 05 апр 2016, 20:50

fynjy888 писал(а):тайлы, которые находятся в подпапках {z}/{x}/{y}.png
Я вот эту часть не понимаю - хотелось бы увидеть "DIR /b/s *.png" хотя бы 5 строчек. Или не понимаю проблему. На сколько я помню, результат gdaltindex прост как мычание - вектор 4 угла растра, единственное атрибутное поле - название файла с растром.
Что мешает перечислить все папки с растрами в командной строке?
Я проверил вот такая команда для 5 каталогов:

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

gdaltindex -f "Mapinfo File" index.mif "DS_SPOT6_201306040809096_E037N55_03901_itog_new/*.tif" DS_SPOT6_201405180832375_E037N55_02845_itog_new/*.tif DS_SPOT6_201409150810137_E037N56_03089_itog_new/*.tif DS_SPOT6_201409150810367_E038N56_03251_itog_new/*.tif DS_SPOT6_201409150811403_E037N56_01140_itog_new/*.tif 
дала вот такой mif/mid:
"DS_SPOT6_201306040809096_E037N55_03901_itog_new/DS_SPOT6_20130604_E037N55_03901_orto_rgbn_16bit_1.X1.Y1.tif"
"DS_SPOT6_201306040809096_E037N55_03901_itog_new/DS_SPOT6_20130604_E037N55_03901_orto_rgbn_16bit_1.X1.Y2.tif"
"DS_SPOT6_201306040809096_E037N55_03901_itog_new/DS_SPOT6_20130604_E037N55_03901_orto_rgbn_16bit_2.tif"
"DS_SPOT6_201306040809096_E037N55_03901_itog_new/DS_SPOT6_20130604_E037N55_03901_orto_rgbn_16bit_3.tif"
"DS_SPOT6_201306040809096_E037N55_03901_itog_new
...
"DS_SPOT6_201409150811403_E037N56_01140_itog_new/DS_SPOT6_20140915_E037N56_01140_orto_rgbn_16bit_2.X1.Y4.tif"
"DS_SPOT6_201409150811403_E037N56_01140_itog_new/DS_SPOT6_20140915_E037N56_01140_orto_rgbn_16bit_3.tif"
25 файлов из 5 каталогов.
PS
Мне казалось, что в GDAL есть собственная "нарезалка" на тайлы, которая одновременно сохраняет и требуемый для MapServer'а векторный файл.

fynjy888
Интересующийся
Сообщения: 35
Зарегистрирован: 06 июл 2015, 23:01
Репутация: 2

Re: gdaltindex как использовать

Сообщение fynjy888 » 05 апр 2016, 21:49

Dir'ом не очень удобно перекопировать тут. Суть папок:

tiles\0\0\0.png
tiles\1\0\0.png
tiles\1\0\1.png
tiles\1\1\0.png
tiles\1\1\1.png
...

tiles\5\23\28.png
tiles\5\23\29.png
tiles\5\23\30.png
и т.д.
То есть первый каталог задаёт zoom (уровень Z), дальше внутри каталога Z задаётся X и уже название файла Y. gdal2tiles я так понимаю именно так и делает. Прошерстить gdaltindex'ом все каталоги не видится возможным, в этом и наверное вопрос, надо было как-то прописывать в названии, а не в каталогах, все 3 координаты тайлов?

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: gdaltindex как использовать

Сообщение Boris » 05 апр 2016, 22:46

for /d %b in (*.*) do for /d %c in ("%~fb\*.*") do gdaltindex index.shp "%~fc/*.tif"
хотел написать еще как сливать много SHP В один, но оказалось, что "gdaltindex" для SHP, в отличии от MIF, это прекрасно делает и сам :wink:
Для PNG я не делал, поскольку не имею их в подкаталогах, но надеюсь, что их обработка не отличается от TIF.

fynjy888
Интересующийся
Сообщения: 35
Зарегистрирован: 06 июл 2015, 23:01
Репутация: 2

Re: gdaltindex как использовать

Сообщение fynjy888 » 05 апр 2016, 23:04

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

Unable to open C:\OSGeo4W64\tiles\0\*.png, skipping.

C:\OSGeo4W64>gdaltindex index.shp "C:\OSGeo4W64\tiles\1\*.png"
ERROR 4: `C:\OSGeo4W64\tiles\1\*.png' does not exist in the file system,
and is not recognised as a supported dataset name.

Unable to open C:\OSGeo4W64\tiles\1\*.png, skipping.

C:\OSGeo4W64>gdaltindex index.shp "C:\OSGeo4W64\tiles\2\*.png"
ERROR 4: `C:\OSGeo4W64\tiles\2\*.png' does not exist in the file system,
and is not recognised as a supported dataset name.

Что-то похожее, но наверно нужен еще подкаталог ниже. В конце вместо "%~fc/*.tif" - "%~fc\*.png" - это всё что понял, что поправить, остальное нет :oops: . И еще вопрос, даже если он войдёт в подуровень ниже, что именно запишет в location? только имя "0","1" и т.д. Или всё-таки полное через точки? 0.2.5 - такое? И съест ли mapserver? В этом и сомнения и нету никакого описания этого вопроса ни в инструкции к GDAL'у ни к mapserver'у - вот что самое обидние

P.S. Boris, огромное спасибо за отклик!
Последний раз редактировалось fynjy888 05 апр 2016, 23:06, всего редактировалось 1 раз.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: gdaltindex как использовать

Сообщение Ariki » 05 апр 2016, 23:05

Всё равно непонятно, почему бы не сделать так:

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

gdaltindex -f "Mapinfo File" index.mif "tiles/*/*/*.png"
Или вот ещё вариант.

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

fynjy888
Интересующийся
Сообщения: 35
Зарегистрирован: 06 июл 2015, 23:01
Репутация: 2

Re: gdaltindex как использовать

Сообщение fynjy888 » 05 апр 2016, 23:15

Ariki писал(а):Всё равно непонятно, почему бы не сделать так:

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

gdaltindex -f "Mapinfo File" index.mif "tiles/*/*/*.png"
Или вот ещё вариант.

Но всё это, конечно, если тайлы геопривязанные. В противном случае придётся сформировать список тайлов с путями к файлам, загнать его в какую-нибудь ГИС и там уже вычислять картографические координаты на основе тайловых.
Подождите, а вставить тайлы и тупо EXTENT для слоя не выйдет? :D

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: gdaltindex как использовать

Сообщение Ariki » 05 апр 2016, 23:20

А вообще зачем вся эта затея с MapServer, если растр уже порезан на стандартные тайлы? Запихнуть их в обычный веб-сервер, и вот вам готовый тайловый сервис.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: gdaltindex как использовать

Сообщение Boris » 05 апр 2016, 23:30

Ariki писал(а):Всё равно непонятно, почему бы не сделать так:

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

gdaltindex -f "Mapinfo File" index.mif "tiles/*/*/*.png"
Или вот ещё вариант.
Я же не зря спросил какая ОС. Множественные *, а равно * в именах каталогов, командная строка Windows не понимает. Хотя в 10-ке я не проверял, может в ней уже все улучшено до bash ?

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

F:\>gdaltindex -f "Mapinfo File" index.mif "./*/*/*.tif"
Creating new index file...
ERROR 4: `./*/*/*.tif' does not exist in the file system,
and is not recognised as a supported dataset name.

ERROR 4: `./*/*/*.tif' does not exist in the file system,
and is not recognised as a supported dataset name.

Unable to open ./*/*/*.tif, skipping.
Второй совет ..., где то я его уже видел , по моему тут :
С учетом того, что есть параметр "--optfile", который позволяет читать командную строку из файла, передать можно много(не знаю сколько) каталогов для простмотра.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: gdaltindex как использовать

Сообщение Ariki » 05 апр 2016, 23:57

Ага, не заметил, каюсь. Что касается сложных масок - сам честно проверил работоспособность на том, что под рукой (а под рукой оказался Linux). В Windows bash обещают к лету, но есть же MSYS, он даже с QGIS ставится вместе.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: gdaltindex как использовать

Сообщение Boris » 06 апр 2016, 00:03

Сорри, за флуд:
Забавная новость! Спор, что лучше Win или Linux, приобретет все черты религиозных разногласий - "как правильно разбивать яйцо - с тупой или с острой стороны?"

fynjy888
Интересующийся
Сообщения: 35
Зарегистрирован: 06 июл 2015, 23:01
Репутация: 2

Re: gdaltindex как использовать

Сообщение fynjy888 » 08 апр 2016, 18:01

Boris писал(а):
for /d %b in (*.*) do for /d %c in ("%~fb\*.*") do gdaltindex index.shp "%~fc/*.tif"
хотел написать еще как сливать много SHP В один, но оказалось, что "gdaltindex" для SHP, в отличии от MIF, это прекрасно делает и сам :wink:
Для PNG я не делал, поскольку не имею их в подкаталогах, но надеюсь, что их обработка не отличается от TIF.
Вроде пройтись по файлам получилось, однако в location ничего не записалось.

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

It appears no georeferencing is available for
И опять таки не могу понять, а что именно туда должно быть записано? Я так понимаю полный путь к файлу через / (то есть например 4/3/8.png)? И как именно это можно привязать к координатам, если учесть что там несколько Z уровней? С помощью банального EXTENT я так понимаю не выйдет. Нужно было изначально делать геопривязанные тайлы? Брать какой-нибудь GeoTiff и резать на тайлы при помощи gdal2tiles?
Я извиняюсь за такое количество вопросов, просто никакой информации как сделать индексный shp нету ни в документации mapserver, ни в описании gdaltindex. Только один пример команды и всё.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: gdaltindex как использовать

Сообщение Denis Rykov » 08 апр 2016, 18:27

Предположим есть у вас большое количество геопривязанных растров, чтобы отобразить их в MapServer - нужно каждый растр описать внутри отдельного блока LAYER внутри map-файла, предположим у вас тысяча таких файлов - вы готовы описывать такой файл? Правильно - нет. Тут на помощь приходит gdaltindex - вы просто натравливаете его на директорию с растрами и получаете шейп файл, в котором в качестве геометрии выступают полигоны, соответствующие границам растров + атрибут, содержащий путь до соответствующего растра. И в этом случае подключение всего этого добра в MapServer сводится к блоку:

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

LAYER
    NAME "Imagery"
    STATUS ON
    TYPE RASTER
    TILEINDEX "tileindex.shp"
    TILEITEM "LOCATION"
END
где TILEINDEX - шейпфайл, сгенерированный gdaltindex-ом, а TILEITEM - название поля, содержащее путь до растров, если оно равно "LOCATION", то может быть опущено.


Если у вас уже отрендеренные тайлы, спрашивается зачем вам gdaltindex и зачем MapServer - что вы собрались им рендерить? Опишите свою задачу. И ещё - документацию читайте, там всё написано.
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «GDAL/OGR»

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

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