Добавлено rtree const_iterator, start(), end() и поддержка Boost. Диапазон.
Поддержка C++11<std::initializer_list>в моделях геометрии.
Разъединенные и пересекающиеся элементы поддерживают следующие комбинации геометрии: многоточечная/линейная струна, многоточечная/мультилинестрирующая.
Добавлены алгоритмы relate() и relation().
Пересечение реализовано для комбинаций точечных и линейных геометрий
Добавлена реализация для разницы (точечная, линейная)
Новый алгоритм пуст, возвращаясь истинным, если геометрия представляет пустой набор
Алгоритм оболочки поддерживает точечную и линейную геометрию в сферической экваториальной системе координат.
Алгоритм оболочки поддерживает точечные геометрии в системе географических координат.
Улучшения
Обновленная категория rtree const_query_iterator в ForwardIterator
Буферная производительность буферов вокруг нескольких точек значительно улучшена.
Переломные изменения
Стратегия буферной стороны теперь возвращает код ошибки вместо bool. Если у вас есть своя собственная стратегия, она должна быть адаптирована.
Раскрыты билеты
11113Поддержка легкого перечисления всех элементов с помощью BOOST_ Внимание
Буфер: используйте более надежный способ вычисления стороны пересечения, это исправляет несколько ошибок в генерации буфера.
Зафиксируйте в выборе сегмента, к которому вычисляют из IP, на пересечении двух сегментов. Теперь выбирается тот, который находится близко к точке сегмента, или тот, который находится на самом коротком сегменте. Это позволяет избежать (редко встречающегося) образования крошечных треугольников, делающих вывод полигонов недействительным.
При масштабировании раунда вместо усечения до целочисленной сетки (это исправление и вышеупомянутое может оказать некоторое влияние на выходную геометрию)
Исправьте потенциальную бесконечную петлю подробно:has_spikes (петля может произойти, если пройденные точки имеют координаты NaN)
Новый алгоритм num_segments, возвращающий число сегментов геометрии
Новая перегрузка для алгоритма is_valid, который берет ссылку на строку в качестве второго аргумента и заполняет ее сообщением, связанным с достоверностью или недействительностью геометрии.
Новая перегрузка для алгоритма is_valid, который берет ссылку на enum в качестве второго аргумента и заполняет ее значением, связанным с достоверностью или недействительностью геометрии.
Разъединенные и пересекающиеся элементы поддерживают следующие геометрические комбинации: точка/многоточечная, многоточечная/многоточечная, многоточечная/сегментная, многоточечная/коробочная.
Улучшения
Буфер теперь поддерживает плоские концы для струн с изгибом, близким к началу (так, что буферный сегмент пересекает плоский конец).
Производительность буфера значительно улучшена
Производительность разделов значительно улучшена для многоугольников, потенциально улучшая все операции наложения
10108Ошибка в операциях наложения в конкретных случаях, когда геометрия касается одной точки
10201Предложение использовать разные функции для сравнения координат [wontfix]
10467Имя параметра шаблона, совпадающее с макроимя B0, определенным в терминах. h
10640Недействительный результат буфера() для полигонов КНО.
10666Предупреждение компилятора MSVC C4127: условное выражение является постоянным
10747Ошибка в масштабировании, приводящая к ошибкам в операциях с ареалом / ареалом
10770Буфер выходит из строя на большие расстояния или грубые круглые соединения, где вогнутости, где не пересекаются должным образом
10658sym_difference даёт плохой результат для внутриполигонов
10835Различие многолинейности и многоугольника дает неправильный результат
10861Rtree не может компилировать значение, будучи парой или кортежом, содержащим указатель на геометрию и используемый по умолчанию equal_to<>
10863Имя параметра шаблона, совпадающее с макроимя B0, определенным в termios.h (дубликат 10467)
10887Недействительный результат внутри() и относящийся() для линейного/мультиполигона
10890Недействительный результат разъединения() для точки/сегмента.
10904Недействительный расчет наиболее значительного измерения сегмента в стратегии relate_cartesian_segments
10912Недействительный результат внутри() и относящийся() для Areal/Areal
10951Тесты не работают на окнах с компилятором из-за отсутствия флага /bigobj.
10957Утверждение о несостоятельности и недействительных результатах различных реляционных операций.
10958Недействительные результаты разъединения () L/L и L/A.
10959Неисправность утверждения в get_turns() используется без_rescale_policy.
10960Недействительный результат get_turns() для L/A, пропущенный поворот.
10961Недействительный результат get_turns() для L/A, недействительный поворот для линейного всплеска.
11112Сбой компиляции на Solaris из-за столкновения имени CS (используется для макроса на этой платформе)
11121Недействительный результат разности() для интегральных координат
Багфиксы
Буг в многоточечном / многоточечном / многополигонном вычислении расстояния (неправильное обнаружение точек внутри ареальной геометрии)
Ошибка в операторе назначения flatten_iterator, вызывающая нарушение доступа
Баг в картезианской стратегии пересечения сегмента-сегмента, когда один сегмент вырождается до точки и коллинеен к другому недегенеративному сегменту.
Баг в центроиде (), недетерминированный результат, если вычисляется, например, для полигона с нулевой площадью.
Баг в буферах для присоединений с ограниченным количеством баллов
Баг в буферах для круглых стыков с ограниченным количеством очков вокруг острых углов
Баг в буферах для соединений с большими буферными расстояниями
Баг в буферах для круглых концов с нечетным количеством очков
Баг в буферах для плоских концов с большими буферными расстояниями
Баг в буферах для внутренних колец с большими отрицательными буферными расстояниями
Bug in close_iterator не работает должным образом, когда входной диапазон пуст
Bug in is_simple, не обрабатывает должным образом закрытые простые строки в многостроках
Баг в строителях rtree, принимающий пару итераторов или диапазон (алгоритм упаковки), использование ссылки на уничтоженный временно, когда ссылка итератора не является истинной ссылкой, например, для некоторых адаптеров диапазона. Это также влияет на расстояние () и сопоставимое расстояние (). Эта ошибка может вызвать неожиданное поведение алгоритма rtree или distance(), например, сбой утверждения или SEGFAULT.
Bug in rtree count() member function, использование ссылки на уничтоженный временный, когда объект типа конвертируемый, но не такой, как value_type или indexable_type. Если это произойдет, неправильный результат может быть возвращен, в большинстве случаев 0.
Баги, связанные с обработкой диапазонов, препятствующие компиляции геометрий с использованием неконтейнерных диапазонов в некоторых алгоритмах (благодаря Сэмюэлю Дебионну)
Новый буфер алгоритмов для надувания/дефляции геометрий (сам буфер уже существовал, но это было только для увеличения коробки)
Новый алгоритм для удаления шипов из кольца, полигона или мультиполигона
Новый алгоритм point_on_surface, генерирующий точку, лежащую на поверхности (внутренней) полигона
Новый алгоритм прост, возвращаясь истинным, если геометрия проста в соответствии со стандартом OGC.
Новый алгоритм является действительным, возвращаясь истинным, если геометрия действительна в соответствии со стандартом OGC.
Новый алгоритм пересекается для проверки этого пространственного отношения в соответствии со стандартом OGC
Заданные алгоритмы работы (разница, пересечение, sym_difference и Union_) теперь поддерживаются в качестве входных пар точечных или линейных геометрий.
Алгоритмы расстояния и сопоставимых расстояний поддерживают все пары геометрических комбинаций.
Пространственные отношения, которые не поддерживали его (покрытые, касания, внутри и т. д.), теперь поддерживаются как входная линейная и / или ареальная геометрия.
Поддержка повышения::варианты как входная геометрия в различных алгоритмах
Поддержка rtree для сегментов индексации
Ближайший() предикат для произвольной геометрии
Улучшения
Оптимизация алгоритма создания пакетов rtree (благодаря Лу Вану)
Раскрыты билеты
8310Неправильные результаты с перекрывающимися многоугольниками (фиксированы с использованием point_on_surface для разъединения)
8375sym_difference of non-closed polygons returns closed polygon
Добавленные пересечения () и разъединения () для сегмента-бокса и линейной строки-бокса
Добавлено создание rtree с использованием алгоритма упаковки
Добавлено содержит() и охватывает() предикаты пространственных запросов
Добавлены итеративные запросы
Документация
Багфиксы
В некоторых случаях .back() или .clear() назывались, нарушая использование Концепций. Исправлено по зарегистрированным случаям
Используйте последовательную информацию о стороне в cart_intersect и get_turn_info и handle_tangencies и enrich_intersection_info. Это делается путем переключения на целое число (при необходимости) только для конкретных 6 точек, масштабирование на 4 или 3 сегментах.
8364Недействительное входное исключение, вызванное всплесками на предыдущих шагах, фиксированными
8365Недействительное входное исключение, вызванное всплесками на предыдущих этапах, зафиксировано
8969бустер::геометрия::модель::точка Конструктор единого аргумента должен быть явным
8825Патч, добавляющий переменную документацию к doxygen_xml2qbk
8652Пересечение не подходит для пересечения треугольник-треугольник. Вызванный шипом, фиксированный
9047Повысить файлы, которые включают себя (стратегии/intersection.hpp),
Внутренние изменения
Адаптированная стратегия расстояния, тип точки в шаблоне заменяется типом расчета
Адаптированные стратегии преобразования теперь имеют точки в качестве шаблона-члена и тип расчета в качестве шаблона. Похожие на Projected_point distance
Спайки (могут генерироваться в разнице) в наложениях на основе целых чисел теперь избегают во время генерации.
Добавлен пространственный индекс, разработанный для Boost. Геометрия Адама Вулькевича. Пространственный индекс был первоначально запущен Федерико Фернандесом во время программы Google Summer of Code 2008 под руководством Хартмута Кайзера.
Добавлен SVG-выход, это было уже в продлениях на несколько лет
Документация
Маленькие исправления недостающих слов
исправления в doc параметров шаблона (convex_hull, exterior_ring, return_buffer)
Багфиксы
Коллинеарные противоположные сегменты иногда (в кругах) имеют проблему устойчивости.
фиксированная вставка ложной точки пересечения (обнаружена буфером)
нанесённый пластырь Владимира Петровича для отладки обходов
Раскрыты билеты
7462вырожденный результат соединения для плавания, фиксированный
7465неправильные конструкторы доступа типа scale_transformer класса, фиксированный
7802cart_intersect.hpp неиспользуемые предупреждения о параметрах, фиксированные
Обновления в специализациях, реализованные для различных алгоритмов (как и в более ранней версии, эти изменения все еще продолжаются; они заботятся об упрощенных структурах, лучшей отчетности об ошибках и автоматизированной документации).
Точки, доступ к которым осуществляется через указатель (например, в строке), теперь должны быть специализированы без указателя. В предыдущих версиях тип<my_point>, используемый как<linestring<my_point*>>, должен был быть спекулирован как:<template<>structtag<my_point*>>. Теперь сама библиотека удаляет указатель перед вызовом класса признаков, поэтому теперь она должна быть такой:<template<>structtag<my_point>>
Багфиксы
пересечение иногда неправильно для целых точек, фиксированных
документация, порядок параметров в упрощении был неверным, фиксированным
Раскрыты билеты
7030сферическое расстояние, фиксированное (по пятну Карстена Ахнерта)
point_xy был случайно включен в один из заголовков. Если используется класс point_xy, он должен быть включен прямо сейчас.
Багфиксы
Багфикс: расстояние для мультигеометрий игнорируется заданная стратегия расстояния. фиксированный
bugfix: difference for polygon/multi_polygon (reported 2011/10/24 on GGL-list)
исправление ошибок: увеличение исключения для расчета расстояний мультигеометри (мультигеометри), где один из них пуст
bugfix: Multi DSV неправильно использует настройки, фиксированные
исправление ошибок: самопересечения иногда могут быть пропущены (введены в 1.48), зафиксированы
bugfix: выпуклый корпус разбился на пустом диапазоне (например, пустая многоточечная точка), фиксированный
исправление ошибок: область/центроид/бок/пересечение/расстояние не работает для типа «int», заполненного большими (но не переполненными) целыми числами. Исправлено.
исправление ошибок: разъединение/пересечение не работало для дегенеративных линий. Исправлено.
bugfix: cover_by не компилируется для кольца. Исправлено.
Статья Release Notes раздела Chapter 1. Geometry Chapter 1. Geometry может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.