如何防止用户使用 Google 地图绘图管理器创建自相交多边形?

5 javascript google-maps google-maps-api-3

我正在使用Google Maps Drawing Manager来允许用户绘制多边形。

用户可以绘制多边形,但它必须是一个“简单”的多边形,而不是“复杂的”,即它不能自相交。

谷歌地图库似乎没有任何内置支持检测/防止自相交,所以我计划倾听用户创建每个点,然后我将运行检测算法来检查当前的折线/线串是自相交。

不幸的是,文档中唯一的事件是overlaycomplete 事件。

我可以等到用户完成绘制他们的多边形之前验证它并告诉他们这是不允许的,但是如果我能阻止他们首先放置点,这将是一个更好的体验,可能会为他们节省很多浪费了时间和精力。

我可以用我需要的功能构建我自己的绘图工具,但是当 Google 提供非常接近我需要的产品时,我宁愿避免创建和维护这样的东西。

我已经准备好了验证代码,我正在使用SO 上类似问题提供的 JSTS 代码,这是我要问的绘图管理器功能。

小智 3

我发现当用户将每个点放置在多边形中时没有记录的事件,只有完成创建多边形时的事件。

所以我只能使用它,直到我有时间从头开始制作我自己的绘图管理器。

而且 JSTS 非常大(文件大小缩小),所以我放弃了它。

由于我的多边形的点数总是很低,因此我采用了一种更简单的方法,我测试了多边形中的每条线,看看它们是否与多边形中的任何其他线相交。这是相当“蛮力”的,但它仍然足够快,不会被最终用户注意到。