最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

下面是我寫的計算一系列坐標點之間的距離的python腳本,可以給大家提供參考。整理出兩個設(shè)備輸出的gps的utc時間以及經(jīng)緯度,按照下面格式寫到txt文本中,腳本讀取txt文本,進行整秒的經(jīng)緯度進行比較,輸出某一時間點的定位誤差,單位為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)換時間戳 dt為字符串
def datetime_timestamp(dt):
    #中間過程,一般都需要將字符串轉(zhuǎn)化為時間數(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庫Geopy用法,經(jīng)緯度坐標轉(zhuǎn)換、經(jīng)緯度距離計算

Geopy庫介紹

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

這款包之經(jīng)緯度轉(zhuǎn)換原理其實還是借助了第三方 API 平臺,因為市面上提供經(jīng)緯度轉(zhuǎn)換 第三方平臺很多,為了方便, Geopy 把這些接口都分別封裝在一個類中,借助 Geopy 模塊來調(diào)用,支持的第三放平臺如下

image-20210417161926347

Geopy作為一個專注于地理處理包之外, 除了能實現(xiàn)上面地理編碼、逆地理編碼功能之外,還有一個其它令我經(jīng)驗的功能, 提供兩個經(jīng)緯度坐標,計算他們在地球上的最短距離

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

地理編碼

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

image-20210417164945976

這里選用 OpenStreetMap 平臺上提供的 Nominatim 地理編碼器,因為可以免費供我們使用,不需要申請 API ,但缺點是限流,限額,不能大規(guī)模頻繁訪問,否則會返回 403,429錯誤代碼

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

結(jié)果如下

西二旗北路, 東北旺村, 海淀區(qū), 北京市, 102208, 中國
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, 中國

結(jié)果看起來還不錯,簡單方便;但提醒一下,因為前面說過 Nominatim 模塊是限額度的,不要頻繁訪問,否則會出現(xiàn)以下錯誤

image-20210417175101978

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

Geopy 最讓我驚喜的是這個用法,提供兩個經(jīng)緯度坐標計算他們之間的距離,因為地球具體來說是橢圓,所以不能按照常規(guī)方法來計算 ,目前現(xiàn)有比較流行的幾個模型有以下幾個

              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)計最終計算到的距離誤差最高在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é)

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

相關(guān)文章

  • python引用DLL文件的方法

    python引用DLL文件的方法

    這篇文章主要介紹了python引用DLL文件的方法,涉及Python調(diào)用dll文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 利用Python在一個文件的頭部插入數(shù)據(jù)的實例

    利用Python在一個文件的頭部插入數(shù)據(jù)的實例

    下面小編就為大家分享一篇利用Python在一個文件的頭部插入數(shù)據(jù)的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Pyorch之numpy與torch之間相互轉(zhuǎn)換方式

    Pyorch之numpy與torch之間相互轉(zhuǎn)換方式

    今天小編就為大家分享一篇Pyorch之numpy與torch之間相互轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • pandas將多個dataframe以多個sheet的形式保存到一個excel文件中

    pandas將多個dataframe以多個sheet的形式保存到一個excel文件中

    這篇文章主要介紹了pandas將多個dataframe以多個sheet的形式保存到一個excel文件中,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 使用Django搭建web服務(wù)器的例子(最最正確的方式)

    使用Django搭建web服務(wù)器的例子(最最正確的方式)

    今天小編就為大家分享一篇使用Django搭建web服務(wù)器的例子(最最正確的方式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • pandas使用fillna函數(shù)填充NaN值的代碼實例

    pandas使用fillna函數(shù)填充NaN值的代碼實例

    最近在工作中遇到一個問題,pandas讀取的數(shù)據(jù)中nan在保存后變成空字符串,所以下面這篇文章主要給大家介紹了關(guān)于pandas使用fillna函數(shù)填充NaN值的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • python實現(xiàn)凱撒密碼、凱撒加解密算法

    python實現(xiàn)凱撒密碼、凱撒加解密算法

    這篇文章主要介紹了python語言編程實現(xiàn)凱撒密碼、凱撒加解密算法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • pytest conftest.py文件的使用講解

    pytest conftest.py文件的使用講解

    這篇文章主要介紹了pytest的conftest.py文件的使用講解,幫助大家更好的理解和學習使用pytest框架,感興趣的朋友可以了解下
    2021-03-03
  • Python中OpenCV實現(xiàn)簡單車牌字符切割

    Python中OpenCV實現(xiàn)簡單車牌字符切割

    本文將結(jié)合實例代碼,在Jupyter Notebook上使用Python+opencv實現(xiàn)如下簡單車牌字符切割。感興趣的小伙伴可以參考一下
    2021-06-06
  • Python中提升圖片清晰度的四種方法

    Python中提升圖片清晰度的四種方法

    這篇文章主要為大家詳細介紹了Python中提升圖片清晰度的四種常用方法,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02

最新評論

宜兰县| 永川市| 昔阳县| 绥德县| 嵊泗县| 周宁县| 辽中县| 六盘水市| 平湖市| 高州市| 监利县| 濉溪县| 五台县| 大方县| 芜湖市| 凤庆县| 昔阳县| 北安市| 龙口市| 中山市| 西和县| 达拉特旗| 莒南县| 绥宁县| 老河口市| 普格县| 清远市| 柳江县| 盐源县| 化州市| 临江市| 淮北市| 抚顺市| 高台县| 祥云县| 济源市| 乌兰察布市| 鹤山市| 洮南市| 湾仔区| 东平县|