<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SergeyRyzhkov</id>
	<title>GIS-Lab - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SergeyRyzhkov"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/w/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/SergeyRyzhkov"/>
	<updated>2026-06-23T01:25:31Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9D%D0%B0%D1%80%D0%B5%D0%B7%D0%BA%D0%B0_%D1%82%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8%D0%B7_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B2_MrSID_c_*.tab_%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9&amp;diff=21474</id>
		<title>Нарезка тайлов из растров MrSID c *.tab привязкой</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9D%D0%B0%D1%80%D0%B5%D0%B7%D0%BA%D0%B0_%D1%82%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8%D0%B7_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B2_MrSID_c_*.tab_%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9&amp;diff=21474"/>
		<updated>2015-03-20T12:04:04Z</updated>

		<summary type="html">&lt;p&gt;SergeyRyzhkov: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак была задача сформировать тайловый массив в файловой системе в формате .../Z/X/Y.png (не TMS!)&lt;br /&gt;
Исходными данными был набор растров в формате *.sid (MrSID) с фалами привязки в формате *.tab (MapInfo).&lt;br /&gt;
При этом система координат отсутствует, вернее - CoordSys Nonearth Units &amp;quot;m&amp;quot; , сами координаты в МКС-64&lt;br /&gt;
&lt;br /&gt;
Сразу ринулся естественно к GDAL.&lt;br /&gt;
Не имея достаточного опыта работы с GDAL,&lt;br /&gt;
в голове изначально был следующий алгоритм (не совсем неправильный):&lt;br /&gt;
1. Преобразовать все *.sid в GeoTIFF&lt;br /&gt;
2. Объединить все полученные на п1 в единый&lt;br /&gt;
4. Для единого растра назначить СК, а затем перепроецировать в EPSG:3857&lt;br /&gt;
5. Нарезать тайлы с использованием gdal2tiles&lt;br /&gt;
&lt;br /&gt;
Не получилось, а именно&lt;br /&gt;
1. Файлы привязки *.tab не &amp;quot;схватывались&amp;quot;&lt;br /&gt;
2. Когда разобрался с п1, объединение шло очень долго&lt;br /&gt;
3. После перпроецирования получился артифакт, небольшой поворот и черная неравномерная окантовка вокруг растра&lt;br /&gt;
4. gdal2tiles &amp;quot;генерит&amp;quot; согласно спецификации TMS. То есть направление оси Y с юга на север&lt;br /&gt;
&lt;br /&gt;
Не буду долго описывать ход экспериментов и т.д., сразу напишу как я сделал (но тоже не факт что оптимально)&lt;br /&gt;
Примеры кода будут под винду, bat-команды (я образно)&lt;br /&gt;
&lt;br /&gt;
1. GDAL при конвертации и т.д. использует геопривязку. При этом если геопривязка есть в самом файле, то внешние файлы привязки, например *.tab игнорируются&lt;br /&gt;
Решение: Убираем геопривязку из файлов *.sid&lt;br /&gt;
&lt;br /&gt;
Код&lt;br /&gt;
    rem Обязательно с параметром -co &amp;quot;PROFILE=BASELINE&amp;quot;,&lt;br /&gt;
    rem Иначе геопривзяка из файла не будет удалена и дальнейшие команды не будут использовать фалы привязки&lt;br /&gt;
    for %%f in (*.sid) do (&lt;br /&gt;
       gdal_translate -co &amp;quot;PROFILE=BASELINE&amp;quot; -q %%f %%~nf.tif&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. GDAL, как и, например, QGIS, ArcGIS, прекрасно работаю с так называемыми виртуальными наборами растров (VRT), которые представляют из себя просто XML. То есть нет необходимости мержить (объединять) все растры в один, чтобы потом использовать для других операций.&lt;br /&gt;
&lt;br /&gt;
Код&lt;br /&gt;
    rem Построение виртуального набора растров для всех полученных *.tif&lt;br /&gt;
    rem Назначение системы координат с геопривязкой &amp;quot;внтури&amp;quot; файла&lt;br /&gt;
    rem В данном случае уже будут использоваться файлы геопривязки&lt;br /&gt;
    gdalbuildvrt -overwrite -q -a_srs &amp;quot;+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=... +y_0=... +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22 +units=m +no_defs&amp;quot; -vrtnodata &amp;quot;255 255 255&amp;quot; -hidenodata -resolution highest MergedMsk.vrt *.tif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При этом устанавливаем параметры для сокрытия пустых областей&lt;br /&gt;
&lt;br /&gt;
3. Дабы избежать артефакта черной каймы в результирующем растре, оказывается можно не делать перепроицирование в в EPSG:3857, а сразу отдать виртуальный набор растров скрипту gdal2tiles&lt;br /&gt;
То есть вот так делать не обязательно, и не надо&lt;br /&gt;
&lt;br /&gt;
Код&lt;br /&gt;
    rem Перепроецирование виртуального набора растров&lt;br /&gt;
    rem gdalwarp -of VRT -overwrite -t_srs EPSG:3857 MergedMsk.vrt Merged3857.vrt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сразу &amp;quot;генерим&amp;quot; растры модифицированным питон-скриптом:&lt;br /&gt;
&lt;br /&gt;
Код: Выделить всё&lt;br /&gt;
    rem Создание тайлового кэша. Используется модифицированный код, так как стандартный в схеме TMS&lt;br /&gt;
    python C:\_Work\_Projects\nRsn\CoreLibs\gdal-1.11.2\bin\gdal\python\scripts\gdal2tilesXYZ.py -z 11-18 MergedMsk.vrt pyramid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что я дополнительно сделал:&lt;br /&gt;
&lt;br /&gt;
Код:&lt;br /&gt;
    rem Далее можно прогнать OptiPNG и PNGOUT&lt;br /&gt;
    rem Можно из проводника http://blog.sijey.ru/2011/04/04/optipng_pngout_integration/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Также можно удалить все пустые тайлы (очень очень большое количество).&lt;br /&gt;
Определить их легко, их размер 4 096 байт.&lt;br /&gt;
&lt;br /&gt;
Как результат, всего за 1 сутки я построил тайловый кэш ортофотопланов 11-18 уровня на территорию СПб.&lt;br /&gt;
&lt;br /&gt;
UPD:&lt;br /&gt;
Относительно долго не мог понять почему GDAL не принимает файл привязки после &amp;quot;очистки&amp;quot; файлов от привязки.&lt;br /&gt;
Оказалось поставщик растров сделал *.tab в таком формате&lt;br /&gt;
&lt;br /&gt;
Код:&lt;br /&gt;
    !table&lt;br /&gt;
    !version 300&lt;br /&gt;
    !charset WindowsLatin1&lt;br /&gt;
    Definition table&lt;br /&gt;
    File   &amp;quot;2222-04.sid&amp;quot;&lt;br /&gt;
    Type&amp;quot;Raster&amp;quot;&lt;br /&gt;
    (87000,88000)(0,0) Label &amp;quot;Point 1&amp;quot;,&lt;br /&gt;
    (88000,88000)(1666,0) Label &amp;quot;Point 2&amp;quot;,&lt;br /&gt;
    (87000,87000)(0,1666) Label &amp;quot;Point 3&amp;quot;,&lt;br /&gt;
    (88000,87000)(1666,1666) Label &amp;quot;Point 4&amp;quot;&lt;br /&gt;
    CoordSys Nonearth Units &amp;quot;m&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для MapInfo не критично, а вот GDAL-у не понятно. Оказалось банально (но я долго не мог понять):&lt;br /&gt;
В Type&amp;quot;Raster&amp;quot; нужен пробел... Type &amp;quot;Raster&amp;quot;&lt;/div&gt;</summary>
		<author><name>SergeyRyzhkov</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9D%D0%B0%D1%80%D0%B5%D0%B7%D0%BA%D0%B0_%D1%82%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8%D0%B7_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B2_MrSID_c_*.tab_%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9&amp;diff=21473</id>
		<title>Нарезка тайлов из растров MrSID c *.tab привязкой</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9D%D0%B0%D1%80%D0%B5%D0%B7%D0%BA%D0%B0_%D1%82%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8%D0%B7_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B2_MrSID_c_*.tab_%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9&amp;diff=21473"/>
		<updated>2015-03-20T12:00:42Z</updated>

		<summary type="html">&lt;p&gt;SergeyRyzhkov: Новая страница: «Итак была задача сформировать тайловый массив в файловой системе в формате .../Z/X/Y.png (не TMS…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Итак была задача сформировать тайловый массив в файловой системе в формате .../Z/X/Y.png (не TMS!)&lt;br /&gt;
Исходными данными был набор растров в формате *.sid (MrSID) с фалами привязки в формате *.tab (MapInfo).&lt;br /&gt;
При этом система координат отсутствует, вернее - CoordSys Nonearth Units &amp;quot;m&amp;quot; , сами координаты в МКС-64&lt;br /&gt;
&lt;br /&gt;
Сразу ринулся естественно к GDAL.&lt;br /&gt;
Не имея достаточного опыта работы с GDAL,&lt;br /&gt;
в голове изначально был следующий алгоритм (не совсем неправильный):&lt;br /&gt;
1. Преобразовать все *.sid в GeoTIFF&lt;br /&gt;
2. Объединить все полученные на п1 в единый&lt;br /&gt;
4. Для единого растра назначить СК, а затем перепроецировать в EPSG:3857&lt;br /&gt;
5. Нарезать тайлы с использованием gdal2tiles&lt;br /&gt;
&lt;br /&gt;
Не получилось, а именно&lt;br /&gt;
1. Файлы привязки *.tab не &amp;quot;схватывались&amp;quot;&lt;br /&gt;
2. Когда разобрался с п1, объединение шло очень долго&lt;br /&gt;
3. После перпроецирования получился артифакт, небольшой поворот и черная неравномерная окантовка вокруг растра&lt;br /&gt;
4. gdal2tiles &amp;quot;генерит&amp;quot; согласно спецификации TMS. То есть направление оси Y с юга на север&lt;br /&gt;
&lt;br /&gt;
Не буду долго описывать ход экспериментов и т.д., сразу напишу как я сделал (но тоже не факт что оптимально)&lt;br /&gt;
Примеры кода будут под винду, bat-команды (я образно)&lt;br /&gt;
&lt;br /&gt;
1. GDAL при конвертации и т.д. использует геопривязку. При этом если геопривязка есть в самом файле, то внешние файлы привязки, например *.tab игнорируются&lt;br /&gt;
Решение: Убираем геопривязку из файлов *.sid&lt;br /&gt;
&lt;br /&gt;
Код: Выделить всё&lt;br /&gt;
    rem Обязательно с параметром -co &amp;quot;PROFILE=BASELINE&amp;quot;,&lt;br /&gt;
    rem Иначе геопривзяка из файла не будет удалена и дальнейшие команды не будут использовать фалы привязки&lt;br /&gt;
    for %%f in (*.sid) do (&lt;br /&gt;
       gdal_translate -co &amp;quot;PROFILE=BASELINE&amp;quot; -q %%f %%~nf.tif&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. GDAL, как и, например, QGIS, ArcGIS, прекрасно работаю с так называемыми виртуальными наборами растров (VRT), которые представляют из себя просто XML. То есть нет необходимости мержить (объединять) все растры в один, чтобы потом использовать для других операций.&lt;br /&gt;
&lt;br /&gt;
Код: Выделить всё&lt;br /&gt;
    rem Построение виртуального набора растров для всех полученных *.tif&lt;br /&gt;
    rem Назначение системы координат с геопривязкой &amp;quot;внтури&amp;quot; файла&lt;br /&gt;
    rem В данном случае уже будут использоваться файлы геопривязки&lt;br /&gt;
    gdalbuildvrt -overwrite -q -a_srs &amp;quot;+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=... +y_0=... +ellps=krass +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22 +units=m +no_defs&amp;quot; -vrtnodata &amp;quot;255 255 255&amp;quot; -hidenodata -resolution highest MergedMsk.vrt *.tif&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При этом устанавливаем параметры для сокрытия пустых областей&lt;br /&gt;
&lt;br /&gt;
3. Дабы избежать артефакта черной каймы в результирующем растре, оказывается можно не делать перепроицирование в в EPSG:3857, а сразу отдать виртуальный набор растров скрипту gdal2tiles&lt;br /&gt;
То есть вот так делать не обязательно, и не надо&lt;br /&gt;
&lt;br /&gt;
Код: Выделить всё&lt;br /&gt;
    rem Перепроецирование виртуального набора растров&lt;br /&gt;
    rem gdalwarp -of VRT -overwrite -t_srs EPSG:3857 MergedMsk.vrt Merged3857.vrt &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сразу &amp;quot;генерим&amp;quot; растры модифицированным питон-скриптом:&lt;br /&gt;
&lt;br /&gt;
Код: Выделить всё&lt;br /&gt;
    rem Создание тайлового кэша. Используется модифицированный код, так как стандартный в схеме TMS&lt;br /&gt;
    python C:\_Work\_Projects\nRsn\CoreLibs\gdal-1.11.2\bin\gdal\python\scripts\gdal2tilesXYZ.py -z 11-18 MergedMsk.vrt pyramid&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Что я дополнительно сделал:&lt;br /&gt;
&lt;br /&gt;
Код: Выделить всё&lt;br /&gt;
    rem Далее можно прогнать OptiPNG и PNGOUT&lt;br /&gt;
    rem Можно из проводника http://blog.sijey.ru/2011/04/04/optipng_pngout_integration/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Также можно удалить все пустые тайлы (очень очень большое количество).&lt;br /&gt;
Определить их легко, их размер 4 096 байт.&lt;br /&gt;
&lt;br /&gt;
Как результат, всего за 1 сутки я построил тайловый кэш ортофотопланов 11-18 уровня на территорию СПб.&lt;br /&gt;
&lt;br /&gt;
UPD:&lt;br /&gt;
Относительно долго не мог понять почему GDAL не принимает файл привязки после &amp;quot;очистки&amp;quot; файлов от привязки.&lt;br /&gt;
Оказалось поставщик растров сделал *.tab в таком формате&lt;br /&gt;
&lt;br /&gt;
Код: Выделить всё&lt;br /&gt;
    !table&lt;br /&gt;
    !version 300&lt;br /&gt;
    !charset WindowsLatin1&lt;br /&gt;
    Definition table&lt;br /&gt;
    File   &amp;quot;2222-04.sid&amp;quot;&lt;br /&gt;
    Type&amp;quot;Raster&amp;quot;&lt;br /&gt;
    (87000,88000)(0,0) Label &amp;quot;Point 1&amp;quot;,&lt;br /&gt;
    (88000,88000)(1666,0) Label &amp;quot;Point 2&amp;quot;,&lt;br /&gt;
    (87000,87000)(0,1666) Label &amp;quot;Point 3&amp;quot;,&lt;br /&gt;
    (88000,87000)(1666,1666) Label &amp;quot;Point 4&amp;quot;&lt;br /&gt;
    CoordSys Nonearth Units &amp;quot;m&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для MapInfo не критично, а вот GDAL-у не понятно. Оказалось банально (но я долго не мог понять):&lt;br /&gt;
В Type&amp;quot;Raster&amp;quot; нужен пробел... Type &amp;quot;Raster&amp;quot;&lt;/div&gt;</summary>
		<author><name>SergeyRyzhkov</name></author>
	</entry>
</feed>