【发布时间】:2017-10-11 07:30:24
【问题描述】:
使用 boost::geometry::intersects 判断两个几何图形是否相互交叉时出现运行时错误,出现以下错误:
test:/bigdisk/geo.algorithms/mason_packages/headers/boost/1.65.1/include/boost/geometry/policies/robustness/segment_ratio.hpp:54: 静态bool boost::geometry::detail::segment_ratio ::less::apply(const Ratio&, const Ratio&) [with Ratio = boost::geometry::segment_ratio; Type = double]:断言 `lhs.denominator() != 0' 失败。 line1 等于 line2:已中止
在我天真的眼里,问题出在哪里并不明显。如果有人有任何建议,我将不胜感激。
我已将 boost 几何调整为我自己的几何模型,并且 boost 的 intersects 函数在这种情况下刚刚中止:
point<double, GCJ02LL> pt11{118.8031, 32.10011};
point<double, GCJ02LL> pt12{118.80297, 32.10016};
point<double, GCJ02LL> pt13{118.80284, 32.10021};
dataop::geometry::line_string<double, GCJ02LL> line1{pt11, pt12, pt13};
dataop::geometry::line_string<double, GCJ02LL> line2{pt11, pt12, pt13};
std::cout << "line1 intersects line2? : " << intersects(line1, line2) << std::endl;
你可以看到我的两个 line_strings 是一样的,但这不是问题,因为在其他情况下它运行良好。
更奇怪的是 boost::geometry::equal 在这种情况下也会像这样中止:
point<double, GCJ02LL> pt11{118.8031, 32.10011};
point<double, GCJ02LL> pt12{118.80297, 32.10016};
point<double, GCJ02LL> pt13{118.80284, 32.10021};
dataop::geometry::line_string<double, GCJ02LL> line1{pt11, pt12, pt13};
std::cout << "line1 equal line1? " << equal(line1, line1) << std::endl;
【问题讨论】:
标签: c++ boost boost-geometry