Я думаю, вам следует предварительно обработать данные и создать структуру, в которой перечислены возможные полигоны для прямоугольных областей в сетке.Таким образом, вы можете уменьшить количество полигонов, которые вы должны будете проверять по точкам, и дополнительная структура поместится в память, так как у нее есть только указатели на полигоны.
Вот изображение для иллюстрации:1004 *
Вы хотите проверить, в каком полигоне находится желтая точка. Обычно вы проверяете по всем полигонам, но с оптимизацией сетки (оранжевые линии не рисуют всю сетку,только одно из его полей) вам нужно только проверить заполненные многоугольники, поскольку все они находятся внутри или частично внутри поля сетки.
Аналогичным способом было бы сохранить не все данные многоугольника в памяти, а толькоограничивающие прямоугольники многоугольников, для которых требуется только 2 вместо 3 пар X / Y для каждого многоугольника (и дополнительный указатель на фактические данные многоугольника), но это не экономит столько места, сколько первое предложение.