我想看看谷歌地图API支持能够看到之间的直线存在,如果:如果计算坐标上的其他2个坐标
1)有2套坐标,基本绘制直线他们之间的路线。这我已经可以做到了。
2)检查第三组坐标是否在绘制线的x英尺\米内。
如果API不支持这一点,有关如何确定这一点的任何想法?谢谢!
我想看看谷歌地图API支持能够看到之间的直线存在,如果:如果计算坐标上的其他2个坐标
1)有2套坐标,基本绘制直线他们之间的路线。这我已经可以做到了。
2)检查第三组坐标是否在绘制线的x英尺\米内。
如果API不支持这一点,有关如何确定这一点的任何想法?谢谢!
我们通过两种不同的方式计算三角形的面积来潜入距离。假设你有三个点,P1 =(x1,y1),P2 =(x2,y2)和P3 =(x3,y3)。你的目标是找出P3接近P1,P2的线路。
该三角形的面积是两边交叉积的1/2。现在忽略1/2。两边是P2-P1 =(x2-x1,y2-y1)和P3-P1 =(x3-x1,y3-y1)。 (想象一下,所有这些点的z坐标都是零。)然后,其交叉积的唯一非零分量就是它的z坐标,其值为z =(y2-y1)(x3-x1) - (X2-X1)(Y3-Y1)。三角形的面积是(一半)该量z的绝对值。
但是我们也可以通过传统公式获得面积:基地高度的一半。基数是从P1到P2的线的(长度)。 P2-P1的点积是该长度的平方,所以b^2 =(x2-x1)^ 2 +(y2-y1)^ 2。 (因为双星号打开,所以我必须写^ 2,因为双星号打开了加粗了。)
如果我们让h是三角形的高度(也就是P3到线),那么我们有两种不同方式的三角形面积:b * h的一半和abs(z)的一半。两半取消,并且h = abs(z)/ b。我们只需要看看h是否足够小。
为了得到B,我们可以计算b ^如上2,采取了平方根,但它是简单的方式来代替:H^2 = ABS(Z)^ 2/B^2。而现在我们甚至不需要拿绝对的价值。
计算简化为:
z = (y2-y1)*(x3-x1) - (x2-x1)*(y3-y1)
bb = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)
Test that z*z/bb is less than (3 feet) squared.
一定要保持单位的轨道。三角形的边可能以脚以外的单位给你。 (我们还需要假设一切都足够接近,以至于我们可以将地图看作是平坦的,球形几何体是一个整体的蜡状球!)
还有另外一个皱纹。您需要验证P3不仅靠近线,而且它最接近的线上的点落在端点之间。要做到这一点的简单方法是检查P1和P2的角度是否是尖锐的,通过获取相邻两侧的点积来确定。如果角度为锐角,则点积将为正值。
Test that (x3-x1)*(x2-x1) + (y3-y1)*(y2-y1) > 0
Test that (x3-x2)*(x1-x2) + (y3-y2)*(y1-y2) > 0
我会消化这一点,并尽快给您。谢谢! – cborne 2014-12-08 14:15:39
几何库提供isLocationOnEdge(): https://developers.google.com/maps/documentation/javascript/geometry#isLocationOnEdge – lucas 2014-12-08 02:16:11