Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 536

/ вопрос открыт /

Добрый день, уважаемые эксперты!
Для обеспечения максимальной разрешающей способности при работе приложения с цифровой картой, желательно загрузить 270 000 000 точек, но ОС не позволяет, хотя памяти 3 ГБ. Что посоветуете? Изменит ли что-нибудь применения 64-битной версии ОС? Какие при этом могут возникнуть проблемы при работе других приложений?
Заранее благодарю всех откликнувшихся!

Драганов Василий Михайлович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Драганов Василий Михайлович (статус: Посетитель)
Вопрос отправлен: 18 марта 2009, 15:53
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 18 марта 2009, 21:58; участников в обсуждении: 3.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 18 марта 2009, 16:21 [#1]:

Вопрос восстановлен. Прошу прощения, не вник во все тонкости при первом прочтении.
Вадим К

Вадим К (статус: Академик), 18 марта 2009, 17:08 [#2]:

Рассуждаем логически. 270000000 точек - это квадрат со стороной 16000. Мониторов, которые это отрисуют на экране, я пока не видел. Вывод - грузить в память всё нет смысла.
С другой стороны стандартный TBitmap и многие функции ОС начинают вести себя неадекватно (например не дают загрузить, неверно отрисовывают) уже при размерах 4000 на 4000.
Итого. если хочеться просто отрисовать плюс сделать что то типа карты (масштабирование, перемещение), то лучше разбить на квадратные кусочки со стороной по 128/256 пикселей и отрисовывать по надобности на экране. Можно и подгружать по мере надобности. А как будут храниться на винте - дело техники.
Или задача стоит другая? тогда возможно прийдётся писать свой класс для загрузки изображения...
И на последок. загрузить такую картинку в память очень проблематично. учитывая, что обычно на точку уходит 3-4 пикселя, то сумарно это будет под гигабайт, а то и больше. Но Виндовс хитрая система и под пользовательское приложение по умолчание отдает 2 гигабайта памяти. Но часть из них занимает собственно сама программа, поэтому обычно выделить линейно больше пол гигабайта невозможно. (да да да, МайкроСофт обещал каждой программе по 4 Гига, но забыл сказать, что верхние два занимают системные библиотеки...). 64битная ось тут поможет, но не сильно - прийдётся либо на Delphi.NET писать, либо ждать делфи с 64битным компилятором. А иначе толку с 64битной оси мало...
Галочка "подтверждения прочтения" - вселенское зло.
Драганов Василий Михайлович

Драганов Василий Михайлович (статус: Посетитель), 18 марта 2009, 21:19 [#3]:

Возможно я не четко сформулировал вопрос. Загружать нужно целые числа, соответствующие высотам в данной географической точке. Имеются данные разрешением 3 секунды, т.е. примерно через 90 метров. Для того, чтобы "охватить" Украину и частично прилегающие страны, нужно примерно 30 град по долготе и 15 град по широте. Данные представлены файлами с данными по квадрату "5х5" град., соответственно 6000х6000 точек. Вот откуда цифра 270 млн.
Если показывать всю карту, то конечно значительная часть данных избыточна, но по ходу работы возникает необходимость увеличивать фрагменты, например, рассмотреть квадрат (прямоугольник) со сторонами примерно 200 - 500 м.
Исходные текстовые файлы сами по себе не маленькие - по 130-180 МБ, поэтому подгружать данные во время работы - очень долго, тем более, что рассматриваемая область может быть на стыке "квадратов" и тогда надо грузить сразу 2 - 4 квадрата.
Я реализовал загрузку 18-ти квадратов, но с разрешением 6 секунд, при этом наблюдая через диспетчер установил, что используется память порядка 1,3 ГБ (это кроме 0,8-0,9 ГБ для ОС).
Вадим, если можно, по-подробнее изложите вот эту вашу мысль:
"... то лучше разбить на квадратные кусочки со стороной по 128/256 пикселей и отрисовывать по надобности на экране. Можно и подгружать по мере надобности. А как будут храниться на винте - дело техники."
Как это реализовать?
Вадим К

Вадим К (статус: Академик), 18 марта 2009, 21:37 [#4]:

Я бы лично сделал так. Выделил 5-6 масштабов, а текстовые файлы преобразовал в более удобные бинарные, которые было бы проще загружать. и сделал бы их для каждого масштаба. При смене масштаба - просто подгружал нужный файл.
Галочка "подтверждения прочтения" - вселенское зло.
Драганов Василий Михайлович

Драганов Василий Михайлович (статус: Посетитель), 18 марта 2009, 21:58 [#5]:

Спасибо, Вадим, но эта дорога заведет меня в незнакомый мне лес :)).
Незря говорят - "лучшее, враг хорошего!" Обойдусь пока достигнутыми результатами, а когда дозрею, вернусь к решению этой проблемы!
Ещё раз - большое спасибо!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 24 февраля 2020, 10:28
Выполнено за 0.02 сек.
Рейтинг@Mail.ru