2014-12-08 75 views
0

我想看看谷歌地圖API支持能夠看到之間的直線存在,如果:如果計算座標上的其他2個座標

1)有2套座標,基本繪製直線他們之間的路線。這我已經可以做到了。

2)檢查第三組座標是否在繪製線的x英尺\米內。

如果API不支持這一點,有關如何確定這一點的任何想法?謝謝!

+3

幾何庫提供isLocationOnEdge(): https://developers.google.com/maps/documentation/javascript/geometry#isLocationOnEdge – lucas 2014-12-08 02:16:11

回答

0

我們通過兩種不同的方式計算三角形的面積來潛入距離。假設你有三個點,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 
+0

我會消化這一點,並儘快給您。謝謝! – cborne 2014-12-08 14:15:39