如何在Windows Phone 8中获取捕获的图像或存储的图像的地理标记详细信息

 哈喽随风amy 发布于 2023-02-07 19:57

我想从图像中获取有关地理位置的信息 ,如下图所示

在此输入图像描述

 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());   

            }
        }

这样我们就可以检测拍摄图像的位置.请帮助找到这些属性.

1 个回答
  • 这些答案似乎都没有完全正常和正确.以下是我使用这个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的主法.

    2023-02-07 19:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有