php如何读取图片exif中的gps定位信息_php解析经纬度并转换为地址方法

蓮花仙者
发布: 2025-11-26 17:52:02
原创
163人浏览过
首先使用PHP的exif_read_data()函数读取图片EXIF中的GPS经纬度数据,再通过dmsToDecimal函数将度分秒格式转换为十进制坐标,最后调用腾讯地图等逆地理编码接口将经纬度解析为具体地址。1. 读取EXIF中GPSLatitude和GPSLongitude数组;2. 根据GPSLatitudeRef和GPSLongitudeRef判断方向并转换为带符号的十进制度数;3. 使用转换后的经纬度请求地图API获取formatted_addresses.recommend推荐地址。需确保php_exif扩展启用、图片保留原始EXIF数据,并申请合法地图Key进行反向解析。整个流程实现从照片元数据到人类可读地址的精准定位还原。

php如何读取图片exif中的gps定位信息_php解析经纬度并转换为地址方法

PHP读取图片EXIF中的GPS定位信息,并将经纬度转换为具体地址,主要分为两个步骤:一是使用PHP的exif_read_data()函数提取图像中嵌入的GPS数据;二是将解析出的经纬度坐标通过地理编码接口(如高德、百度腾讯地图)反向解析为人类可读的地址。

1. 读取图片EXIF中的GPS信息

大多数数码相机和智能手机拍摄的照片会自动在EXIF中记录GPS位置数据(前提是开启了定位权限)。PHP内置了对EXIF的支持,只需开启php_exif扩展(Windows下通常在php.ini中启用)。

示例代码:

从图片中读取GPS原始数据:

<?php
$filename = 'photo.jpg'; // 图片路径
$exif = exif_read_data($filename, 'GPS');

if ($exif === false) {
    echo "无法读取EXIF信息";
} else {
    print_r($exif['GPSLatitude']);   // 纬度(数组格式)
    print_r($exif['GPSLongitude']);  // 经度(数组格式)
}
?>
登录后复制

注意:EXIF中的经纬度是以度分秒(DMS)格式存储的,例如:
[32, 45, 12.3] 表示 32度45分12.3秒。需要将其转换为十进制度数(Decimal Degrees)才能用于地图服务。

豆包AI编程
豆包AI编程

豆包推出的AI编程助手

豆包AI编程 1697
查看详情 豆包AI编程

2. 将DMS格式转换为十进制经纬度

编写一个辅助函数,将度分秒数组转换为浮点数:

立即学习PHP免费学习笔记(深入)”;

<?php
function dmsToDecimal($dms, $ref) {
    $degrees = $dms[0];
    $minutes = $dms[1];
    $seconds = $dms[2];

    $decimal = $degrees + ($minutes / 60) + ($seconds / 3600);

    // 根据方向(S/W为负)调整符号
    if ($ref == 'S' || $ref == 'W') {
        $decimal = -$decimal;
    }

    return round($decimal, 6);
}

// 使用示例
$lat = dmsToDecimal($exif['GPSLatitude'], $exif['GPSLatitudeRef']);
$lng = dmsToDecimal($exif['GPSLongitude'], $exif['GPSLongitudeRef']);

echo "纬度: $lat, 经度: $lng"; // 如:纬度: 39.9087, 经度: 116.3975
?>
登录后复制

3. 将经纬度转换为地址(逆地理编码)

获取到十进制坐标后,可通过地图API进行反向解析。以腾讯地图逆地址解析接口为例:

<?php
function getAddrFromCoords($lat, $lng) {
    $key = '你的腾讯地图KEY'; // 申请地址:https://lbs.qq.com/
    $url = "https://apis.map.qq.com/ws/geocoder/v1/?location={$lat},{$lng}&key={$key}";

    $response = file_get_contents($url);
    $data = json_decode($response, true);

    if ($data['status'] == 0) {
        return $data['result']['formatted_addresses']['recommend'];
    } else {
        return '地址解析失败';
    }
}

// 调用
$address = getAddrFromCoords($lat, $lng);
echo "拍摄地点:", $address;
?>
登录后复制
注意:
  • 确保图片包含GPS信息(部分社交平台上传会自动剥离EXIF)
  • 使用地图API需注册开发者账号并获取密钥(Key)
  • 遵守各平台调用频率限制,避免频繁请求
基本上就这些。整个过程不复杂但容易忽略细节,比如DMS转换符号处理、EXIF是否被清除等。只要照片保留原始元数据,PHP完全可以实现“从图片到地址”的完整链路。

以上就是php如何读取图片exif中的gps定位信息_php解析经纬度并转换为地址方法的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号