Типичным способом хранения географических данных является использование пространственной структуры данных, такой как R-дерево (или некоторый вариант, такой как R + дерево, R * дерево и т. Д.). Именно так географические типы данных обычно реализуются в ГИС-совместимых RDBMS. (Я знаю, что и Microsoft SQL Server 2008, и PostGIS используют R-деревья для географических типов.) Они отвечают всем основным требованиям, которые вы описали, и тривиально поддерживают пересечение, местоположение, расстояние и другие типы запросов.
В зависимости от типа данных, вы также можете найти такие вещи, как kD-деревья, quad-деревья, октреи, иерархии ограничивающих томов (включая выровненные по осям ограничивающие прямоугольники) и т. Д. В общем использовании. На самом деле это гораздо более обычное явление в 3D играх, поскольку размер и форма объекта больше подходят для запросов на пересечение. Они реже используются для ГИС, чем R-деревья.