我们有一个命中测试用例,希望也考虑路径实际边界上的点。我们正在使用matplotlib.path.contains_points来集中测试一堆点,它对我们来说非常有效。今天我发现它对边界上的点返回false,在我们的例子中是原点(0,0),它是路径上的一个点。
有没有办法配置函数调用以在边界点上产生True
,即包含边界?我只是看到它支持一个独家测试,但根据documentation,还有变换和半径的其他参数,也许它们有一些神奇的数字用于将边界点推送到真的?
contains_points(points, transform=None, radius=0.0)
返回bool
如果路径包含相应的点,则为True
的数组。如果
transform
不是None
,则路径将在之前进行转换 进行测试。
radius
允许路径稍大或稍小。
答案 0 :(得分:2)
快速扫描源代码说不。 matplotlib
并非真正用于空间操作;它只是因为它是一个具有巨大API表面的旧代码库而对它们有一点支持。
我建议使用
shapely
,专门为此类空间操作而构建。如果您使用shapely
,则可以利用object.intersects
来处理此问题。
您可以将点数转换为pandas.Series
个shapely.Point
个对象和多边形(给定一系列坐标)到poly = shapely.Polygon(coordinates)
个对象中。然后执行points_that_intersect = points[points.map(lambda p: poly.intersects(p)]