草庐IT

ios - 从元数据字典访问 GPS 坐标

coder 2023-09-17 原文

我需要用相机拍照并获取其 GPS 坐标,但问题是元数据字典没有返回 {GPS} key ,我不知道为什么......我已经设置了位置权限。

这是输出:

{
DPIHeight = 72;
DPIWidth = 72;
Orientation = 6;
"{Exif}" =     {
    ApertureValue = "2.27500704749987";
    BrightnessValue = "2.351449770880873";
    ColorSpace = 1;
    DateTimeDigitized = "2016:02:17 16:00:38";
    DateTimeOriginal = "2016:02:17 16:00:38";
    ExposureBiasValue = "0.00390625";
    ExposureMode = 0;
    ExposureProgram = 2;
    ExposureTime = "0.06666666666666667";
    FNumber = "2.2";
    Flash = 24;
    FocalLenIn35mmFilm = 29;
    FocalLength = "4.15";
    ISOSpeedRatings =         (
        40
    );
    LensMake = Apple;
    LensModel = "iPhone 6 Plus back camera 4.15mm f/2.2";
    LensSpecification =         (
        "4.15",
        "4.15",
        "2.2",
        "2.2"
    );
    MeteringMode = 5;
    PixelXDimension = 3264;
    PixelYDimension = 2448;
    SceneType = 1;
    SensingMethod = 2;
    ShutterSpeedValue = "3.907056515078773";
    SubjectArea =         (
        1631,
        1223,
        1795,
        1077
    );
    SubsecTimeDigitized = 603;
    SubsecTimeOriginal = 603;
    WhiteBalance = 0;
};
"{MakerApple}" =     {
    1 = 2;
    12 =         (
        "0.453125",
        "0.234375"
    );
    13 = 7;
    14 = 0;
    15 = 2;
    16 = 1;
    2 = <15038e01 c6000802 47013f00 4c002600 3d002f00 1e002000 22003300 25005d00 d3004401 81002402 36013a00 30004f00 49002e00 2f002900 78004100 28005300 74000401 4c004f02 da005300 46002a00 29002600 45003700 8d003f00 27004c00 8100e400 29008902 b6003c00 3f002a00 50002800 1d002400 3c003600 3c004500 e6003601 2600d002 a6003100 3d004f00 20002d00 31002500 2a002d00 2d003d00 a800f300 26001003 63003b00 55002100 30003100 4d003400 40004500 30003700 9c00c400 3b004503 88002900 3f002b00 64002b00 1d002b00 3f003f00 32003100 a600b300 ae003603 54004b00 45002700 1f007400 2e002b00 3e003a00 36002c00 cd00e200 82011e03 6e002500 47003000 50003d00 2a003200 3f003800 3c002b00 0e01a901 0303db02 4d005300 4b003000 24002e00 22003300 41003600 40002a00 1701c602 9e03bc02 5d002600 37002f00 2e007d00 28003800 48003300 48002900 8d010e02 9c039a02 45007000 56006000 41001d00 2b003e00 4f003200 55002a00 75017201 52036002 3f004a00 35003100 29003500 2e004000 55003500 5f002b00 cb00d901 68023202 46005000 54007b00 3c007b00 31004500 5f003a00 64002b00 d0014a02 fc021e01 39005a00 2a003200 34002500 33004800 6a004000 65002c00 6201f301 b4029401 40005300 6b004c00 3c006f00 38004700 71004c00 64002e00>;
    3 =         {
        epoch = 0;
        flags = 1;
        timescale = 1000000000;
        value = 1612615985791;
    };
    4 = 1;
    5 = 128;
    6 = 114;
    7 = 1;
    8 =         (
        "-0.008151573",
        "-0.7535641",
        "-0.6700104"
    );
    9 = 531;
};
"{TIFF}" =     {
    DateTime = "2016:02:17 16:00:38";
    Make = Apple;
    Model = "iPhone 6 Plus";
    Software = "8.2";
    XResolution = 72;
    YResolution = 72;
};

这是我的代码:

// Función a la que se llama cuando el picker es devuelto con un elemento multimedia
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage{

        if let data = UIImagePNGRepresentation(image){               
            let metadata = info[UIImagePickerControllerMediaMetadata] as! NSDictionary

           debugPrint(metadata)

        }

我正在测试 iOS 9。希望你能帮助我。谢谢!

最佳答案

我命令图像具有位置,位置服务必须处于事件状态。然后使用以下代码,您可以在它们存在时获取它的坐标。

if picker.sourceType == UIImagePickerControllerSourceType.PhotoLibrary
{
    if let currentLat = pickedLat as CLLocationDegrees?
    {
        self.latitude = pickedLat!
        self.longitude = pickedLong!
    }
    else
    {
        var library = ALAssetsLibrary()
        library.enumerateGroupsWithTypes(ALAssetsGroupAll, usingBlock: { (group, stop) -> Void in
            if (group != nil) {

                println("Group is not nil")
                println(group.valueForProperty(ALAssetsGroupPropertyName))
                group.enumerateAssetsUsingBlock { (asset, index, stop) in
                    if asset != nil
                    {
                        if let location: CLLocation = asset.valueForProperty(ALAssetPropertyLocation) as CLLocation!
                        { let lat = location.coordinate.latitude
                            let long = location.coordinate.longitude

                            self.latitude = lat
                            self.longitude = lat

                            println(lat)
                            println(long)
                        }
                    }
                }
            } else
            {
                println("The group is empty!")
            }
        })
        { (error) -> Void in
            println("problem loading albums: \(error)")
        }
    }
}

希望对您有所帮助。

来自基督教 https://stackoverflow.com/a/26842206/2269679

关于ios - 从元数据字典访问 GPS 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35460319/

有关ios - 从元数据字典访问 GPS 坐标的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  5. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  6. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  7. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  8. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

随机推荐