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

How do I prevent a user creating a self-intersecting polygon with the Google Maps Drawing Manager?

本文关键字:管理器 绘图 创建 自相交 多边形 地图 Google 何防止 用户      更新时间:2023-09-26

我正在使用Google地图绘图管理器来允许用户绘制多边形。

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

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

不幸的是,文档中唯一的事件是覆盖完成事件。

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

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

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

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

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

此外,JSTS变得非常大(文件大小缩小(,所以我放弃了它。

由于我的多边形的

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