SASGIS

Веб-картография и навигация

Недостаточно памяти для отработки команды.

программа для загрузки и просмотра спутниковых снимков Земли, Луны, Марса предоставленных сервисами Google Maps и Космоснимки. Возможность работы с GPS приёмником.

Модератор: Tolik

Re: Недостаточно пмяти для отработки команды.

Сообщение Cowa » 30 ноя 2008, 22:03

Пока у вас продолжается рукопашная :D , я набросал утилитку, которая склеивает тайлы по заданной области. Сохраняет файл в формате BMP.
Ограничения (см. выше на несколько постов): выделенная область по горизонтали или по вертикали не должна превышать 255 тайлов и размер файла при сохранении должен быть не более 2Gb.
Пробовал потестить. (Машинка у меня старенькая - Athlon XP 2500, память 1 гиг, винт- IDE) Пробовал максимальную возможную область - 99х109=10791 тайл. В результате файл размером около 2Gb (BMP) создавался на диске около 17 минут. 29х33 - 21секунда. Использование памяти - не более 4.5Mb. Использование проца - процентов 20. Вся нагрузка на винт. Думаю у кого SCSI или SATA-2 будет гораздо быстрее. Алгоритм описан Parasite выше. Я лишь реализовал.

Забираем, пробуем.
Да, и не забудьте обеспечить на диске свободное место для BMP-файла.

P.S. Может администратор даст возможность загружать файлики ну хотя бы по 300kb,
чтобы не резать их на куски :(

TilesMerge.part2.rar
v0.9b
(64.7 KiB) Скачиваний: 269
TilesMerge.part1.rar
(200 KiB) Скачиваний: 285
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Rudolf » 01 дек 2008, 06:22

Cowa писал(а):Пока у вас продолжается рукопашная :D , я набросал утилитку, которая склеивает тайлы по заданной области. Сохраняет файл в формате BMP.

Спасибо за утилиту. Давно желал нечто подобное иметь.
Вот только, если я правильно понял, она сшивает тайлы целиком, и не режет их, если допустим левый верхний угол находится посередине тайла.
Встает вопрос - как привязать карту? Может вы сделаете привязку? Буду очень благодарен.
Или хотя бы подскажите алгоритм определения координат угловых точек тайла.
Rudolf
Новичок
 
Сообщения: 9
Зарегистрирован: 28 окт 2008, 12:20
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Cowa » 01 дек 2008, 09:44

Rudolf
Rudolf писал(а):Вот только, если я правильно понял, она сшивает тайлы целиком, и не режет их, если допустим левый верхний угол находится посередине тайла.

Именно так и есть. Если точка с указанными координатами попадает в тайл, то тайл берется целиком. Возможно, что не очень красиво, но пока так.

Rudolf писал(а):Встает вопрос - как привязать карту? Может вы сделаете привязку? Буду очень благодарен.

Насчет привязки, даже не думал еще. Надо будет заняться в ближайшее время. А пока доведу до ума утилитку.
Да и еще, привязать смогу только карты с проекцией гугла. Яндекс у меня считается не очень точно. Во всяком случае не для привязки.
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Parasite » 01 дек 2008, 10:51

zed писал(а):[
- в JPG пишется первая строка ПОЛНОСТЬЮ, без пропусков;
- формируется следующая строка n*256 и так 256 раз (вполне возможно, что обработчику JPG передаётся не одна строка, а 8 или сразу все 256, из-за особенностей JPG-компрессии, но суть дела это ни сколько не меняет)


Вдогонку и на погоны - конкретный пример на пальцах в аттаче:
1. Берем картинку 1.bmp (в данном случае 500х380 пикс)
2. Пишем ее в ЖПЕГ средствами фотошопа (baseline, 50% сжатия). Получаем картинку 1.jpg 500х380 с валидной жпег-структурой.
3. Опять берем картинку 1.bmp (500х380 пикс)
4. Клеим в нее ЛЮБУЮ произвольную область от другой картинки, не перекрывающую ВСЕГО изображения 1.bmp (в данном случае область 500х48 поверх исходных 500х380)
5. Сохраняем получившееся изображение в 2.bmp
6. Также пишем его же в ЖПЕГ средствами фотошопа (baseline, 50% сжатия). Получаем картинку 2.jpg 500х380 с валидной жпег-структурой.

Исходные данные готовы. Начинаем "анализ":

1. Смотрим на размеры файлов 1.bmp и 2.bmp. Размер файлов ИДЕНТИЧЕН - 570.056 байт, несмотря на разный контент.
2. Смотрим на размеры файлов 1.jpg и 2.jpg. Размеры файлов НЕ совпадают, в полном соответствии с логикой работы контентнозависимого сжатия, примененного в ЖПЕГе.
3. Берем любой инструмент сравнения бинарных файлов.
4. Смотрим на различия файлов 1.bmp и 2.bmp на уровне байт: прекрасно видим, что разница в файлах строго линейна, с определенными границами и имеет место быть ТОЛЬКО на том участке, где мы вклеивали новый контент (и не далее, вплоть до полностью одинаковых заголовков у обоих файлов). См. скриншот "1.bmp-2.bmp.diff_report.gif", различающиеся байты выделены в программе красным цветом, слева в виде узкой колонки - общий расклад обоих файлов по всей их длине.
5. Смотрим на различия файлов 1.jpg и 2.jpg на уровне байт: прекрасно видим, что разница в файлах ГЛОБАЛЬНА, имеет место быть по всему телу файлов плюс заголовок, а небольшие вкрапления одинаковых байт попадаются ТОЛЬКО в заголовке (на ту часть заголовка попадают данные о thumbnail исключая участок "разницы", данные о размере изображения, встраиваемом цветовом профайле, подписи кодера-упаковщика жпег и прочие одинаковые для обоих файлов метаданные). Явственно видно, что ТЕЛА файлов абсолютно различны и даже не совпадают по размеру, несмотря на локальное и небольшое изменение контента не превышающее общих размеров исходного изображения. См. скриншот "1.jpg-2.jpg.diff_report.gif", различающиеся байты выделены в программе красным цветом, слева в виде узкой колонки - общий расклад обоих файлов по всей их длине.

Резюме: локальное изменение контента файла формата БМП не приводит ко глобальному изменению тела файла, и изменения легко предсказуемы и линейны. Локальное же изменение контента файла формата ЖПЕГ приводит ко глобальному изменению тела файла и\или общего размера всего контейнера, предсказать изменения заранее не является возможным до момента окончания упаковки ВСЕГО контента в жпег и получения валидного окончательного жпег-файла.
Что и требовалось доказать. Что я и имел ввиду в своих постах на протяжении последней недели.

PS: все желающие могут поэкспериментировать с ТИФФом без сжатия. Картина будет абсолютно той же - и это я тоже утверждал ранее. Последующие перверсии от ораторов по типу "а в ЖПЕГ таки можно клеить частями рандомно и\или последовательно, в обход и\или без применения жпег-кодера - и при этом успешно получать валидную жпег-структуру..." без приложения конкретных и проверяемых примеров мною лично будут клеймиться как "ФМЗ" (фимоз головного мозга™).

Вот теперь по жпегу, надеюсь, сказал действительно и окончательно всё. :lol:
Вложения
jfif.part3.rar
(196.09 KiB) Скачиваний: 212
jfif.part2.rar
(250 KiB) Скачиваний: 233
jfif.part1.rar
(250 KiB) Скачиваний: 232
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Parasite » 01 дек 2008, 11:06

Cowa писал(а):я набросал утилитку, которая склеивает тайлы по заданной области.
...
Алгоритм описан Parasite выше. Я лишь реализовал.

Молодец. Отлично. Продолжай!
(прожку пока не тестил - ибо для сохранения в БМП\ТИФФ оно у меня и так есть, правда заточенное под совершенно другие задачи и неприменимое в данном конкретном случае). Сама активность оратора на данном направлении и выдача хоть какого-то конкретного работоспособного результата - внушает уважение и требует поощрения, хотя бы словесного (в отличие от пустозвонства на тему жпега).

Как только прикрутишь прожку к SASу - просьба меня позвать, заценю. :)

Cowa писал(а):(Машинка у меня старенькая - Athlon XP 2500, память 1 гиг, винт- IDE) Пробовал максимальную возможную область - 99х109=10791 тайл. В результате файл размером около 2Gb (BMP) создавался на диске около 17 минут. 29х33 - 21секунда. Использование памяти - не более 4.5Mb. Использование проца - процентов 20. Вся нагрузка на винт.

Совершенно верно.
1. Использование проца - процентов 20 ВООБЩЕ или процентов 20 только на данный алгоритм? Если первое - то ок, если второе - то это неоправданно много (впрочем, для альфа-версии это - прекрасно, позже будешь оптимизировать и всё улучшится). :) У меня кушание данным алгоритмом процессорных ресурсов никогда не превышало 1-1.5% (Perl, 8xXeon 3.2GHz, 28Gb RAM, Solaris 11, удаленное кластерное хранилище по оптике в виде "винта").
2. Использование памяти - уже прекрасный результат, если при оптимизации еще упадет - то будет еще лучше.
3. 17 минут - пока еще довольно долго. На время тестирования рекомендую создать RАМ-диск и дампить результат на него, чтобы не ждать по 17 минут при каждом проходе. :)
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Parasite » 01 дек 2008, 11:10

Cowa писал(а):Именно так и есть. Если точка с указанными координатами попадает в тайл, то тайл берется целиком. Возможно, что не очень красиво, но пока так.

Тайл можно брать целиком, но дампить в результат - именно по маске выделения пользователем (просто не дампить эти пиксели в создаваемую карту, если они не попадают в selection). Впрочем, это всё позднее доделать можно, конечно.

Cowa писал(а):Насчет привязки, даже не думал еще. Надо будет заняться в ближайшее время.

Имхо файл привязки можно делать SASом, файлик привязки не имеет ничего общего к процессу дампа битмапа (гуглевые карты сделанные SASом проверял по реальному ГПСу - привязка точная, претензий нет).
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Rudolf » 01 дек 2008, 11:28

Parasite писал(а):Имхо файл привязки можно делать SASом, файлик привязки не имеет ничего общего к процессу дампа битмапа (гуглевые карты сделанные SASом проверял по реальному ГПСу - привязка точная, претензий нет).

Привязка SASом не будет подходить, если тайлы не режутся. А в SASе тайлы режутся.
Пока что я эту проблему решил так - склеиваю файл, а привязку беру из MapBuilder, по тем же координатам но без создания самой карты. Там такой же алгоритм (без обрезания тайлов).
Rudolf
Новичок
 
Сообщения: 9
Зарегистрирован: 28 окт 2008, 12:20
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Parasite » 01 дек 2008, 14:46

Rudolf писал(а):Привязка SASом не будет подходить, если тайлы не режутся. А в SASе тайлы режутся.

Ну дак я же и предлагаю их тоже резать (путем дампа в файл только того, что попадает в область выделения пользователем).
Либо тупо дампить по кратному числу тайлов (без резки оных), а получаемую от САСа привязку конвертировать на величину получившегося смещения (той же прожкой-дампером уже перед окончательным выходом из нее, если в пути картинки также уже присутствует ранее созданный САСом файл-привязка), конвертится элементарно парочкой строк в сорце.
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 512 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение Cowa » 01 дек 2008, 16:09

Parasite
Parasite писал(а):Как только прикрутишь прожку к SASу - просьба меня позвать, заценю.

Так вроде бы уже прикрутил. Используется формат кеша именно SAS.Планеты.

Parasite писал(а):Использование проца - процентов 20 ВООБЩЕ или процентов 20 только на данный алгоритм?

Проверил на работе - совершенно другие результаты. На разных компах по-разному. Проц. на процесс - меньше 18% загрузки не видел. В принципе это и понятно. По памяти тоже. Загружает на некоторых до 10Mb.
Cowa
Постигающий Дао
 
Сообщения: 173
Зарегистрирован: 23 авг 2008, 01:46
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Недостаточно пмяти для отработки команды.

Сообщение zed » 01 дек 2008, 16:49

Cowa писал(а):... файл размером около 2Gb (BMP) создавался на диске около 17 минут...
... Алгоритм описан Parasite выше. Я лишь реализовал.

К сожалению, небыло возможности проверить работу программы, но если алгоритм действительно от Parasite-та, то есть возможность увеличить быстродействие раза в 2, отказавшись от "рандомности" и перейдя к линейной записи без предварительного заполнения BMP однородным цветом.
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 568 раз.

Пред.След.

Вернуться в SAS.Планета

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

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