【发布时间】:2017-04-20 10:06:53
【问题描述】:
我正在使用 Google Maps SDK 允许用户通过点击在地图上绘制多边形。一切都很完美,用户要沿着一条路径绘制一个多边形,并在该路径上继续而不跨越线。如果发生这种情况,则会产生以下结果:。然而。如果用户犯了错误并跨越或改变他们的“点击”路径的方向,就会发生这种情况: 我需要要么 A) 提醒用户他们创建了一个无效的多边形,并且必须撤消该操作,或者 B) 修正多边形形状,形成一个完整的多边形。
根据我所做的研究,选项 A 似乎更加可行和简单,因为选项 B 需要重新排列多边形点的路径。
我已经完成研究并找到了检测线交点的算法和公式,但我还没有在 Swift 中找到任何解决方案来识别多边形是否基于点(在本例中为纬度和经度)自相交)。我不需要知道重点,只是对“这个多边形是否自相交”这个问题的真假。多边形的边通常少于 20 条。
也许 GoogleMaps SDK 内置了一个解决方案,但我还没有找到它。另外,我知道已经有针对此类问题的算法,我只是在将它们实现到 Swift 2 或 3 中时遇到了麻烦。感谢任何帮助,谢谢!
【问题讨论】:
-
既然您已经找到了要使用的算法,那么您的实现有什么问题?
-
This answer 展示了如何在 swift 中进行线-线交叉。当用户添加新行时,只需测试新行与所有现有行的交集即可。
-
这很简单。检查所有未连接的边(边),看看它们是否intersect。
-
你搞定了吗?我没有回复我的答案,因为我太忙了,它实际上会很大而且我不熟悉 google maps sdk,但可以将它编码为核心图形..
-
是的,该解决方案看起来很实用。我发布了我的答案。它不会纠正多边形,但会提醒用户它是自相交的。
标签: swift algorithm google-maps polygon google-maps-sdk-ios