На этом нет серебряной пули.Это зависит от типа данных (т. Е. Только точек, только линий, треугольников, сеток, любой их комбинации и т. Д.) И типа запроса (точка внутри многоугольника, пересечение линий, ближайшие соседи, любая геометрия внутри круга илии т. д.).
У вас есть структура данных, разработанная для конкретного типа запроса и данных.Если вы хотите использовать единую структуру данных для всех типов запросов и всех типов данных, вы должны использовать либо пространство, либо время, либо и то и другое.Вы можете приблизиться к тому, чтобы быть достаточно быстрым, но в целом вы не будете оптимальным.
По моему опыту, структура данных достаточно общая, чтобы справляться с большинством геометрических объектов и может обрабатывать несколько типов запросов. Я бы рекомендовал AABBДерево:
https://doc.cgal.org/latest/AABB_tree/index.html