.NET Framework (NuGET ExifLib)를 사용하여 사진 촬영 위치 (GPS 정보)를 얻습니다.

8346 단어 .NETFrameworkC#.NET

소개



.NET Framework의 NuGet 패키지에는 EXIF를 다루는 것이 몇 가지 있습니다만, 이 중 평판이 높을 것 같은(다운로드수가 많은) ExifLib를 사용해 사진(jpeg 파일)에 임베드된 지오태그(GPS 정보) 을 얻으십시오.
※System.Linq 를 사용하고 있습니다.

  • EXIF 태그 목록 - INAGAKI 님의 페이지

  • 샘플 코드



    NuGet 패키지 관리에서 프로젝트에 ExitLib을 가져옵니다.
    namespace SampleProject
    {
      public class Sample1
      {
        /// <summary>
        /// 指定されたファイルのジオタグを読み込み、GoogleMapでその位置を示します。
        /// </summary>
        /// <param name="jpegFilePath">写真ファイルのパス。</param>
        public void BrowseMap(string jpegFilePath)
        {
          var rd = new ExifLib.ExifReader(jpegFilePath);
          double[] lat, lng;
          string rLat, rLng;
          rd.GetTagValue<double[]>(ExifLib.ExifTags.GPSLatitude, out lat);
          rd.GetTagValue<double[]>(ExifLib.ExifTags.GPSLongitude, out lng);
          rd.GetTagValue<string>(ExifLib.ExifTags.GPSLatitudeRef, out rLat);
          rd.GetTagValue<string>(ExifLib.ExifTags.GPSLongitudeRef, out rLng);
          if((lat != null) && (lng != null))
          {
            var latitude = lat.Reverse().Aggregate<double>((s, v) => { return s / 60 + v; }) * (rLat.Equals("S") ? -1 : 1);
            //var latitude = (lat[0] + lat[1] / 60 + lat[2] / 3600) * (rLat.Equals("S") ? -1 : 1); でもよいでしょう。
            var longitude = lng.Reverse().Aggregate<double>((s, v) => { return s / 60 + v; }) * (rLng.Equals("W") ? -1 : 1);
            var url = "https://www.google.com/maps/?q=" + latitude.ToString() + "," + longitude.ToString();
            System.Diagnostics.Process.Start(url);
        }
      }
    }
    

    GPSLatitude 와 GPSLongitude 의 값은 double[] 형으로 취득할 수 있고, 도, 분, 초의 순서에 들어가 있습니다. 또, GPSLatitudeRef에는 캐릭터 라인(string형)으로 북위:N이나 남위:S인가, GPSLongitudeRef에는 동경:E나 서경:W가 들어가 있습니다.
    (예)


    이 「도, 분, 초」의 위도・경도의 값을 10진수의 값으로 변환해, 한층 더 남위나 서경의 경우는 부호를 반전시켜, GoogleMap 서버에 건네주는 URL에 임베드하고 있습니다.
    대부분이 세계 측지계에서 기록되고 있는 것 같기 때문에, 측지계의 변환을 하지 않고도 GoogleMap에서 그대로 표시할 수 있습니다.

    비고



    photo.exif 패키지도 사용해 보았습니다. 이곳은 다음과 같은 코드로 EXIF ​​정보를 통째로 얻을 수 있는 것이 이점입니다.
    다만 다른 정보는 잘 취할 수 있는 것 같습니다만, 지오태그(GPS 정보)는 정수 부분만 밖에 취득할 수 없었습니다.
    var exifInfo = (new photo.exif.Parser()).Parse(jpegFilePath).ToArray();
    

    좋은 웹페이지 즐겨찾기