2012-11-02 68 views
1

我在JPG的EXIF標題內添加了GPS座標,並將它們保存到相機膠捲中。出於某種奇怪的原因,當我以後使用第三方應用程序查看JPG EXIF信息時,十進制緯度/經度座標已被截斷,我失去了定位精度。爲什麼EXIF GPS座標在iOS上被截斷?

例如:在

[GPSDictionary setObject:[NSNumber numberWithDouble:12.34567890] 
         forKey:(NSString*)kCGImagePropertyGPSLatitude]; 

結果:

"{GPS}" = { 
    Latitude = "12.3456789"; 
}; 

但這是EXIF首 JPG文件內實際上結束了:

Latitude = "12.34566667"; 

其他時候它是惡魔即

iPhone GPS: Longitude = 79.78598345 
EXIF GPS: Longitude = 79.786 

如何防止iOS修改我的座標位?

因爲這會影響以後計算的準確性。

+0

小數點後8位的經緯度指定一個位置在1毫米以內(或約1/16英寸)。你真的需要這種精確度(我不相信你的輸入數據是準確的)。此外,這看起來像浮點十進制數不能完全由浮點二進制表示的問題。在這個問題上還有其他的帖子。請參閱:http:// stackoverflow。com/q/1089018/558933 –

+0

我縮短了其中一個緯度值,以便在NSLog期間打印的內容更加準確。我期望完全相同的值字符串保存在EXIF標題中。正如我將採取每一點精度,我可以得到。 –

回答

0

最有可能的解釋是,罪魁禍首是您用來對寫入 Exif信息的應用程序,而不是您以後用來讀取Exif信息的應用程序。

Exif v2.3標準(http://www.cipa.jp/std/documents/e/DC-008-2012_E.pdf)表示GPS緯度和經度被存儲爲RATIONAL類型的3個值,一個用於度數,一個用於分鐘,一個用於秒。 RATIONAL類型的值表示兩個無符號的32位整數的比率。因此,必須將十進制經度或緯度轉換爲度,分和秒,並且每一個都必須表示爲一個比率,這意味着必須爲它們選擇一個特定的分母。最小使用單位的分母決定分辨率,並由編寫Exif頭的應用程序的設計者選擇。

你提到的經度和緯度截短是在1/100的弧分的單位表示座標的選擇是一致的。您的12.3456789度的緯度對應於12度和20.740734弧分,其分別爲12度和2074/100弧分,這相當於您得到的12.3456666度。你的經度爲79.78598345度,對應於79度和47.159007弧分,分別爲79度和4716/100弧分,相當於你得到的79.786度。

如果您需要更高的分辨率,那麼您應該看看您用來編寫Exif標頭的應用程序是否可以配置爲使用更高分辨率,或者使用不同的應用程序編寫使用更大分辨率的Exif信息解析度。例如,如果我用exiftool(http://owl.phy.queensu.ca/~phil/exiftool/)到原來的GPS經度和緯度寫入圖像的Exif頭信息,然後用exiftool再次提取和打印的座標,然後我得到12.3456789000111和79.7859834499989度,分別爲,其中相對於原始座標的差異意味着分辨率比您使用的應用程序提供的要好上百萬倍。