Здравствуйте, Homunculus, Вы писали:
H>>Как рендерят большие карты?
Дополню ответ камрада swame, расскажу, как рендерится дизайн печатной платы (или кристалл ИС).
S>В памяти набор примитивов (линия, точка, текст)+ нужные графические атрибуты. S>Примитивы отсортированы по координатам, чтобы быстро отсортировывать те,что находятся в текущей области отрисовки.
Строится 2Д хеш, точнее несколько хешей под разные объекты. Хеш позволяет быстро найти объекты, попадающие в заданный прямоугольник, либо в окрестности точки (мы же потом захотим нарисованное потыкать мышой).
S>Если карта занимает 1,Гб в SVG то ее легко поместить в несколько сотен метров оперативки. S>Использовать языки, где не создается по объекту на каждый чих. И без этих ваших сборщиков мусора.
Более того, не создавать объекты для каждой сущности, а хранить всё в плоском массиве и оперировать коллекцией объектов и идентификаторами объектов (целочисленными индексами). Можно сварганить итератор для удобства доступа к атрибутам объекта.
Для пущей компактности каждый атрибут объекта хранится в своём массиве. Другими словами переходим к реляционной таблице, где в массивах лежат столбцы таблиц.
S>Отрисовывать в графическом движке с аппаратным ускорением, если нужна быстрая отрисовка с антиалиасингом.
+1
С использованием соответствующих техник для ускорения рисования (списки вершин, шейдеры и т.д.).
S>Файл 1,5 Гб можно грузить и парсить за десятки секунд, в зависимости от скорости диска.
Если не использовать какой-нибудь msxml парсер, а взять, к примеру, scanner нашего камрада c-smile'а, то скорость разбора xml будет ограничена скоростью чтения с диска. Хотя... любой sax-парсер должен дать близкие значения по скорости, структуры данных нужно выбрать правильные.
S>Но если нужно грузить быстро и часто, лучше переложить в что то более компактное, чем XML, и легко парсящееся.
Если использовать структуру данных, предложенную выше, то бинарная десериализация для нее сводится к двум операциям чтения на каждый массив — считал число элементов, выделил память, зачитал все данные в память. Для кэширования данных и быстрого подъема с диска самое то.
S>Самое трудоемкое реализовать качественную отрисовку картинки.
Угу.
Дизайнерские способности не помешают, чтобы красиво получилось.
_____________________
С уважением,
Stanislav V. Zudin