欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python庫(kù)geopy計(jì)算多組經(jīng)緯度距離的實(shí)現(xiàn)方式

 更新時(shí)間:2023年08月16日 10:06:32   作者:凡人葉楓  
這篇文章主要介紹了python庫(kù)geopy計(jì)算多組經(jīng)緯度距離的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

python庫(kù)geopy計(jì)算多組經(jīng)緯度距離

日常工作中有時(shí)會(huì)用到需要計(jì)算gnss定位模組的定位精確度,需要將被測(cè)設(shè)備和真值設(shè)備進(jìn)行經(jīng)緯度坐標(biāo)之間的對(duì)比,由于經(jīng)緯度坐標(biāo)想要計(jì)算差值,需要涉及到坐標(biāo)系的轉(zhuǎn)換,計(jì)算方法比較復(fù)雜,geopy庫(kù)很好的解決了這個(gè)問(wèn)題,集成了大量的方法,可以做很多地理坐標(biāo)相關(guān)的事情,其中就有計(jì)算兩個(gè)坐標(biāo)點(diǎn)之間距離的方法。

下面是我寫(xiě)的計(jì)算一系列坐標(biāo)點(diǎn)之間的距離的python腳本,可以給大家提供參考。整理出兩個(gè)設(shè)備輸出的gps的utc時(shí)間以及經(jīng)緯度,按照下面格式寫(xiě)到txt文本中,腳本讀取txt文本,進(jìn)行整秒的經(jīng)緯度進(jìn)行比較,輸出某一時(shí)間點(diǎn)的定位誤差,單位為m。

locationA.txt

1641541189000  38.018449    119.205511
1641541190000  38.018492    119.205554
1641541191000  38.018551    119.205591
1641541192000  38.018589    119.205625
1641541193000  38.018629    119.205657
1641541194000  38.018660    119.205693

locationB.txt

1641541189000  33.018449    119.205511
1641541190000  33.018492    114.205554
1641541191000  38.018551    116.205591
1641541192000  38.018589    116.205625
1641541193000  38.018629    119.205657
1641541194000  38.018660    119.205693

diff.txt

1641541189000	1.0
1641541190000	2.0
1641541191000	3.0
1641541192000	3.0
1641541193000	4.0
1641541194000	1.0

postion.py

# -*- coding:utf-8 -*-
#!/usr/bin/python3
from geopy.distance import distance
import time
dictpostionA = {}
dictpostionB = {}
dictdiff = {}
#轉(zhuǎn)換時(shí)間戳 dt為字符串
def datetime_timestamp(dt):
    #中間過(guò)程,一般都需要將字符串轉(zhuǎn)化為時(shí)間數(shù)組
    time.strptime(dt, '%Y/%m/%d %H:%M:%S')
    s = time.mktime(time.strptime(dt, '%Y/%m/%d %H:%M:%S'))
    return int(s)
def saveATempData(filename):
    with open(filename, "w") as f:
        for time, pos in dictpostionA.items():
            data = str(time) + "\t" + pos[0] + "\t" + pos[1] + "\n"
            #print(data)
            f.write(data)
#讀取excel數(shù)據(jù)轉(zhuǎn)成txt
def readAData(filename):
    with open(filename, "r") as f:
        for line in f.readlines():
            line = line.strip('\n')
            #print(line)
            poslist = line.split()
            #print(poslist[0])
            #print(poslist[1])
            #print(poslist[2])
            #print(poslist[3])
            #print(poslist[4])
            #print(poslist[5])
            dt = poslist[0]+' '+poslist[1]+':'+poslist[2]+':'+poslist[3]
            #print(dt)
            index = datetime_timestamp(dt) * 1000
            #print(index)
            sublist = poslist[4:6]
            #print(sublist)
            dictpostionA[index] = tuple(sublist)
def readBData(filename):
    with open(filename, "r") as f:
        for line in f.readlines():
            line = line.strip('\n')
            #print(line)
            poslist = line.split()
            #print(poslist[0])
            #print(poslist[1])
            #print(poslist[2])
            sublist = poslist[1:3]
            #print(sublist)
            index = int(poslist[0])
            dictpostionB[index] = tuple(sublist)
def processData():
    for timeA, posA in dictpostionA.items():
        for timeB, posB in dictpostionB.items():
            #print(timeA, timeB)
            if timeA == timeB:
                d = distance(posA, posB).m  # m是單位
                print(timeA, d)
                dictdiff[timeA] = d
                continue
def saveDiffData(filename):
    with open(filename, "w") as f:
        for time, diff in dictdiff.items():
            data = str(time) + "\t" + str(diff) + "\n"
            #print(data)
            f.write(data)
#讀取數(shù)據(jù)
readAData("locationA.txt")
saveATempData("locationA_temp.txt")
readBData("locationB.txt")
#處理數(shù)據(jù)
processData()
#保存數(shù)據(jù)
saveDiffData("diff.txt")

python庫(kù)Geopy用法,經(jīng)緯度坐標(biāo)轉(zhuǎn)換、經(jīng)緯度距離計(jì)算

Geopy庫(kù)介紹

這里介紹一個(gè)Python 包 Geopy ,借助它也可以實(shí)現(xiàn)經(jīng)緯度地理位置轉(zhuǎn)換,

這款包之經(jīng)緯度轉(zhuǎn)換原理其實(shí)還是借助了第三方 API 平臺(tái),因?yàn)槭忻嫔咸峁┙?jīng)緯度轉(zhuǎn)換 第三方平臺(tái)很多,為了方便, Geopy 把這些接口都分別封裝在一個(gè)類中,借助 Geopy 模塊來(lái)調(diào)用,支持的第三放平臺(tái)如下

image-20210417161926347

Geopy作為一個(gè)專注于地理處理包之外, 除了能實(shí)現(xiàn)上面地理編碼逆地理編碼功能之外,還有一個(gè)其它令我經(jīng)驗(yàn)的功能, 提供兩個(gè)經(jīng)緯度坐標(biāo),計(jì)算他們?cè)诘厍蛏系淖疃叹嚯x

下面將介紹一下 Geopy 的具體用法,

地理編碼

使用 地理編碼功能時(shí),需要借助 Geopy 的 geocoders 模塊,Geopy 把所有第三方API封裝到 geocoders 中

image-20210417164945976

這里選用 OpenStreetMap 平臺(tái)上提供的 Nominatim 地理編碼器,因?yàn)榭梢悦赓M(fèi)供我們使用,不需要申請(qǐng) API ,但缺點(diǎn)是限流,限額,不能大規(guī)模頻繁訪問(wèn),否則會(huì)返回 403,429錯(cuò)誤代碼

from geopy.geocoders import Nominatim
geolocator=Nominatim()
location= geolocator.geocode("北京市海淀區(qū)西二旗北路")
print(location.address)
print(location.latitude,location.longitude)

結(jié)果如下

西二旗北路, 東北旺村, 海淀區(qū), 北京市, 102208, 中國(guó)
40.056793 116.305811

逆地理編碼

from geopy.geocoders import Nominatim
geolocator=Nominatim()
location= geolocator.reverse("40.056793 116.305811")
print(location.address)

結(jié)果如下

1#, 西二旗北路, 東北旺村, 海淀區(qū), 北京市, 102208, 中國(guó)

結(jié)果看起來(lái)還不錯(cuò),簡(jiǎn)單方便;但提醒一下,因?yàn)榍懊嬲f(shuō)過(guò) Nominatim 模塊是限額度的,不要頻繁訪問(wèn),否則會(huì)出現(xiàn)以下錯(cuò)誤

image-20210417175101978

根據(jù)經(jīng)緯度計(jì)算距離

Geopy 最讓我驚喜的是這個(gè)用法,提供兩個(gè)經(jīng)緯度坐標(biāo)計(jì)算他們之間的距離,因?yàn)榈厍蚓唧w來(lái)說(shuō)是橢圓,所以不能按照常規(guī)方法來(lái)計(jì)算 ,目前現(xiàn)有比較流行的幾個(gè)模型有以下幾個(gè)

              model             major (km)   minor (km)     flattening
ELLIPSOIDS = {'WGS-84':        (6378.137,    6356.7523142,  1 / 298.257223563),
              'GRS-80':        (6378.137,    6356.7523141,  1 / 298.257222101),
              'Airy (1830)':   (6377.563396, 6356.256909,   1 / 299.3249646),
              'Intl 1924':     (6378.388,    6356.911946,   1 / 297.0),
              'Clarke (1880)': (6378.249145, 6356.51486955, 1 / 293.465),
              'GRS-67':        (6378.1600,   6356.774719,   1 / 298.25),
              }

根據(jù)官方介紹,官網(wǎng)選擇的是 WGS-84 模型,根據(jù)統(tǒng)計(jì)最終計(jì)算到的距離誤差最高在0.5%左右;使用方法如下

from geopy import distance
newport_ri = (41.49008, -71.312796)
cleveland_oh = (41.499498, -81.695391)
print(distance.distance(newport_ri, cleveland_oh).miles)#最后以英里單位輸出
#output
538.39044536
wellington = (-41.32, 174.81)
salamanca = (40.96, -5.50)
print(distance.distance(wellington, salamanca).km)# 以 km 作為單位輸出
19959.6792674

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python求斐波那契數(shù)列示例分享

    python求斐波那契數(shù)列示例分享

    這篇文章主要介紹了python求斐波那契數(shù)列的示例,需要的朋友可以參考下
    2014-02-02
  • python sklearn中的決策樹(shù)模型詳解

    python sklearn中的決策樹(shù)模型詳解

    本文主要說(shuō)明 Python 的 sklearn 庫(kù)中的決策樹(shù)的常用接口、屬性以及參數(shù)調(diào)優(yōu)說(shuō)明,需要讀者或多或少了解過(guò)sklearn庫(kù)和一些基本的機(jī)器學(xué)習(xí)知識(shí),感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-08-08
  • 如何用Python數(shù)據(jù)可視化來(lái)分析用戶留存率

    如何用Python數(shù)據(jù)可視化來(lái)分析用戶留存率

    今天和大家來(lái)分享一些數(shù)據(jù)可視化方向的干貨,我們來(lái)嘗試用Python來(lái)繪制一下“漏斗圖”,感興趣的小伙伴和小編一起進(jìn)入課題吧,但愿大家會(huì)有所收獲
    2021-09-09
  • python中l(wèi)ogging庫(kù)的使用總結(jié)

    python中l(wèi)ogging庫(kù)的使用總結(jié)

    Python的logging模塊提供了通用的日志系統(tǒng),可以方便第三方模塊或者是應(yīng)用使用,下面這篇文章主要給大家介紹了關(guān)于python中l(wèi)ogging庫(kù)使用的一些知識(shí)總結(jié),文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • Python映射類型之dict詳解

    Python映射類型之dict詳解

    這篇文章主要為大家詳細(xì)介紹了Python映射類型之dict,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • python如何將圖片生成視頻MP4

    python如何將圖片生成視頻MP4

    這篇文章主要介紹了python如何將圖片生成視頻MP4問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Python實(shí)現(xiàn)LRU算法

    Python實(shí)現(xiàn)LRU算法

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)LRU緩存置換算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python使用nntp讀取新聞組內(nèi)容的方法

    python使用nntp讀取新聞組內(nèi)容的方法

    這篇文章主要介紹了python使用nntp讀取新聞組內(nèi)容的方法,實(shí)例分析了Python操作nntp讀取新聞組內(nèi)容的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python字符串處理的8招秘籍(小結(jié))

    Python字符串處理的8招秘籍(小結(jié))

    這篇文章主要介紹了Python字符串處理的8招秘籍,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python 實(shí)現(xiàn)敏感目錄掃描的示例代碼

    Python 實(shí)現(xiàn)敏感目錄掃描的示例代碼

    這篇文章主要介紹了Python 實(shí)現(xiàn)敏感目錄掃描的示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論