我试图找到由两个地理坐标表示的线与由三个或更多地理坐标表示的多边形的交点。 我的目标是找到任何多边形边界线以及前两个坐标所描述的线上最接近第一个坐标的点。
我假设多边形是一个简单的闭合多边形(即矩形)。
在这种情况下,算法将返回用红色标记的交点(更接近第一个坐标)。
我正在使用 Android 版 Kotlin。
我尝试使用 Turf for Java,但无法找到执行该操作的函数。
也许实际上有一个库可以解决这个问题,但是当你可以用 10 或 20 行代码来完成时,为什么要加载数百兆字节呢? 点的坐标必须以度为单位(即 8°30'00" -> 8.5),并且分别在南半球和西半球具有负号。然后您可以使用以下算法找到您要查找的红点:
对于每条蓝线(你的图中有6条),你必须使用公式1计算蓝线段是否与绿线相交,如果相交,你必须计算相交的坐标观点。在您的示例中,您会发现两个这样的点。
对于您在步骤 1) 中找到的所有这些交点,您必须使用公式 2 计算到点 1 的距离平方。1) 中距离平方最小的交点就是您要寻找的红点。
公式1: 如果您熟悉数学,您可以在这里找到您需要的一切。如果没有,我可以简单地向您解释一下。然后我需要知道:红点保证在1和2之间,还是1和2也可以在多边形的同一侧?绿色直线保证击中多边形吗?
公式2: 如果 (P.x, P.y) 是 1) 的交点,则它的距离平方
(P.x-1.x)*(P.x-1.x)+(P.y-1.y)*(P.y-1.y)
从 1=(1.x, 1.y)。