摘要:在做和地圖有關(guān)的項(xiàng)目的時(shí)候,有時(shí)候會(huì)遇到這樣的需求,比如已知圓中心的經(jīng)緯度,手動(dòng)輸入它的半徑得到這個(gè)圓范圍內(nèi)所有的隨機(jī)點(diǎn)。求圓半徑內(nèi)點(diǎn)的代碼主要的業(yè)務(wù)是這句是緯度和米的比例關(guān)系是經(jīng)度和米的比例關(guān)系最后根據(jù)車牌號(hào)模塊查詢。
在做和地圖有關(guān)的項(xiàng)目的時(shí)候,有時(shí)候會(huì)遇到這樣的需求,比如:
已知圓中心的經(jīng)緯度(lng, lat),手動(dòng)輸入它的半徑radius,得到這個(gè)圓范圍內(nèi)所有的隨機(jī)點(diǎn)。
我用的是百度地圖js-sdk。
理論部分,喜歡看代碼可以直接跳過:
從上圖可以看出,圓1的經(jīng)緯度是(114.132384, 22.539816)用(x1, y1)表示,圓2的經(jīng)緯度是(114.131888, 22.533516)用(x2, y2)表示
我不可能用abs(x1 - x2) + abs(y1 - y2) <= radius這樣的邏輯去判斷圓1是否在以圓2為中心點(diǎn),radius為半徑的圓范圍內(nèi),因?yàn)檫@樣不是兩點(diǎn)之間的最佳路徑。(abs為取絕對(duì)值函數(shù))
我需要用到初中數(shù)學(xué)學(xué)到過的勾股定理知識(shí),用(abs(x1-x2))^2 + (abs(y1-y2))^2 <= radius^2來獲得兩點(diǎn)之間最短路徑,也就是把這個(gè)想象成一個(gè)直角三角形,求它的斜邊。
我通過js將原點(diǎn)的經(jīng)緯度和半徑傳到后臺(tái),后臺(tái)用java,用的是mybatis框架,數(shù)據(jù)庫(kù)用的Oracle。
js和java就是簡(jiǎn)單的數(shù)據(jù)傳輸,可以省略,業(yè)務(wù)邏輯主要在sql部分:
表結(jié)構(gòu):車牌號(hào),緯度,經(jīng)度,時(shí)間。
先根據(jù)相同車牌號(hào)用GROUP BY去重,取最大時(shí)間的一條數(shù)據(jù)。
求圓半徑內(nèi)點(diǎn)的sql代碼:
SELECT G1.* FROM ${tableName} G1, ( SELECT MIN(UUID) AS UUID, MAX(LOCATIONTIME) FROM ${tableName} GROUP BY VEHICLENO ) G2 WHERE G1.UUID = G2.UUID AND POWER(ABS((G1.LAT / 0.00000899 - #{lat} / 0.00000899)), 2) + POWER(ABS((G1.LON / 0.00001141 - #{lon} / 0.00001141)), 2) POWER(#{radius}, 2) AND VEHICLENO LIKE CONCAT(#{chepaihao}, "%")
主要的業(yè)務(wù)是這句:
POWER(ABS((G1.LAT / 0.00000899 - #{lat} / 0.00000899)), 2) + POWER(ABS((G1.LON / 0.00001141 - #{lon} / 0.00001141)), 2) POWER(#{radius}, 2)
0.00000899是緯度和米的比例關(guān)系: 1m = 0.00000899°
0.00001141是經(jīng)度和米的比例關(guān)系: 1m = 0.00001141°
最后根據(jù)車牌號(hào)模塊查詢。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76078.html
摘要:在做和地圖有關(guān)的項(xiàng)目的時(shí)候,有時(shí)候會(huì)遇到這樣的需求,比如已知圓中心的經(jīng)緯度,手動(dòng)輸入它的半徑得到這個(gè)圓范圍內(nèi)所有的隨機(jī)點(diǎn)。求圓半徑內(nèi)點(diǎn)的代碼主要的業(yè)務(wù)是這句是緯度和米的比例關(guān)系是經(jīng)度和米的比例關(guān)系最后根據(jù)車牌號(hào)模塊查詢。 在做和地圖有關(guān)的項(xiàng)目的時(shí)候,有時(shí)候會(huì)遇到這樣的需求,比如:已知圓中心的經(jīng)緯度(lng, lat),手動(dòng)輸入它的半徑radius,得到這個(gè)圓范圍內(nèi)所有的隨機(jī)點(diǎn)。 我用的...
摘要:說明這篇文章說如何用畫出漂亮的下雨效果,先看看最后實(shí)現(xiàn)的效果吧。 說明 這篇文章說如何用canvas畫出漂亮的下雨效果,先看看最后實(shí)現(xiàn)的效果吧。 效果圖showImg(https://segmentfault.com/img/bV8ITm?w=936&h=532); 解釋 看圖來分析下,我們需要實(shí)現(xiàn)哪些效果。1、雨滴下落效果,移動(dòng)鼠標(biāo)控制下落方向 2、雨滴下落散成小水珠,小水珠的移動(dòng)...
閱讀 1172·2021-10-15 09:39
閱讀 3077·2021-09-10 10:50
閱讀 3466·2019-08-30 15:53
閱讀 1893·2019-08-30 15:52
閱讀 2580·2019-08-29 15:31
閱讀 1988·2019-08-26 13:43
閱讀 2606·2019-08-26 13:37
閱讀 1451·2019-08-23 18:31