У меня есть экземпляр boost :: geometry :: index :: rtree выровненных по оси ящиков в трех измерениях. Я уже использую пересечение точек в версии повышения 1.54. Работает как шарм. Что ж, я хотел бы также запросить пересечение с линией (лучом, разделом), которая, похоже, поддерживается boost 1.59 (э-э, с некоторыми сбоями, но все же довольно впечатляюще). К сожалению, как я уже сказал, я использую версию 1.54. и у меня пока нет возможности изменить это. Итак, вопрос: как расширить геометрию в boost 1.54. так он поддерживает пересечения секций с ограничивающими рамками внутри rtree? На каких шаблонах мне нужно специализироваться? Что еще мне нужно сделать? Идеи? thb
Запрос на пересечение с boost :: geometry :: index :: rtree
Ответы (1)
Если вы передаете предикат bgi::intersects()
в запрос, rtree внутренне вызывает bg::intersects()
, который вызывает bg::disjoint()
. И эти проверки пространственных отношений проверяются для QueryGeometry / Box и QueryGeometry / Indexable. Например. если вы храните Boxes, тогда rtree внутренне вызывает bg::intersects(Box, QueryGeometry)
.
Если тип QueryGeometry был адаптирован к одной из концепций Boost.Geometry, например Segment, но эта функция просто не была реализована в используемой вами версии Boost, вы могли увидеть, как алгоритм реализован для комбинации концепций в последней версии Boost. Например. disjoint(Box, Segment)
реализован здесь: https://github.com/boostorg/geometry/blob/master/include/boost/geometry/algorithms/detail/disjoint/segment_box.hpp. Тогда вы, вероятно, сможете найти соответствующее место в Boost 1.54 и поместить туда этот код. Хотя AFAIR структура каталогов и файлов была изменена с 1.54. Я думаю, вы также можете попробовать использовать весь код 1.59 Boost.Geometry с Boost 1.54, хотя, конечно, нет гарантии, что это сработает. И как @sehe указал в комментариях, есть ошибка в _6 _ / _ 7_ для комбинации Box / Segment в 1.59.
Если QueryGeometry не является типом геометрии, поддерживаемой библиотекой, что AFAIU в вашем случае, например Frustum, Cone, Plane, Ray и т. Д. Вы можете просто перегрузить bg::intersects()
или bg::disjoint()
для комбинации типов, которые rtree хочет вызвать, в данном случае для QueryGeometry и Box. См. Это для получения дополнительной информации: Повышение геометрии / форм пространственных запросов