PS_ImagesExifView 플러그인에 GPS정보 추가 + 맵 링크

Posted at 2008/09/22 14:30 // in Knowledge/기타 // by Hy054nz
CuuB GPS로거를 사용하면서 사진에 GPS정보를 담을 수 있게 되었고....
주로 쓰는 Picasa + photoWorks 에서 Exif정보를 보존하기 때문에
업로드 한 사진파일에도 그대로 정보가 살아있는데도,

GPS정보는 볼 수 없음에... 현재 사용중인 PS_ImagesExifView플러그인에 GPS정보 출력 추가를 해봤다.


먼저, 플러그인의 설정파일인 index.xml 파일의 27라인부터 있는 관리자화면의 옵션선택에서 출력 선택 박스 추가..
index.xml (Language : javascript)
  1. <field title=" " name="exifSelect" type="checkbox" titledirection="bk" >
  2.     <op name="ex1"  value="1" checked="checked">제조사</op>
  3. [.........]
  4.     <op name="ex14" value="1" checked="checked">촬영시각</op>
  5.     <op name="ex15" value="1" checked="checked">GPS</op>
  6.     <op name="ex16" value="1" checked="checked">네이버 맵</op>
  7.     <op name="ex17" value="1" checked="checked">Google Maps</op>
  8.  
  9. [.........]
  10. </field>
  11.  



그리고 exif정보를 처리해주는 부분 index.php의 getExifImage()함수에 GPS출력을 추가.

index.php (getExifImage함수) (Language : html4strict)
  1.  
  2. //GPS exif 데이터 수집 by Hy054nz(http://hyosang.pe.kr September 21, 2008
  3. $gps = "";
  4. if($data['ex15']) {
  5.     if($exif_info['Latitude']) {
  6.         $tmp1 = split('[^0-9]',$exif_info['Latitude']);
  7.         $latiR = substr($exif_info['LatitudeReference'], 0, 1);
  8.         $lati = $latiR.$tmp1[0]."˚".$tmp1[1]."´".$tmp1[2].".".$tmp1[3]."˝";
  9.         $gps .= "Latitude : ";
  10.         $gps .= $lati;
  11.         $gps .= " | ";
  12.  
  13.         $tmp2 = split('[^0-9]',$exif_info['Longitude']);
  14.         $longiR = substr($exif_info['LongitudeReference'], 0, 1);
  15.         $longi = $longiR.$tmp2[0]."˚".$tmp2[1]."´".$tmp2[2].".".$tmp2[3]."˝";
  16.         $gps .= "Longitude : ";
  17.         $gps .= $longi;
  18.         $gps .= " | ";
  19.  
  20.         $gps .= "Altitude : ";
  21.         $gps .= $exif_info['Altitude']."m";
  22.  
  23.         if($data['ex16']) {  //네이버 맵 링크 enable.
  24.             $gps .= " | <a href=\"javascript:openMap('naver', '".implode($tmp1, ";")."', '".implode($tmp2, ";")."');\">Naver Map</a>";
  25.         }
  26.  
  27.         if($data['ex17']) {  //구글 맵 링크 enable.
  28.             $gps .= " | <a href=\"javascript:openMap('google', '".implode($tmp1, ";")."', '".implode($tmp2, ";")."');\">Google Map</a>";
  29.         }
  30.     }
  31. }
  32.  
  33. $exifData = ($exifValue)?"  <span>" . implode("</span>{$spacer}<span>", $exifValue) . "</span>":NULL;
  34.  
  35. if($exifData != NULL && $gps != "") {
  36.     $exifData .= "<br />".$gps;
  37.  
  38. }
  39.  
  40. return $exifData;
  41.  


맵 오픈을 해줄 스크립트 추가...

index.php (style부분 다음) (Language : javascript)
  1. <script>
  2. function openMap(site, lati, longi) {
  3.     var la, lo;
  4.     var url = "";
  5.  
  6.     if(site == "naver") {
  7.         la = transPosition(lati);
  8.         lo = transPosition(longi);
  9.         url = "http://map.naver.com/?x="+lo+"&y="+la+"&level=0";
  10.     } else if(site == "google") {
  11.         la = lati.split(";");
  12.         lo = longi.split(";");
  13.  
  14.         la = la[0]+" "+la[1]+" "+la[2]+"."+la[3];
  15.         lo = lo[0]+" "+lo[1]+" "+lo[2]+"."+lo[3];
  16.         url = "http://maps.google.com/maps?q="+la+","+lo+"&z=16";
  17.     }
  18.  
  19.     window.open(url, site+"map", "width=1000, height=800, top=0, left=0");
  20. }
  21.  
  22. function transPosition(str) {
  23.     //도,분,초로 ; 구분된 각도를 10진 소수점 형태로 변환. by Hy054nz
  24.     str = new String(str);
  25.     var arr = str.split(";");
  26.     var rtn = 0;
  27.  
  28.     rtn += parseInt(arr[0], 10);
  29.     rtn += parseFloat(1/60 * parseInt(arr[1], 10));
  30.     rtn += parseFloat(1/3600 * parseFloat(arr[2]+"."+arr[3], 10), 10);
  31.  
  32.     return rtn;
  33. }
  34. </script>
  35.  


여기서 한가지.
구글은 위/경도 좌표계(WGS84)를 사용하고,
네이버의 좌표계는 TM좌표계라 원래는 두 좌표계간 변환을 해 주어야 하지만

얼마전 네이버 맵의 업데이트로 위/경도를 바로 파라메터로 넣어 표시가 가능해졌다.

기본적인 수학식을 빼먹어서 얼마나 삽질했는지...-_- (분명 북한산을 찍었는데 왜 부산앞바다가...)

위/경도 좌표계와 카텍좌표계 변환하는 js는 일단 만들어놨으니 포스팅은 하겠습니다만... -ㅅ-;



Exif정보가 표시되는 예제를 보시려면 제 블로그 포스팅 중 북한산 포스팅이나 강원도 고성 포스팅을 참고하시면 되겠습니다.
2008/09/22 14:30 2008/09/22 14:30

http://hyosang.kr/tc/trackback/95

  1. 유부초밥의 생각 from hy054nz' me2DAY 2008/09/22 14:34 [삭제]
  1. 재성才誠

    2008/09/22 16:03 [수정/삭제] [답글]

    안녕하세요. TNF에서 글 보고 찾아왔는데요. 어떻게 사용하는 것인지 잘 모르겠네요. 예를 든 북한산 포스팅을 보니 기존 Exif 출력 플러그인을 수정하여 GPS 정보를 계산해 웹지도 서비스에서 바로 볼 수 있도록 만드신 것 같네요. 저는 사진을 찍은 후에 구글어스 등에서 역으로 찾아가는데 그럴 필요가 없으니 더없이 좋은 플러그인이 될 것 같습니다. 혹시 수정한 파일을 텍스트큐브 플러그인 페이지 혹은 본 블로그에 업로드하실 계획은 없으신지요. 아니면 위 포스트를 보고 그냥 따라하기만 해도 구현 가능한 것인지요.

    • Hy054nz

      2008/09/22 16:07 [수정/삭제]

      이미 PS_ImagesExifView플러그인을 사용하시고 계시다면 플러그인의 index.xml과 index.php를 수정하시는것만으로도 사용이 가능합니다.

      수정되는 부분은 포스팅해놓은 부분이 전부이구요,
      별도의 추가 파일은 없습니다.

      혹 원하신다면 수정된 두 파일을 보내드릴수는 있습니다.

    • 재성才誠

      2008/09/22 16:18 [수정/삭제]

      전 최근 피카사와 김프로 사진을 업로드하고 있는데 별도의 프레임 파일로 작업을 하고 있어 메타정보를 모두 날리고 있습니다. 따라서 Exif 관련 플러그인을 사용하고 있지는 않은데요. 여기서 저런 정보를 줄 수 있다면 메타정보를 살리는 방향으로 변경해야할 것 같네요. 바쁘실텐데 염치없이 파일을 달라고하긴 좀 그렇고요. 혼자 삽질(?) 좀 해보고 그래도 정 안 되면 염치 불구하고 부탁 좀 드리겠습니다. 좋은 정보 감사합니다!

    • Hy054nz

      2008/09/22 16:21 [수정/삭제]

      피카사에서 사진 내보내기를 하면 exif는 살아있구요,
      아마 gimp에서 exif정보를 날리는 듯 하네요,

      전 피카사로 기본적인 보정&리사이즈,
      그리고 photoWorks로 프레임 작업을 하는데 두 프로그램에서는
      exif정보가 날아가지 않네요.

    • 재성才誠

      2008/09/23 13:43 [수정/삭제]

      위 설명대로 php 파일을 수정하고 다른 포스트에 있는 js 파일을 동일한 폴더(/plugins/PS_ImagesExifView)에 복사하였습니다. 그리고 EXIFutils 2.7의 파일 6개를 /plugins/PS_ImagesExifView/EXIFutils 폴더 내에 복사해 넣었습니다. 시스템 정보에 보니 iconv implementation는 glibc, iconv library version이 2.4이군요. 찾아보니 glibc 2.3 이상에서는 EXIFutils 2.7이 작동한다고 하는데 플러그인 자체가 작동을 하지 않네요. exiflist 파일의 퍼미션을 505, 555로 수정해봐도 작동이 되지 않는데 어떤 다른 문제점을 알고 계신 것이 있나 해서 질문 드립니다. (현재 블로그에는 EXIF 정보가 있는 사진은 없고 별도로 테스트해보고 있습니다.)

    • Hy054nz

      2008/09/23 14:23 [수정/삭제]

      일단 exiflist가 실행되는지 확인해보셔야겠네요,

      EXIFutils에 들어가셔서
      ./exiflist [exif정보가 있는 이미지 파일명]
      하셔서 exif정보가 뜨나 확인해 보세요

    • 재성才誠

      2008/09/23 18:18 [수정/삭제]

      계속 귀찮게 해드려서 죄송합니다.

      EXIFutils 폴더 내에 EXIF 정보가 있는 이미지 파일을 저장한 후 위에 적으신 코드를 실행하니

      'Segmentation fault'

      에러가 발생하네요. exiflist 퍼미션 555, 505 두 경우 모두 같은 현상이 발생합니다.

    • Hy054nz

      2008/09/23 20:49 [수정/삭제]

      흠.. 이상하네요,
      segmentation fault에러는 배포된 프로그램에서 보기 힘들텐데...

      exifutils를 교체해 보세요, 실행파일이 잘못된것 같기도 하는데...


      아, 그전에
      ./exiflist
      만 실행하셔서 안내 문구가 뜨는지 확인해 보세요.

    • 재성才誠

      2008/09/24 10:16 [수정/삭제]

      3일에 걸친 삽질 끝에 드디어 해냈습니다. 말씀하신대로 업로드한 파일에 문제가 있어 다시 압축을 풀었고, 원본 소스를 다시 수정하였더니 이제야 정삭 작동하네요. Cuub 로거를 사는 일만 남았네요;;; (저는 다 되는 줄 알았더니 위치 정보를 따로 입력해줘야 하는군요. 물론 '모든 카메라에서 GPS 정보를 얻나?'라고 잠시 의심해보기는 했지만...)

      많은 도움 감사합니다!

    • 재성才誠

      2008/09/26 13:48 [수정/삭제]

      본 플러그인을 사용하다보니 ISO 부분 표기가 100, 200 등으로 ASA 값만 나와서 원 표기법인 ASA/DIN˚을 포함하여 4가지 방법으로 선택/출력할 수 있도록 수정하고, 출력 순서 등 몇몇 부분을 수정하였는데 별다른 문제는 없는지요.

    • Hy054nz

      2008/09/27 23:23 [수정/삭제]

      음.. ISO/ASA는 각 수치 1:1 매칭 아닌가요?
      예외적인 상황만 잘 처리 해 주셨으면 문제 없으리라 봅니다

  2. 재성才誠

    2008/10/30 13:45 [수정/삭제] [답글]

    안녕하세요~ 덕분에 사진에 GPS 정보 넣어서 잘 쓰고 있습니다(아직 포스팅은 하나도 못했지만). 이번에 미국엘 다녀오게 되어서 사진을 올리려고 보니깐 경도가 동경으로만 인식하게 되어있는 것이 아닌가 해서 질문 드립니다. 경도가 서경인 경우 구글맵스에서 검색을 하려면 마이너스(-)를 앞에 붙여야 하는데 아마도 모두 플러스(+)로만 검색이 되는 것 같네요. 제가 언어를 잘 알면 고쳐서 쓸텐데 잘 몰라서 어떻게 해결할 수 있는지 질문 드립니다.

    • 재성才誠

      2008/10/30 19:33 [수정/삭제]

      자문자답입니다; 소스를 뜯어보니 북위/남위, 동경/서경을 나타내는 변수(?)가 있더군요. 조잡하기는 하지만 정상적으로 변환하도록 수정하였습니다.

댓글을 남겨주세요.

[로그인][오픈아이디란?]