- This topic has 6개 답변, 2명 참여, and was last updated 6 years 전에 by Sangwoo.
-
글쓴이글
-
-
ChoiYoun회원
안녕하세요.
MAPCONTINENTS 함수를 이용하여 shape file을 읽어 표출할 경우, MAP의 경계(LIMIT)에 따라 MAPCONTINENTS 함수가 작동하지 않는 문제에 대해 도움을 구하고자 글 남깁니다.
아래는 예제코드 입니다.
;MAPCONTINENTS works
sb = 5 &wb = 100 &nb = 25 &eb = 115
m = MAP(‘Geographic’, CENTER_LONGITUDE = 107, $
LIMIT = [sb,wb,nb,eb])
mc_VNM = MAPCONTINENTS(‘./VNM_adm1.shp’);MAPCONTINENTS not works
sb = 12 &wb = 112 &nb = 22 &eb = 102
m = MAP(‘Geographic’, CENTER_LONGITUDE = 107, $
LIMIT = [sb,wb,nb,eb])
mc_VNM = MAPCONTINENTS(‘./VNM_adm1.shp’) -
Sangwoo회원
작동하지 않는 문제는 shape file의 문제가 아니고, MAP 함수의 LIMIT 키워드에서 값들의 순서가 잘못되었기 때문입니다. LIMIT에 주어지는 4개의 값들의 순서는 lat_min, lon_min, lat_max, lon_max가 되어야 하는데, 작동안한다는 예제의 코드를 보면 lon_min이 lon_max보다 큰 값으로 설정되어 있기 때문에 이런 문제가 발생하는 것입니다. 따라서 두 값을 서로 바꾸면 됩니다.
-
ChoiYoun회원
맙소사, 이런 실수 때문에 작동 안하는 것이었다니 정말 감사합니다. 밑에 코드는 왜 작성했는지.. 헣헣헣.. 좋은 공부가 되었습니다.
ps. 머리가 나쁘면 몸이 고생하네요.
-
-
ChoiYoun회원
글 찾아오시는 분이 계실까봐 스스로 답변 달아봅니다. 저는 아래와 같은 방법으로 해결하였습니다.
MAPCONTINENTS 함수를 이용하지 않고 shape file에 직접 접근하여 PLOYLINE을 이용하여 표출하였습니다.
즉, mc_VNM = MAPCONTIENTS(‘./VNM_adm1.shp’) 대신 아래 코드를 사용하였습니다.;INSTEAD MAPCONTINENTS =======================
shp = IDLFFSHAPE(‘./VNM_adm1.shp’)
shp.getProperty, N_ENT = n_ent
shp_ent = shp.getEntity(/ALL)
for ient = 0, n_ent – 1 do begin
n_parts = shp_ent[ient].n_parts
for ipart = 0, n_parts – 1 do begin
cuts = [*shp_ent[ient].parts, shp_ent[ient].n_vertices]
n_conn = cuts[ipart + 1] – cuts[ipart]
temp_conn = cuts[ipart] + INDGEN(n_conn)
if ipart eq 0 then begin
connectivity = [n_conn, temp_conn]
endif else begin
connectivity = [connectivity, n_conn, temp_conn]
endelse
endfor
temp_x = TRANSPOSE((*shp_ent[ient].vertices)[0, *])
temp_y = TRANSPOSE((*shp_ent[ient].vertices)[1, *])
pline = POLYLINE(temp_x, temp_y, /DATA, TARGET = m, $
CONNECTIVITY = connectivity)
endfor
;=============================================-
ChoiYoun회원
이 코드는 위에 답변해주신 내용처럼 MAP의 LIMIT를 제대로 설정하면 사용할 필요가 없는 코드입니다.
-
-
Sangwoo회원
사실 저 순서가 그리 직관적인 편은 아니어서 항상 헷갈리기 때문에, LIMIT 키워드 사용할 때마다 도움말을 매번 참조하게 되긴 합니다. 저같은 경우는 그냥 “랫민, 론민, 랫맥스, 론맥스” 이런 식으로 마치 입시 때 암기과목 공부하듯이 외우니까 좀 낫긴 하더군요^^ 그리고 shape 파일이 기본적으로 바이너리 파일이기 때문에, 저렇게 내부의 내용들을 해독해서 필요한 정보들을 추출해서 사용하는 것은 좀 복잡할 수는 있겠지만 꽤 괜찮은 접근 방법이라고 봅니다.
-
-
글쓴이글