億級經緯度距離計算88.73秒,秒殺VBA!

2020-12-25 騰訊網

計算經緯度的代碼網上一搜一大把,通常是單點距離的計算,無法實現批量計算,本文將利用pandas實現億級經緯度距離代碼的實現。

本文將實現兩張表的任意點之間100、200、300、500、800、1000米範圍內的距離計算。

首先導入需要使用的包

1importpandasaspd

2importnumpyasnp

3frommathimportradians, cos, sin, asin, sqrt, ceil

4importmath

5importtime

經緯度計算自定義函數

1defgeodistance(lng1,lat1,lng2,lat2):

2lng1, lat1, lng2, lat2 = map(radians, [float(lng1), float(lat1), float(lng2), float(lat2)])

3# 經緯度轉換成弧度

4dlon=lng2-lng1

5dlat=lat2-lat1

6a=sin(dlat/2)**2+ cos(lat1) * cos(lat2) * sin(dlon/2)**2

7distance=2*asin(sqrt(a))*6371*1000# 地球平均半徑,6371km

8distance=round(distance,)

9returndistance

實現不同範圍內的距離計算,例如100、200、300、500、800、1000,適合做成一張參數表。

由於地球是球形,不同緯度下,同一經度差值對應的距離不同,緯度相同且緯度越大時,同一經度對應的距離越小,中國經緯度跨度約為,此處為了計算最大經度差值,我們選取緯度為;不同經度下,同一緯度差異對應的距離相同

不同經緯度差異對應最小距離表格如下:

分別導入源表和目標表,兩個表關聯得到原點與目標點的所有配對

1file_name =r'D:\python\geo\sTable.csv'

2df1=pd.read_csv(file_name)

3file_name2 =r'D:\python\geo\tTable.csv'

4df2=pd.read_csv(file_name2)

5m = pd.concat([pd.concat([df1]*len(df2)).sort_index().reset_index(drop=True),

6pd.concat([df2]*len(df1)).reset_index(drop=True) ],1)

然後根據經度和緯度差值進行過濾(經緯度差值大於某個值,距離大於某個值,參見參數表

得到下圖表格:

然後針對每一行的4個參數應用自定義函數,此處使用內置模塊(比使用循環要高效很多)。

根據經緯度差值判斷距離是一個大致的範圍,我們選取緯度值獲取了最大的經度差值,隨著緯度減小,此時計算的距離會大於該閾值,所以要對初次計算結果進行過濾,得出滿足閾值的條目:

1distance = distance.append(nn[nn.distance

經過調試,發現該方法計算量上限基本為萬,當計算量大於萬怎麼辦?

偶然間想起了之前自己將文件分割的文章,當計算量大於萬,我們對原表進行分割,分割個數就是,不能整除時,需要先上取整,多分割一個文件

分割數目有了,文件分片大小也就有了

1linesPerFile = ceil(count_a / pieces)+1

文件分割代碼:

1filecount =1

2# 以0為起點,文件行數為終點,分片大小為間隔,循環遍歷文件,每次遍歷行數即為分片大小,而不是每行遍歷一次,處理效率極高,但是比較吃內存

3foriinrange(, len(csv_file), linesPerFile):

4# 打開目標文件準備寫入,不存在則創建

5withopen(file_name[:-4] +'_'+ str(filecount) +'.csv','w+')asf:

6# 判斷是否為第一個文件,不是的話需要先寫入標題行

7iffilecount >1:

8f.write(csv_file[])

9# 批量寫入i至i+分片大小的多行數據,效率極高

10f.writelines(csv_file[i:i+linesPerFile])

11# 完成一個文件寫入之後,文件編號增加1

12filecount +=1

詳情可以參考如下文章。

將文件分割之後,我們便可以循環處理分片文件與目標文件,將得到的結果合併到一個空的裡st_time)))

使用測試數據測算,經緯度距離億次計算量耗時約秒,秒殺VBA。

相關焦點

  • 【今日回答】經緯度距離計算@趙趙趙妹媚
    同一經線上,緯度每一度的間距是111km同一緯線上,每一經度的間距是用111乘以緯度數的餘弦值算兩地的實地距離時,可以用勾股定理在地球儀上,與赤道相平行的圓就是緯線緯度每差1度,距離相差110千米在地球儀上,連接南北兩極點的半圓就是 經線經度每差1度的實地距離是:110千米*cosa其中
  • 根據經緯度查詢附近的xxx
    rad2deg($dlng); $dlat = $distance/EARTH_RADIUS; $dlat = rad2deg($dlat); return array( 'left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng), //左上方點經緯度
  • 報上經緯度就能寄郵件 快遞業革命性技術誕生
    網絡上流行語「報上你的經緯度」不再是調侃說法,而將成為未來普通人寄郵件的方法——通過手機GPS等方式獲得郵件收寄位置的經緯度坐標,分揀中心掃描郵件條碼後進行全自動分揀。這種被稱為「經緯度坐標郵件分揀法」的技術,極大地提高配送效率,同時降低企業成本,還能防止客戶信息洩露,基於這項技術還可以催生第三方服務平臺,改變大大小小快遞企業各自經營的分揀模式。這種技術已經提交了PCT國際專利申請。
  • 拼多多「秒拼」事業群首推大促:「520秒殺節」
    來源:金融界網站5月15日至5月21日,拼多多「秒拼」事業群旗下的「限時秒殺」2020年首次推出頻道大促,上線5.2元戴森吸塵器、迪奧香水,半價iPhone SE,五九折別克威朗、雪佛蘭科魯澤等特價商品。
  • 高中地理:利用經緯網估算距離的方法
    如何利用經緯網估算地球上兩點的距離?初高中地理中涉及到的計算題讓有些同學感覺到頭疼,過去文科選科思維就是對理科的一種逃避,有人常說我具有理科思維,所以我學文,而在文科中,數學和地理計算題確實是很多文科學生難以跨越的鴻溝,如果把這兩門搞定,那麼幾乎都是重點大學的苗子。其實地理中涉及到的計算題真的都是紙老虎,涉及到的數學公式也特別少。所以不用害怕,跟氪老師一起來學。
  • 高中地理:利用經緯網估算距離的方法
    如何利用經緯網估算地球上兩點的距離?初高中地理中涉及到的計算題讓有些同學感覺到頭疼,過去文科選科思維就是對理科的一種逃避,有人常說我具有理科思維,所以我學文,而在文科中,數學和地理計算題確實是很多文科學生難以跨越的鴻溝,如果把這兩門搞定,那麼幾乎都是重點大學的苗子。
  • 你在小程序中怎麼計算兩個經緯度的距離?
    你還在為小程序中計算兩個經緯度之間的距離發愁嗎?你還在為小程序中地址逆向解析發愁嗎?你還在為小程序中路線規劃,地點搜索發愁嗎?好消息!好消息!有了官方支持時的調用在沒有官方支持時,小程序中的位置獲取,可以採用騰訊地圖,高德地圖,百度地圖都可以,但是你需要先通過小程序的wx.getLocation 獲取當前的經緯度,然後再藉助第三方地圖提供的webservice API ,自己在後端實現一個根據經緯度獲取當前位置的接口,然後供小程序調用。
  • 【複習專題】地球經緯網
    考點三 經緯網上距離計算考點四 經緯線和經緯度的判斷【例1】 (高考經典題)下圖是經緯網圖層和中國省級行政中心圖層的疊加圖,圖中經緯線間隔度數相等。若在甲、乙兩地GPS接收機顯示的經緯度坐標分別為北緯36°08′27″、東經118°54′08″和北緯34°08′09″、東經116°53′34″,則甲在乙的(  )A.東南方            B.東北方C.西南方            D.西北方解析 根據兩地經緯度可繪製簡圖,從圖中不難看出甲在乙的東北方。
  • 量子計算機九章:6億年計算,它只需200秒,超谷歌100億倍
    其速度比目前的超級計算機計算速度快一百億倍,比去年穀歌發布的53個超導量子比特計算機「懸鈴木」快一百億倍,中國的量子計算機已經達到了事實上的「量子霸權」!量子計算機和傳統計算機到底有什麼差別?Sycamore用了88個量子比特僅作為耦合器工作,而另外54個羅吉比特作為運算很明顯這已經超過了實現量子計算優勢的50個量子比特要求,在某些計算上它已經能超過傳統計算機!不過「懸鈴木」採用的是超導體系,它必須全程在-273.12℃(30mK)的超低溫環境下運行,並且在計算隨機線路採樣問題上,存在樣本數量的漏洞。
  • 菜鳥高德給每棟樓標上經緯度
    原標題:菜鳥高德給每棟樓標上經緯度   本報訊(記者 範曉)隨著電商物流和O2O上門服務的蓬勃發展,再加上交通導航等個體需求,地址服務的精細化水平也迎來升級。昨日,菜鳥網絡與高德地圖宣布將打通底層地址數據,建設國內先進的5級地址庫。據透露,5級地址庫會通過開放平臺提供給各行業使用,將被應用到物流、O2O、導航、氣象等多種場景。
  • 所有家長請注意,便捷度秒殺平板、學習機的小度智能屏來嘍!
    父母一邊「雲辦公」,一邊還要實時「監控」孩子的動態,以前想像中邊工作邊帶娃的美好畫面,現在卻成了7*24小時的噩夢,而一臺小度智能屏就能幫你解放時刻緊繃的神經,成功減負。作為國民級智能音箱品牌,小度業內首創更健康安全的「兒童模式」,為家長省時省力不用時刻監督。
  • 經緯紡機(000666):子公司中融國際信託有限公司財務信息
    數據顯示,中融信託2020年實現的營業總收入為54.88億元,同比增長2.41%;其中,手續費及佣金淨收入為44.42億元,同比減少1.42%;淨利潤為13.73億元,同比減少21.76%。  下表為中融信託公司2015-2019年營業收入、淨利潤排名,營業收入排名一直保持在前五,而近五年的淨利潤排名卻不盡人意。
  • 機器學習計算距離和相似度的方法
    閔可夫斯基距離比較直觀,但是它與數據的分布無關,具有一定的局限性,如果 x 方向的幅值遠遠大於 y 方向的值,這個距離公式就會過度放大 x 維度的作用。所以,在計算距離之前,我們可能還需要對數據進行 z-transform 處理,即減去均值,除以標準差:
  • 計算相似度
    在機器學習中,經常要度量兩個對象的相似度,例如k-最近鄰算法,即通過度量數據的相似度而進行分類。在無監督學習中,K-Means算法是一種聚類算法,它通過歐幾裡得距離計算指定的數據點與聚類中心的距離。在推薦系統中,也會用到相似度的計算(當然還有其他方面的度量)。
  • 度/分/秒(DMS)vs小數度(DD)
    我們用十進位度或度/分/秒來測量那些坐標。但是小數度數(DD)和度數-分鐘-秒(DMS)之間有什麼區別?度/分/秒(DMS)vs小數度(DD)對於定位,我們可以使用經度和緯度坐標找到地球上的任何位置。然後,我們使用十進位度或度/分鐘/秒來測量那些坐標。
  • 方舟生存進化經緯度查詢方法 手機版經緯度
    方舟生存進化怎麼查看經緯?經緯度也就是坐標的意思啦,下面小編就來給大家講解下查看經緯坐標的方法,還不會的就一起來看看吧。
  • 「雙十一」15萬瓶飛天茅臺上線秒光 網上價差超千元
    「雙十一」15萬瓶飛天茅臺上線秒光,網上價差超千元  中新經緯客戶端11月13日電 (吳曉薇)「錯過今天,後悔一年。」這是消費者在「雙十一」期間打開手機天貓APP後看到的第一句話。「雙十一」當天,線上售賣的53度飛天茅臺最低1449元,有店鋪僅用2小時做到銷售額破億。從牴觸觀望到投身其中,再到玩出花樣活動,傳統白酒行業對電商的態度加速破冰。
  • 如何用Excel計算地球上兩點之間的距離
    今天葩葩哥教你一個絕招:用Excel 計算地球上兩點之間的距離。直奔主題:打開Excel任意位置輸入兩個經緯度坐標 在這裡我們選取的坐標一個是我愛北京天安門的北京天安門的地點另一個是最最最最最可愛的大美
  • 用數學幾何如何計算月地距離,月亮的體積只有地球的四十九分之一
    其實用天體幾何的知識就能測量出月地之間的距離,我們看月亮就和我們看地球上遠處的物體是一樣的,在地球上我們能通過角度以及比例計算出遠處物體真實的大小,我們同樣可以使用著個辦法計算出月亮的真實大小以及月地之間的距離。遠處物體在我們眼睛中形成的形象會有一個角直徑,就是我們的視線在物體形象上張開的角度。
  • 手機高德地圖在哪裡看經緯度 怎麼查經緯度坐標方法
    原標題:手機高德地圖怎麼查經緯度 查經緯度坐標方法 責任編輯:曾少林