<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Drone2Map: How to adjust image altitude in EXIF metadata from DJI Drones in ArcGIS Drone2Map Questions</title>
    <link>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272944#M417</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Late to the party, but i had a similar issue.&amp;nbsp; DJI drone had altitude reading offset by 50 meters.&amp;nbsp; I used this python script to adjust the exif tag instead of re-flying the mission.&amp;nbsp; Hope it can help other people.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Edit.&amp;nbsp; Provided additional script to adjust XMP header as well.&amp;nbsp; Turns out Drone2Map will read XMP data instead of EXIF when xmp is available.&amp;nbsp; However it should be run on Linux unless you want to compile exempi on windows.&amp;nbsp; I used a Vbox image for this.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;## piexif, python3.7&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; glob 
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; piexif
&lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; fractions &lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; Fraction

&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;to_deg&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; loc&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="string token"&gt;"""convert decimal coordinates into degrees, munutes and seconds tuple
    Keyword arguments: value is float gps-value, loc is direction list ["S", "N"] or ["W", "E"]
    return: tuple like (25, 13, 48.343 ,'N')
    """&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; value &lt;SPAN class="operator token"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        loc_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; loc&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;elif&lt;/SPAN&gt; value &lt;SPAN class="operator token"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        loc_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; loc&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        loc_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;""&lt;/SPAN&gt;
    abs_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; abs&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    deg &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;  int&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;abs_value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    t1 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;abs_value&lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;deg&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;60&lt;/SPAN&gt;
    min &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; int&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;t1&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    sec &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;t1 &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; min&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;60&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;5&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;deg&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; min&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; sec&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; loc_value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_to_rational&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;number&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="string token"&gt;"""convert a number to rantional
    Keyword arguments: number
    return: tuple like (1, 2), (numerator, denominator)
    """&lt;/SPAN&gt;
    f &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; Fraction&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;number&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;4&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;f&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;numerator&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; f&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;denominator&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	
&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_to_decimal&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;fraction&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
	&lt;SPAN class="string token"&gt;"""convert fraction tuple to decimal
	keyword arguments: fraction -- tuple like (numerator, denominator)
	return: float"""&lt;/SPAN&gt;
	&lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;fraction&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;/&lt;/SPAN&gt;fraction&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;set_gps_location&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; lat&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; lng&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="string token"&gt;"""Adds GPS position as EXIF metadata
    Keyword arguments:
    file_name -- image file
    lat -- latitude (as float)
    lng -- longitude (as float)
    altitude -- altitude (as float)
    """&lt;/SPAN&gt;
    lat_deg &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; to_deg&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"S"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"N"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    lng_deg &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; to_deg&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"W"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"E"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

    exiv_lat &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    exiv_lng &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

    gps_ifd &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSVersionID&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitudeRef&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitude&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLatitudeRef&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLatitude&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; exiv_lat&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLongitudeRef&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLongitude&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; exiv_lng&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

    exif_dict &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"GPS"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; gps_ifd&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    exif_bytes &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;dump&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_dict&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;insert&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_bytes&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_gps_altitude&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
	exif_dict &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;load&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	gps_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; exif_dict&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'GPS'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitude&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
	gps_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;change_to_decimal&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;gps_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	&lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"altitude: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;gps_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	exif_dict&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'GPS'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitude&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; gps_altitude
	exif_bytes &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;dump&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_dict&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;insert&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_bytes&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;##End Utility Functions &lt;/SPAN&gt;


delta_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;47.97&lt;/SPAN&gt;
path &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"C:\\Users\\tli\\Pictures\\Drone2Map_Pilot\\"&lt;/SPAN&gt;
file_list &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;f &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; f &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; glob&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;glob&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;path &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"**/*.JPG"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; recursive&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;True&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; file_name &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; file_list&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; 
	&lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Processing: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	change_gps_altitude&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;H1 class="" style="color: #586069; background-color: #fafbfc; font-size: 18px; padding-left: 18px;" id="toc-hId-1847627661"&gt;&lt;SPAN class=""&gt;&lt;/SPAN&gt;XMP adjust&lt;/H1&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;# This script needs to run on linux due to dependencies on exempi library&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# python-xmp-toolkit, python 3.6&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; libxmp &lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; XMPFiles&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; consts
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; glob


&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_xmp_altitude&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    xmpfile &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; XMPFiles&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_path&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; open_forupdate&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;True&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;get_xmp&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;# list the uri for prefix drone-dji&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;# xmp_sub = xmp.get_namespace_for_prefix("drone-dji")&lt;/SPAN&gt;
    dji_uri &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"http://www.dji.com/drone-dji/1.0/"&lt;/SPAN&gt;
    xmp_absalt &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; xmp&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;get_property&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;dji_uri&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"AbsoluteAltitude"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    str_translation &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; dict&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;fromkeys&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;map&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ord&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'+'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; None&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp_absalt &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; xmp_absalt&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;translate&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;str_translation&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp_absalt &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"+"&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;float&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp_absalt&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;set_property&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;dji_uri&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"AbsoluteAltitude"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; xmp_absalt&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;can_put_xmp&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;put_xmp&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
        xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;close_file&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp_absalt&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"New XMP Altitude Entered for: "&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


delta_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;47.97&lt;/SPAN&gt;
path &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"/home/tli/COG/Drone2MapTest"&lt;/SPAN&gt;
file_list &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;f &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; f &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; glob&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;glob&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;path &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"**/*.JPG"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; recursive&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;True&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; file_name &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; file_list&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Processing: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    change_xmp_altitude&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 13:20:03 GMT</pubDate>
    <dc:creator>City_ofGlendale__CA</dc:creator>
    <dc:date>2021-12-11T13:20:03Z</dc:date>
    <item>
      <title>Drone2Map: How to adjust image altitude in EXIF metadata from DJI Drones</title>
      <link>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272941#M414</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I just went through a workflow that I wanted to highlight here in case it helps anyone with post processing drone images in Drone2Map.&amp;nbsp; This is for those people using DJI drones.&amp;nbsp; Sorry if this has already been covered elsewhere.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When producing the EXIF metadata for each image, the image altitude is populated with the DJI aircrafts GPS altitude reading.&amp;nbsp; This can be several hundred feet off, which is obvious in Drone2Map when you view the images in 3D view.&amp;nbsp; For example, I was doing a 3D building survey and flew two loops at roughly 30 and 60 feet off the ground.&amp;nbsp; When I viewed the captured images in Drone2Map 3D view, they appeared more like 200-230 feet off of the ground and processing the images resulted in bizarre results even when running GCP's.&amp;nbsp; After browsing some DJI forums, I found the fix.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Sidenote: While collecting data, first calibrate the IMU through the DJI go app so that you can be sure your barometer readings are as accurate as possible given changes in weather and elevation between different work sites.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is another field in the EXIF metadata called RelativeAltitude which is given from the aircraft barometer.&amp;nbsp; This altitude is far more accurate, but you need to do some work to get Drone2Map to adjust image altitude to these readings.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Most flights with DJI and DroneDeploy will navigate to the flight altitude relative from takeoff, then stay there for the duration of the flight, not adjusting flight height relative to terrain.&amp;nbsp; &amp;nbsp;So, you want to adjust flight height based on the elevation of the takeoff point.&amp;nbsp;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;You can get the elevation of the take off point in several ways.&amp;nbsp;If you have elevations from GCP's use those.&amp;nbsp; If not, you can go to manage GCP, then add "from map".&amp;nbsp; Click where you took off and the GCP added will give you an elevation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;The Next step is to create a flat DEM with the takeoff elevation as the only elevation value across the whole raster.&amp;nbsp; I just created a polygon, added a field and put the takeoff elevation, then use the "Convert Raster to Polygon" tool to make it into a DEM.&amp;nbsp; Note that Drone2Map needs the DEM to be in .tif format.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So with that in place, I had two sets of images (Flown at different altitudes) I needed to adjust, and Drone2Map 1.3 added the necessary feature to do this.&amp;nbsp; First, I loaded one image into this tool&amp;nbsp;&lt;A class="link-titled" href="http://exif.regex.info/exif.cgi" title="http://exif.regex.info/exif.cgi"&gt;Jeffrey Friedl's Image Metadata Viewer&lt;/A&gt;&amp;nbsp; in order to see the RelativeAltitude reading.&amp;nbsp; Next, I select all images that were flown at the same height and select "adjust image altitude". Enter the value from the Relative Altitude for all images flown at one height. Then select your custom DEM and hit Ok.&amp;nbsp; All of the images altitudes will be adjusted to the takeoff elevation.&amp;nbsp; If you use the elevation service, it will not work correctly and adjust the image altitude based on underlying terrain.&amp;nbsp; Repeat this process for any images that are at different flight heights.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Not sure if this makes perfect sense or not but there ya go.&amp;nbsp; I found this process easier than using command line EXIF readers and cheaper than using MapsMadeEasy image altitude adjuster.&amp;nbsp; Hope this helps someone, it improved my results immensely even with GCP's.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 May 2018 14:13:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272941#M414</guid>
      <dc:creator>DavidSchwab1</dc:creator>
      <dc:date>2018-05-03T14:13:21Z</dc:date>
    </item>
    <item>
      <title>Re: Drone2Map: How to adjust image altitude in EXIF metadata from DJI Drones</title>
      <link>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272942#M415</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi David&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This was an incredibly useful post, thank you. I have a DJI drone and I have been struggling with creating a 3D products from Drone2Map that are vertically aligned with the surrounding landscape. I have tried adding GCP points but that usually results in a very skewed final product. This ultimately results in me not wanting to share my Drone2Map products with others until such time as I sort out the altitude problem. Your workflow has solved that.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To simplify your workflow, I have created a new idea for Drone2Map on the ArcGIS Ideas site. Do see&amp;nbsp;&lt;A href="https://community.esri.com/ideas/15040" target="_blank"&gt;https://community.esri.com/ideas/15040&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks so much.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Mervyn&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Jun 2021 08:27:23 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272942#M415</guid>
      <dc:creator>MervynLotter</dc:creator>
      <dc:date>2021-06-22T08:27:23Z</dc:date>
    </item>
    <item>
      <title>Re: Drone2Map: How to adjust image altitude in EXIF metadata from DJI Drones</title>
      <link>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272943#M416</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;also not being a command line king&amp;nbsp;&lt;IMG src="https://community.esri.com/legacyfs/online/emoticons/wink.png" /&gt; I found an easy tool to adjust EXIF data - the &lt;STRONG&gt;ExifToolGui&lt;/STRONG&gt;.&amp;nbsp;&lt;/P&gt;&lt;P&gt;With the following steps you can adjust eg. the wrong height and/or the shifted coordinates from the new DJI Mavic 2 Pro.&lt;/P&gt;&lt;DIV&gt;&lt;SPAN style="font-weight: bold; font-size: 18px;"&gt;EXIFTOOLGUI&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-size: 14px;"&gt;&lt;A href="https://www.heise.de/download/product/exiftoolgui-63032/download" shape="rect" style="font-size: 14px;"&gt;https://www.heise.de/download/product/exiftoolgui-63032/download&lt;/A&gt; &lt;/SPAN&gt;&lt;/DIV&gt;&lt;UL&gt;&lt;LI&gt;&lt;DIV&gt;Save&lt;SPAN style="font-weight: bold;"&gt; exiftools&lt;/SPAN&gt;&lt;SPAN&gt; in -&amp;gt;&amp;nbsp;&lt;STRONG&gt;C:\Windows&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;\&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;exiftool.exe&lt;/STRONG&gt; and &lt;STRONG&gt;ExifToolGui&lt;/STRONG&gt; in&amp;nbsp;a folder of your choice (-&amp;gt; readme.txt)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;LI&gt;&lt;DIV&gt;&lt;SPAN&gt;in &lt;STRONG&gt;ExiftoolGui&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;UL&gt;&lt;LI&gt;&lt;SPAN style="color: #000000;"&gt;Write the height of your starting position or any other height in the Exif file -&amp;gt; in the little central window (-&amp;gt; button Exiftool direct) with following commands&lt;/SPAN&gt;&lt;UL&gt;&lt;LI&gt;&lt;SPAN style="color: #ff6600;"&gt;&amp;nbsp;&lt;SPAN&gt;&lt;SPAN style="font-weight: bold;"&gt;exiftool -GPSAltitude=123 m DJI_123.jpg&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN style="color: #000000;"&gt;(Image path)&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #000000;"&gt;or for more images&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;P style="color: #880000; background-color: #ffffff; font-size: 14.4px;"&gt;&lt;SPAN style="color: #ff6600;"&gt;exiftool -GPSAltitude=123 m a.jpg b.jpg c.jpg&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #ff6600; text-decoration: underline;"&gt;&lt;STRONG&gt;exiftool -GPSAltitude=123 m&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #ff6600;"&gt;&lt;STRONG&gt; G:\...\...&lt;/STRONG&gt;&lt;SPAN style="color: #000000;"&gt;&lt;STRONG&gt; (&lt;/STRONG&gt;folder path -&amp;gt; for changing all images of a folder&lt;STRONG&gt;)&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="color: #000000;"&gt;&lt;STRONG&gt;&lt;A class="link-titled" href="https://owl.phy.queensu.ca/~phil/exiftool/examples.html" title="https://owl.phy.queensu.ca/~phil/exiftool/examples.html"&gt;ExifTool Command-Line Examples&lt;/A&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;UL&gt;&lt;LI&gt;&lt;DIV&gt;&lt;SPAN style="color: #000000;"&gt;Create a XMP_Sidecarfile -&amp;gt; Export/Import&amp;nbsp;-&amp;gt;&amp;nbsp;&lt;STRONG&gt;EXPORT Metadata into XMP&lt;/STRONG&gt; = Sidecar file (&lt;A class="link-titled" href="https://sno.phy.queensu.ca/~phil/exiftool/metafiles.html" title="https://sno.phy.queensu.ca/~phil/exiftool/metafiles.html"&gt;Metadata Sidecar Files&lt;/A&gt;&amp;nbsp;&lt;/SPAN&gt;)&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;OL&gt;&lt;UL&gt;&lt;LI&gt;&lt;DIV&gt;&lt;SPAN&gt;Finally again&amp;nbsp;&lt;SPAN style="font-weight: 400;"&gt;-&amp;gt; Export/Import -&amp;gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;Import GPS-Data from XMP&lt;/STRONG&gt;&amp;nbsp;-&amp;gt; the right coordinates are written from the XMP file to the Exif file&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/OL&gt;&lt;DIV style="padding-left: 30px;"&gt; &lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-weight: bold;"&gt;More exiftool commands&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;&lt;A href="https://owl.phy.queensu.ca/~phil/exiftool/examples.html" shape="rect"&gt;https://owl.phy.queensu.ca/~phil/exiftool/examples.html&lt;/A&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Best regards!&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Steffen&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 08 Dec 2018 19:32:07 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272943#M416</guid>
      <dc:creator>SteffenDoering</dc:creator>
      <dc:date>2018-12-08T19:32:07Z</dc:date>
    </item>
    <item>
      <title>Re: Drone2Map: How to adjust image altitude in EXIF metadata from DJI Drones</title>
      <link>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272944#M417</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Late to the party, but i had a similar issue.&amp;nbsp; DJI drone had altitude reading offset by 50 meters.&amp;nbsp; I used this python script to adjust the exif tag instead of re-flying the mission.&amp;nbsp; Hope it can help other people.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-Edit.&amp;nbsp; Provided additional script to adjust XMP header as well.&amp;nbsp; Turns out Drone2Map will read XMP data instead of EXIF when xmp is available.&amp;nbsp; However it should be run on Linux unless you want to compile exempi on windows.&amp;nbsp; I used a Vbox image for this.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;## piexif, python3.7&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; glob 
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; piexif
&lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; fractions &lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; Fraction

&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;to_deg&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; loc&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="string token"&gt;"""convert decimal coordinates into degrees, munutes and seconds tuple
    Keyword arguments: value is float gps-value, loc is direction list ["S", "N"] or ["W", "E"]
    return: tuple like (25, 13, 48.343 ,'N')
    """&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; value &lt;SPAN class="operator token"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        loc_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; loc&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;elif&lt;/SPAN&gt; value &lt;SPAN class="operator token"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        loc_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; loc&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;else&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        loc_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;""&lt;/SPAN&gt;
    abs_value &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; abs&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    deg &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;  int&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;abs_value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    t1 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;abs_value&lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;deg&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;60&lt;/SPAN&gt;
    min &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; int&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;t1&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    sec &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;t1 &lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt; min&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;60&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;5&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;deg&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; min&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; sec&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; loc_value&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_to_rational&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;number&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="string token"&gt;"""convert a number to rantional
    Keyword arguments: number
    return: tuple like (1, 2), (numerator, denominator)
    """&lt;/SPAN&gt;
    f &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; Fraction&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;number&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;4&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;f&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;numerator&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; f&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;denominator&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	
&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_to_decimal&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;fraction&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
	&lt;SPAN class="string token"&gt;"""convert fraction tuple to decimal
	keyword arguments: fraction -- tuple like (numerator, denominator)
	return: float"""&lt;/SPAN&gt;
	&lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;fraction&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;/&lt;/SPAN&gt;fraction&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;set_gps_location&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; lat&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; lng&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="string token"&gt;"""Adds GPS position as EXIF metadata
    Keyword arguments:
    file_name -- image file
    lat -- latitude (as float)
    lng -- longitude (as float)
    altitude -- altitude (as float)
    """&lt;/SPAN&gt;
    lat_deg &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; to_deg&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"S"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"N"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    lng_deg &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; to_deg&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"W"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"E"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

    exiv_lat &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    exiv_lng &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

    gps_ifd &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSVersionID&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitudeRef&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitude&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLatitudeRef&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; lat_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLatitude&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; exiv_lat&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLongitudeRef&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; lng_deg&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
        piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSLongitude&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; exiv_lng&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;
    &lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

    exif_dict &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"GPS"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; gps_ifd&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;
    exif_bytes &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;dump&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_dict&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;insert&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_bytes&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_gps_altitude&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
	exif_dict &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;load&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	gps_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; exif_dict&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'GPS'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitude&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
	gps_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; change_to_rational&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;change_to_decimal&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;gps_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt;delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	&lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"altitude: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;gps_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	exif_dict&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'GPS'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSIFD&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GPSAltitude&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; gps_altitude
	exif_bytes &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;dump&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_dict&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	piexif&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;insert&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;exif_bytes&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

&lt;SPAN class="comment token"&gt;##End Utility Functions &lt;/SPAN&gt;


delta_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;47.97&lt;/SPAN&gt;
path &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"C:\\Users\\tli\\Pictures\\Drone2Map_Pilot\\"&lt;/SPAN&gt;
file_list &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;f &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; f &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; glob&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;glob&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;path &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"**/*.JPG"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; recursive&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;True&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; file_name &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; file_list&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt; 
	&lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Processing: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
	change_gps_altitude&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;H1 class="" style="color: #586069; background-color: #fafbfc; font-size: 18px; padding-left: 18px;" id="toc-hId-1847627661"&gt;&lt;SPAN class=""&gt;&lt;/SPAN&gt;XMP adjust&lt;/H1&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="comment token"&gt;# This script needs to run on linux due to dependencies on exempi library&lt;/SPAN&gt;
&lt;SPAN class="comment token"&gt;# python-xmp-toolkit, python 3.6&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;from&lt;/SPAN&gt; libxmp &lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; XMPFiles&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; consts
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; glob


&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;change_xmp_altitude&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    xmpfile &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; XMPFiles&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_path&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; open_forupdate&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;True&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;get_xmp&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;# list the uri for prefix drone-dji&lt;/SPAN&gt;
    &lt;SPAN class="comment token"&gt;# xmp_sub = xmp.get_namespace_for_prefix("drone-dji")&lt;/SPAN&gt;
    dji_uri &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"http://www.dji.com/drone-dji/1.0/"&lt;/SPAN&gt;
    xmp_absalt &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; xmp&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;get_property&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;dji_uri&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"AbsoluteAltitude"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    str_translation &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; dict&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;fromkeys&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;map&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;ord&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'+'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; None&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp_absalt &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; xmp_absalt&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;translate&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;str_translation&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp_absalt &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"+"&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; str&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;round&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;float&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp_absalt&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    xmp&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;set_property&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;dji_uri&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"AbsoluteAltitude"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; xmp_absalt&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;can_put_xmp&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
        xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;put_xmp&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
        xmpfile&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;close_file&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
        &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;xmp_absalt&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"New XMP Altitude Entered for: "&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


delta_altitude &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;47.97&lt;/SPAN&gt;
path &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"/home/tli/COG/Drone2MapTest"&lt;/SPAN&gt;
file_list &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;f &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; f &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; glob&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;glob&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;path &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;"**/*.JPG"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; recursive&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token boolean"&gt;True&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
&lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; file_name &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; file_list&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
    &lt;SPAN class="keyword token"&gt;print&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Processing: "&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;+&lt;/SPAN&gt; file_name&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
    change_xmp_altitude&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;file_name&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; delta_altitude&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 13:20:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-drone2map-questions/drone2map-how-to-adjust-image-altitude-in-exif/m-p/272944#M417</guid>
      <dc:creator>City_ofGlendale__CA</dc:creator>
      <dc:date>2021-12-11T13:20:03Z</dc:date>
    </item>
  </channel>
</rss>

