다른 천체의 영상과 Grid , Text 출력

게시판 IDL Q&A 다른 천체의 영상과 Grid , Text 출력

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #5560 Reply
      planets
      손님

      안녕하세요. 아래와 같은 순서로 그림을 그리고자 하는데 잘 되지 않는 부분이 있어서 여쭤보고자 글을 남깁니다.

      1. 다른 천체를 쵤영한 JPG형태의 영상(Cylindrical image)을 그린 후
      2. 그 위에 위/경도 Grid를 표시하고
      3. 특정 몇 개의 지역을 위/경도에 따라 박스로 표시하고
      4. 해당 박스에 일련번호를 표기하려고 합니다.

      그런데 1~3번까지는 해결했는데 4번에서 해당 박스에 표기할 일련번호가 위/경도 기준이 아닌 화면 pixel 좌표에 근거해서 표기가 됩니다.

      즉, 예를 들어 영상의 중심이 위도 0도, 경도 0도 라고 할 때, 그 위치에 Text를 기입하려고 합니다.이 때 Text 함수를 쓰고 위치를 0, 0 이라고 하고, /data 라고 옵션을 주면 그림 중심에 Text가 기입되는 것이 아니라 좌측 아래 구석, 즉 화면상의 절대 픽셀 위치에 기재됩니다. 이 문제를 해결할 수가 없어서 문의드립니다.

      제가 작성한 코드는 다음과 같습니다.

      path=’\’
      target_map_fn=path+’target_image.jpg’
      input_fn=path+’box_locate_lat_lon.txt’

      max_xpix=2880
      max_ypix=1440

      max_lon= 180.0
      min_lon= -180.0
      max_lat= 90.0
      min_lat= -90.0

      f_lines=file_lines(input_fn)
      data=dblarr(4,f_lines)

      openr, 1, input_fn
      readf, 1, data ;lon_top,lon_bot,lat_top,lat_bot
      close, 1

      win=window(Dimensions=[max_xpix,max_ypix])

      target_image = IMAGE(target_map_fn, Aspect_Ratio=0,Margin=0., LIMIT=[-90,-180,90,180],/current)

      target_map = MAP(‘Cylindrical Equal Area’,LONGITUDE_MIN=-180, LONGITUDE_MAX=180, LATITUDE_MIN=-90, LATITUDE_MAX=90, Margin=0., Aspect_Ratio=0, Grid_latitude=30, Grid_longitude=30, Linestyle=’ ‘,font_size=3,/current)

      for i=0, f_lines-1 do begin
      lon_coord=[data[0,i],data[0,i],data[1,i],data[1,i]]
      lat_coord=[data[2,i],data[3,i],data[3,i],data[2,i]]
      loc_num=text(data[0,i],data[3,i],string(i),Font_size=20,font_color=’Yellow’,/data,/current)
      poly=polygon(lon_coord,lat_coord, $ target=target_map,fill_color=’Red’,fill_transparency=75,/Data,/Current)
      endfor

      end

      감사합니다.

    • #5567 Reply
      Sangwoo
      회원

      중첩에 있어서 좌표값이 픽셀 단위로 인식되는 것은, 먼저 IMAGE 함수를 사용하여 이미지를 표출하고 그 다음에 MAP 함수를 사용하여 지도를 표출하는 과정이 둘 다 /CURRENT 키워드를 사용하여 독립적으로 수행되면서, 뭔가 꼬이면서 좌표 체계가 지도가 아닌 이미지 기준이 되어버렸기 때문인 것 같습니다. 원래 지도와 이미지를 중첩하는 작업에 있어서는 전형적으로 권장되는 방식이 있습니다. 일단 아래 링크의 내용을 먼저 참조해보시면 좋을 것 같습니다.

      http://blog.daum.net/swrush/303

      즉, MAP 함수를 사용하여 바탕 지도를 표출하면서 좌표계가 경위도 기반이 되도록 한 상태에서 IMAGE 함수를 사용하여 이미지 데이터를 차후에 중첩하는 방식입니다. 여기서 중요한 것은 MAP 함수에 의한 표출에서는 /CURRENT 키워드를 사용하되, IMAGE 함수에 의한 표출에서는 /OVERPLOT 키워드를 사용해야 한다는 것입니다. 그래야만 메인 그림은 지도가 되고 이미지는 단지 그 위에 올리기만 하는 경우가 되기 때문에, 이후의 각종 중첩 작업에 있어서 좌표계를 경위도 기반으로 사용할 수 있게 됩니다. 물론 지금의 예제에서는 위의 링크의 내용에서와 같이 MAPCONTINENTS 함수까지 사용할 필요는 없습니다. 이미지 중첩까지만 하는 것으로 충분합니다. 이 상태에서라면 좌표계를 계속 경위도 기반으로 인식하기 때문에, 필요한 정보들을 추가적으로 표시하는데 있어서 문제가 없을 것입니다. 적어놓으신 예제코드 내용 중에서 target_image, target_map 관련 부분을 대략 다음 내용과 비슷하게 대체해보면 어떨까 싶습니다.

      limit = [-90, -180, 90, 180]
      target_map = MAP(‘Cylindrical Equal Area’, LIMIT=limit, $
      GRID_LATITUDE=10, GRID_LONGITUDE=10, $
      MARGIN=0, ASPECT_RATIO=0, LINESTYLE=1, FONT_SIZE=5, /CURRENT)
      target_image = IMAGE(target_map_fn, IMAGE_LOCATION=[-180, -90], $
      IMAGE_DIMENSION=[360, 180], GRID_UNITS=2, ASPECT_RATIO=0, /OVERPLOT)

1 답변 글타래를 보이고 있습니다
'다른 천체의 영상과 Grid , Text 출력'에 답변달기
글쓴이 정보: