通過(guò)圖片獲取位置

這個(gè)原圖拍攝時(shí)需要有打開(kāi)GPS定位,這樣它的位置信息就會(huì)保存到圖片中朴则。

這個(gè)方法的實(shí)現(xiàn)需要用到Python 的Exifread和GeoPy兩個(gè)包权纤。
先普及一下Exif信息钓简,它最初由日本電子工業(yè)發(fā)展協(xié)會(huì)在1996年制定,它是可以附加于JPEG汹想、TIFF外邓、RIFF等文件之中,為其增加有關(guān)數(shù)碼相機(jī)拍攝信息的內(nèi)容和索引圖或圖像處理軟件的版本信息古掏。
而我們用到的第二個(gè)GeoPy包损话,它最強(qiáng)大的功能就是將獲取到的位置信息定位到地址。
1槽唾、先讀取圖片

img_file = open(photo, 'rb')
image_map = exifread.process_file(img_file)

2丧枪、獲取圖片信息中的經(jīng)緯度信息

# 圖片的經(jīng)度
img_longitude_ref = image_map["GPS GPSLongitudeRef"].printable
img_longitude = image_map["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
img_longitude = float(img_longitude[0]) + float(img_longitude[1]) / 60 + float(img_longitude[2]) / float(img_longitude[3]) / 3600
if img_longitude_ref != "E":
    img_longitude = img_longitude * (-1)

# 圖片的緯度
img_latitude_ref = image_map["GPS GPSLatitudeRef"].printable
img_latitude = image_map["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
img_latitude = float(img_latitude[0]) + float(img_latitude[1]) / 60 + float(img_latitude[2]) / float(img_latitude[3]) / 3600
if img_latitude_ref != "N":
      img_latitude = img_latitude * (-1)

3、獲取圖片的拍攝時(shí)間并關(guān)閉(如果你還想獲取其他信息庞萍,你可以在關(guān)閉前拧烦,自己獲取)

img_create_date = image_map["EXIF DateTimeOriginal"].printable

img_file.close()

4钝计、把獲取到的經(jīng)緯度信息恋博,通過(guò)GeoPy包輸出顯示

reverse_value = str(lat) + ', ' + str(lon)
geolocator = Nominatim()
location = geolocator.reverse(reverse_value)

print('照片的經(jīng)緯度信息:')
print((location.latitude, location.longitude))

print('照片的地址信息:')
print(location.address)

print('照片的全部信息:')
print(location.raw)

完整代碼如下

import exifread
import json
import urllib.request
import sys
from geopy.geocoders import Nominatim


# 獲取照片的詳細(xì)信息
def get_img_infor_tup(photo):
    img_file = open(photo, 'rb')
    image_map = exifread.process_file(img_file)

    try:
        # 圖片的經(jīng)度
        img_longitude_ref = image_map["GPS GPSLongitudeRef"].printable
        img_longitude = image_map["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
        img_longitude = float(img_longitude[0]) + float(img_longitude[1]) / 60 + float(img_longitude[2]) / float(img_longitude[3]) / 3600
        if img_longitude_ref != "E":
            img_longitude = img_longitude * (-1)

        # 圖片的緯度
        img_latitude_ref = image_map["GPS GPSLatitudeRef"].printable
        img_latitude = image_map["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
        img_latitude = float(img_latitude[0]) + float(img_latitude[1]) / 60 + float(img_latitude[2]) / float(img_latitude[3]) / 3600
        if img_latitude_ref != "N":
            img_latitude = img_latitude * (-1)

        # 照片拍攝時(shí)間
        img_create_date = image_map["EXIF DateTimeOriginal"].printable

        img_file.close()

        # 返回經(jīng)緯度元組
        return img_longitude, img_latitude, img_create_date

    except Exception as e:
        print('ERROR:圖片中不包含Gps信息')


# 根據(jù)經(jīng)緯度獲取詳細(xì)的信息
def get_detail_infor(lat, lon):
    reverse_value = str(lat) + ', ' + str(lon)
    geolocator = Nominatim()
    location = geolocator.reverse(reverse_value)

    print('照片的經(jīng)緯度信息:')
    print((location.latitude, location.longitude))

    print('照片的地址信息:')
    print(location.address)

    print('照片的全部信息:')
    print(location.raw)


if __name__ == '__main__':

    infor_tup = get_img_infor_tup("你要檢測(cè)的照片路徑")
    get_detail_infor(infor_tup[1], infor_tup[0])

好了以上就是如何通過(guò)圖片獲取位置的方法了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末私恬,一起剝皮案震驚了整個(gè)濱河市债沮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌本鸣,老刑警劉巖疫衩,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異荣德,居然都是意外死亡闷煤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)命爬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)曹傀,“玉大人辐脖,你說(shuō)我怎么就攤上這事饲宛。” “怎么了嗜价?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵艇抠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我久锥,道長(zhǎng)家淤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任瑟由,我火速辦了婚禮絮重,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己青伤,他們只是感情好督怜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著狠角,像睡著了一般号杠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丰歌,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天姨蟋,我揣著相機(jī)與錄音,去河邊找鬼立帖。 笑死眼溶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晓勇。 我是一名探鬼主播偷仿,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼宵蕉!你這毒婦竟也來(lái)了酝静?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤羡玛,失蹤者是張志新(化名)和其女友劉穎别智,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體稼稿,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄榛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了让歼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敞恋。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谋右,靈堂內(nèi)的尸體忽然破棺而出硬猫,到底是詐尸還是另有隱情,我是刑警寧澤改执,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布啸蜜,位于F島的核電站,受9級(jí)特大地震影響辈挂,放射性物質(zhì)發(fā)生泄漏衬横。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一终蒂、第九天 我趴在偏房一處隱蔽的房頂上張望蜂林。 院中可真熱鬧遥诉,春花似錦、人聲如沸噪叙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)构眯。三九已至愕难,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惫霸,已是汗流浹背猫缭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壹店,地道東北人猜丹。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像硅卢,于是被迫代替她去往敵國(guó)和親射窒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容