macOS Sierra, visualiser la direction d'une photo sur une carte ?
54 réponses
Une Bévue
avec l'iPhone 6, les données GPS incluent la direction de prise de vue
(compas), existe t'il un logiciel permettant de montrer cette direction
(et donc pas seulement le point d'où a été prsie la photo) ?
exemple :
$ exiftool '/Users/yt/Downloads/IMG_3130.JPG'
ExifTool Version Number : 10.20
[...]
Make : Apple
Camera Model Name : iPhone 6
[...]
GPS Latitude Ref : North
GPS Longitude Ref : West
GPS Altitude Ref : Above Sea Level
GPS Time Stamp : 07:11:21
GPS Speed Ref : km/h
GPS Speed : 0
GPS Img Direction Ref : True North
GPS Img Direction : 312.9102564
GPS Dest Bearing Ref : True North
GPS Dest Bearing : 312.9102564
GPS Date Stamp : 2016:12:06
GPS Horizontal Positioning Error: 65 m
[...]
GPS Altitude : 26.6 m Above Sea Level
GPS Date/Time : 2016:12:06 07:11:21Z
GPS Latitude : 55 deg 55' 15.39" N
GPS Longitude : 4 deg 28' 44.01" W
GPS Position : 55 deg 55' 15.39" N, 4 deg 28' 44.01" W
La confusion provient peut être du fait que dans le menu Géolocalisation (l'épingle) il y a le choix entre Apple, Google et OpenStreetMap
AH, je n'avais pas remarqué ça. je regarderai aussi côté OpenStreetMap, que je n'ai pas encore utilisé.
lists
Une Bévue wrote:
avec l'iPhone 6, les données GPS incluent la direction de prise de vue (compas), existe t'il un logiciel permettant de montrer cette direction (et donc pas seulement le point d'où a été prsie la photo) ?
Une solution en Python avec cartopy. Avec macports, il faut installer py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy. ---8<------8<------8<------8<------8<------8<------8<------8<------8<--- #! /usr/bin/env python2.7 # -*- coding: utf-8 -*- """ Ce programme affiche la direction d'une photo sur une carte. """ from __future__ import unicode_literals, print_function, division import sys import EXIF import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER import cartopy.io.img_tiles as cimgt defaultfile = "/Users/jsalort/Pictures/Bibliothèque perso.photoslibrary/Masters/2016/12/05/20161205-171149/IMG_3243.JPG" def make_map(projectionÌrs.PlateCarree()): fig, ax = plt.subplots(figsize=(9, 8), subplot_kw=dict(projection=projection)) gl = ax.gridlines(draw_labels=True) gl.xlabels_top = gl.ylabels_right = False gl.xformatter = LONGITUDE_FORMATTER gl.yformatter = LATITUDE_FORMATTER return fig, ax def draw_map(fich): # Lecture des tags EXIF print('Opening file', fich) with open(fich, 'rb') as f: tags = EXIF.process_file(f) for key, val in tags.iteritems(): if 'GPS' in key: print(key, ':', val) # Latitude et longitude lon = eval(str(tags['GPS GPSLongitude'])) lat = eval(str(tags['GPS GPSLatitude'])) latref = str(tags['GPS GPSLatitudeRef']) lonref = str(tags['GPS GPSLongitudeRef']) longitude = lon[0]+lon[1]/60.+lon[2]/3600. if lonref == 'W': longitude = -longitude latitude = lat[0]+lat[1]/60.+lat[2]/3600. if latref == 'S': latitude = -latitude # Direction dirref = str(tags['GPS GPSImgDirectionRef']) direction = eval(str(tags['GPS GPSImgDirection'])) u = np.sin(direction*np.pi/180.) v = np.cos(direction*np.pi/180.) # Affichage de la carte extent = [longitude-0.025, longitude+0.025, latitude-0.0125, latitude+0.0125] print('extent =', extent) #request = cimgt.GoogleTiles() # Google Maps request = cimgt.OSM() # OpenStreet Maps fig, ax = make_map(projection=request.crs) ax.set_extent(extent) ax.add_image(request, 14) # Apparemment il faut au moins deux points pour quiver ax.quiver(np.array([longitude, longitude]), np.array([latitude, latitude]), np.array([u, u]), np.array([v, v]), transformÌrs.PlateCarree(),color='red') def main(): if len(sys.argv) > 1: fichier = sys.argv[1] else: fichier = defaultfile draw_map(fichier) plt.show() if __name__ == '__main__': main() ---8<------8<------8<------8<------8<------8<------8<------8<------8<--- -- Julien Salort Entia non sunt multiplicanda praeter necessitatem http://www.juliensalort.org
Une Bévue <unbewusst.sein@fai.invalid> wrote:
avec l'iPhone 6, les données GPS incluent la direction de prise de vue
(compas), existe t'il un logiciel permettant de montrer cette direction
(et donc pas seulement le point d'où a été prsie la photo) ?
Une solution en Python avec cartopy. Avec macports, il faut installer
py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy.
def draw_map(fich):
# Lecture des tags EXIF
print('Opening file', fich)
with open(fich, 'rb') as f:
tags = EXIF.process_file(f)
for key, val in tags.iteritems():
if 'GPS' in key:
print(key, ':', val)
# Latitude et longitude
lon = eval(str(tags['GPS GPSLongitude']))
lat = eval(str(tags['GPS GPSLatitude']))
latref = str(tags['GPS GPSLatitudeRef'])
lonref = str(tags['GPS GPSLongitudeRef'])
longitude = lon[0]+lon[1]/60.+lon[2]/3600.
if lonref == 'W':
longitude = -longitude
latitude = lat[0]+lat[1]/60.+lat[2]/3600.
if latref == 'S':
latitude = -latitude
# Direction
dirref = str(tags['GPS GPSImgDirectionRef'])
direction = eval(str(tags['GPS GPSImgDirection']))
u = np.sin(direction*np.pi/180.)
v = np.cos(direction*np.pi/180.)
# Affichage de la carte
extent = [longitude-0.025, longitude+0.025, latitude-0.0125,
latitude+0.0125]
print('extent =', extent)
#request = cimgt.GoogleTiles() # Google Maps
request = cimgt.OSM() # OpenStreet Maps
fig, ax = make_map(projection=request.crs)
ax.set_extent(extent)
ax.add_image(request, 14)
# Apparemment il faut au moins deux points pour quiver
ax.quiver(np.array([longitude, longitude]), np.array([latitude,
latitude]), np.array([u, u]), np.array([v, v]),
transformÌrs.PlateCarree(),color='red')
avec l'iPhone 6, les données GPS incluent la direction de prise de vue (compas), existe t'il un logiciel permettant de montrer cette direction (et donc pas seulement le point d'où a été prsie la photo) ?
Une solution en Python avec cartopy. Avec macports, il faut installer py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy. ---8<------8<------8<------8<------8<------8<------8<------8<------8<--- #! /usr/bin/env python2.7 # -*- coding: utf-8 -*- """ Ce programme affiche la direction d'une photo sur une carte. """ from __future__ import unicode_literals, print_function, division import sys import EXIF import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER import cartopy.io.img_tiles as cimgt defaultfile = "/Users/jsalort/Pictures/Bibliothèque perso.photoslibrary/Masters/2016/12/05/20161205-171149/IMG_3243.JPG" def make_map(projectionÌrs.PlateCarree()): fig, ax = plt.subplots(figsize=(9, 8), subplot_kw=dict(projection=projection)) gl = ax.gridlines(draw_labels=True) gl.xlabels_top = gl.ylabels_right = False gl.xformatter = LONGITUDE_FORMATTER gl.yformatter = LATITUDE_FORMATTER return fig, ax def draw_map(fich): # Lecture des tags EXIF print('Opening file', fich) with open(fich, 'rb') as f: tags = EXIF.process_file(f) for key, val in tags.iteritems(): if 'GPS' in key: print(key, ':', val) # Latitude et longitude lon = eval(str(tags['GPS GPSLongitude'])) lat = eval(str(tags['GPS GPSLatitude'])) latref = str(tags['GPS GPSLatitudeRef']) lonref = str(tags['GPS GPSLongitudeRef']) longitude = lon[0]+lon[1]/60.+lon[2]/3600. if lonref == 'W': longitude = -longitude latitude = lat[0]+lat[1]/60.+lat[2]/3600. if latref == 'S': latitude = -latitude # Direction dirref = str(tags['GPS GPSImgDirectionRef']) direction = eval(str(tags['GPS GPSImgDirection'])) u = np.sin(direction*np.pi/180.) v = np.cos(direction*np.pi/180.) # Affichage de la carte extent = [longitude-0.025, longitude+0.025, latitude-0.0125, latitude+0.0125] print('extent =', extent) #request = cimgt.GoogleTiles() # Google Maps request = cimgt.OSM() # OpenStreet Maps fig, ax = make_map(projection=request.crs) ax.set_extent(extent) ax.add_image(request, 14) # Apparemment il faut au moins deux points pour quiver ax.quiver(np.array([longitude, longitude]), np.array([latitude, latitude]), np.array([u, u]), np.array([v, v]), transformÌrs.PlateCarree(),color='red') def main(): if len(sys.argv) > 1: fichier = sys.argv[1] else: fichier = defaultfile draw_map(fichier) plt.show() if __name__ == '__main__': main() ---8<------8<------8<------8<------8<------8<------8<------8<------8<--- -- Julien Salort Entia non sunt multiplicanda praeter necessitatem http://www.juliensalort.org
Une solution en Python avec cartopy. Avec macports, il faut installer py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy.
super, merci beaucoup. j'essaie ça dès que j'ai un peu de temps càd après les fêtes ;-) j'ai regardé Google MAPS, on ne peut pas orienter un marker car celui-ci (d'après mon reverse engeneering) est dessiné dans un canvas.
Le 31/12/2016 à 15:43, Julien Salort a écrit :
Une solution en Python avec cartopy. Avec macports, il faut installer
py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy.
super, merci beaucoup.
j'essaie ça dès que j'ai un peu de temps càd après les fêtes ;-)
j'ai regardé Google MAPS, on ne peut pas orienter un marker car celui-ci
(d'après mon reverse engeneering) est dessiné dans un canvas.
Une solution en Python avec cartopy. Avec macports, il faut installer py27-exif et py27-cartopy, en plus de py27-matplotlib et py27-numpy.
super, merci beaucoup. j'essaie ça dès que j'ai un peu de temps càd après les fêtes ;-) j'ai regardé Google MAPS, on ne peut pas orienter un marker car celui-ci (d'après mon reverse engeneering) est dessiné dans un canvas.
tiens, en JavaScript j'ai aussi été obligé de faire ça. pourtant il me semble que certains APN donnent le bon signe, tout en sortant quand même le "lonref"... bizarre.
Le 31/12/2016 à 15:43, Julien Salort a écrit :
if lonref == 'W':
longitude = -longitude
tiens, en JavaScript j'ai aussi été obligé de faire ça.
pourtant il me semble que certains APN donnent le bon signe, tout en
sortant quand même le "lonref"...
tiens, en JavaScript j'ai aussi été obligé de faire ça. pourtant il me semble que certains APN donnent le bon signe, tout en sortant quand même le "lonref"... bizarre.
tiens, en JavaScript j'ai aussi été obligé de faire ça. pourtant il me semble que certains APN donnent le bon signe, tout en sortant quand même le "lonref"...
du coup j'ai fait (en JS) : center.location.lng = parseFloat(exif.output.GPSLongitude.replace(/^"(.*)"$/, '$1')); if (exif.output.GPSLongitudeRef === 'West' && center.location.lng > 0) { center.location.lng = -center.location.lng; } la regex, c'est parce que certains APN sortent "1.234" au lieu de 1.234. donc je négative si west et si positif.
Le 31/12/2016 à 18:16, Une Bévue a écrit :
tiens, en JavaScript j'ai aussi été obligé de faire ça.
pourtant il me semble que certains APN donnent le bon signe, tout en
sortant quand même le "lonref"...
du coup j'ai fait (en JS) :
center.location.lng =
parseFloat(exif.output.GPSLongitude.replace(/^"(.*)"$/, '$1'));
if (exif.output.GPSLongitudeRef === 'West' &&
center.location.lng > 0) {
center.location.lng = -center.location.lng;
}
la regex, c'est parce que certains APN sortent "1.234" au lieu de 1.234.
donc je négative si west et si positif.
tiens, en JavaScript j'ai aussi été obligé de faire ça. pourtant il me semble que certains APN donnent le bon signe, tout en sortant quand même le "lonref"...
du coup j'ai fait (en JS) : center.location.lng = parseFloat(exif.output.GPSLongitude.replace(/^"(.*)"$/, '$1')); if (exif.output.GPSLongitudeRef === 'West' && center.location.lng > 0) { center.location.lng = -center.location.lng; } la regex, c'est parce que certains APN sortent "1.234" au lieu de 1.234. donc je négative si west et si positif.