.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();
Reference
이 문제에 관하여(.NET Framework (NuGET ExifLib)를 사용하여 사진 촬영 위치 (GPS 정보)를 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/otagaisama-1/items/f0086e536eccfdfc1594
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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);
}
}
}
photo.exif 패키지도 사용해 보았습니다. 이곳은 다음과 같은 코드로 EXIF 정보를 통째로 얻을 수 있는 것이 이점입니다.
다만 다른 정보는 잘 취할 수 있는 것 같습니다만, 지오태그(GPS 정보)는 정수 부분만 밖에 취득할 수 없었습니다.
var exifInfo = (new photo.exif.Parser()).Parse(jpegFilePath).ToArray();
Reference
이 문제에 관하여(.NET Framework (NuGET ExifLib)를 사용하여 사진 촬영 위치 (GPS 정보)를 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/otagaisama-1/items/f0086e536eccfdfc1594텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)