PHP extract GPS EXIF data

前端 未结 13 1441
执笔经年
执笔经年 2020-11-29 16:26

I would like to extract the GPS EXIF tag from pictures using php. I\'m using the exif_read_data() that returns a array of all tags + data :

GPS.         


        
13条回答
  •  无人及你
    2020-11-29 16:53

    According to http://en.wikipedia.org/wiki/Geotagging, ( [0] => 46/1 [1] => 5403/100 [2] => 0/1 ) should mean 46/1 degrees, 5403/100 minutes, 0/1 seconds, i.e. 46°54.03′0″N. Normalizing the seconds gives 46°54′1.8″N.

    This code below should work, as long as you don't get negative coordinates (given that you get N/S and E/W as a separate coordinate, you shouldn't ever have negative coordinates). Let me know if there is a bug (I don't have a PHP environment handy at the moment).

    //Pass in GPS.GPSLatitude or GPS.GPSLongitude or something in that format
    function getGps($exifCoord)
    {
      $degrees = count($exifCoord) > 0 ? gps2Num($exifCoord[0]) : 0;
      $minutes = count($exifCoord) > 1 ? gps2Num($exifCoord[1]) : 0;
      $seconds = count($exifCoord) > 2 ? gps2Num($exifCoord[2]) : 0;
    
      //normalize
      $minutes += 60 * ($degrees - floor($degrees));
      $degrees = floor($degrees);
    
      $seconds += 60 * ($minutes - floor($minutes));
      $minutes = floor($minutes);
    
      //extra normalization, probably not necessary unless you get weird data
      if($seconds >= 60)
      {
        $minutes += floor($seconds/60.0);
        $seconds -= 60*floor($seconds/60.0);
      }
    
      if($minutes >= 60)
      {
        $degrees += floor($minutes/60.0);
        $minutes -= 60*floor($minutes/60.0);
      }
    
      return array('degrees' => $degrees, 'minutes' => $minutes, 'seconds' => $seconds);
    }
    
    function gps2Num($coordPart)
    {
      $parts = explode('/', $coordPart);
    
      if(count($parts) <= 0)// jic
        return 0;
      if(count($parts) == 1)
        return $parts[0];
    
      return floatval($parts[0]) / floatval($parts[1]);
    }
    

提交回复
热议问题