我想从图像中获取有关地理位置的信息 ,如下图所示
void cam_Completed(object sender, PhotoResult e) { if (e.TaskResult == TaskResult.OK) { Image cameraImage = new Image(); BitmapImage bImage = new BitmapImage(); bImage.SetSource(e.ChosenPhoto); cameraImage.Source = bImage; e.ChosenPhoto.Position = 0; ExifReader reader = new ExifReader(e.ChosenPhoto); double gpsLat, gpsLng; reader.GetTagValue(ExifTags.GPSLatitude, out gpsLat)) reader.GetTagValue (ExifTags.GPSLongitude, out gpsLng)) MessageBox.Show(gpsLat.ToString() + "" + gpsLng.ToString()); } }
这样我们就可以检测拍摄图像的位置.请帮助找到这些属性.
这些答案似乎都没有完全正常和正确.以下是我使用这个EXIF库的想法,它也可以作为NuGet包使用.
public static double[] GetLatLongFromImage(string imagePath) { ExifReader reader = new ExifReader(imagePath); // EXIF lat/long tags stored as [Degree, Minute, Second] double[] latitudeComponents; double[] longitudeComponents; string latitudeRef; // "N" or "S" ("S" will be negative latitude) string longitudeRef; // "E" or "W" ("W" will be a negative longitude) if (reader.GetTagValue(ExifTags.GPSLatitude, out latitudeComponents) && reader.GetTagValue(ExifTags.GPSLongitude, out longitudeComponents) && reader.GetTagValue(ExifTags.GPSLatitudeRef, out latitudeRef) && reader.GetTagValue(ExifTags.GPSLongitudeRef, out longitudeRef)) { var latitude = ConvertDegreeAngleToDouble(latitudeComponents[0], latitudeComponents[1], latitudeComponents[2], latitudeRef); var longitude = ConvertDegreeAngleToDouble(longitudeComponents[0], longitudeComponents[1], longitudeComponents[2], longitudeRef); return new[] { latitude, longitude }; } return null; }
助手:
public static double ConvertDegreeAngleToDouble(double degrees, double minutes, double seconds, string latLongRef) { double result = ConvertDegreeAngleToDouble(degrees, minutes, seconds); if (latLongRef == "S" || latLongRef == "W") { result *= -1; } return result; } public static double ConvertDegreeAngleToDouble(double degrees, double minutes, double seconds) { return degrees + (minutes / 60) + (seconds / 3600); }
感谢伊戈尔的回答为辅助方法和geedubb的主法.