爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 25031|回复: 23

[作图] ncl绘制南海小地图及完整国界---我转的,非原创!!!

[复制链接]

新浪微博达人勋

发表于 2012-11-29 20:16:15 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 佳佳 于 2012-11-29 20:20 编辑

ncl绘制南海小地图及完整国界
此程序说明如下:
1、利用国家地理数据库的中国边界数据单独画中国边界图。包括中国完整边界,即"China","Disputed area between India andChina","Arunachal Pradesh"三个地区。而美国ncl中关于中国边界的数据不包括克什米尔地区与中印争议边界。
2、利用国家地理数据库海南岛屿单独绘制海南诸岛,并添加小地图。
;国家地理信息系统数据库
;包括中国完整边界数据及海南诸岛
;{***********************************************************************************************
;***********************************************************************************************
;***********************************************************************************************
f = addfile("bou1_4l.shp","r")   ; Open shapefile
;
; Read data off shapefile
;
  segments = f->segments
  geometry = f->geometry
  segsDims = dimsizes(segments)
  geomDims = dimsizes(geometry)
;
; Read global attributes  
;
  geom_segIndex = f@geom_segIndex
  geom_numSegs  = f@geom_numSegs
  segs_xyzIndex = f@segs_xyzIndex
  segs_numPnts  = f@segs_numPnts
  numFeatures   = geomDims(0)
;************************************************************************************************
;************************************************************************************************
;************************************************************************************************}
;{************************************************************************************************
;*************************************China********************************************************
;***********************************************************************************************
;绘制中国边界
lines1 =new(segsDims(0),graphic)   ; array to hold polylines
lines2 = new(segsDims(0),graphic)   ; array to hold polylines

plres             =True           ; resourcesfor polylines
; plres@gsLineColor ="blue"
  lon1    = f->x
  lat1    = f->y
  segNum = 0       ; Counter for addingpolylines
  do i=0, numFeatures-1  
     startSegment = geometry(i, geom_segIndex)
     numSegments  = geometry(i, geom_numSegs)
     do seg=startSegment, startSegment+numSegments-1
        startPT = segments(seg,segs_xyzIndex)
        endPT   = startPT +segments(seg, segs_numPnts) - 1
        lines1(segNum) =gsn_add_polyline(wks, base_map1 , lon1(startPT:endPT),  \
                                                   lat1(startPT:endPT), plres)
        lines2(segNum) =gsn_add_polyline(wks, base_map2 , lon1(startPT:endPT),  \
                                                   lat1(startPT:endPT), plres)
        segNum = segNum + 1
     end do
  end do
; if(isatt(res,"gsnDraw").and..not.res@gsnDraw) then
;   draw(base_map1)
; end if
;************************************************************************************************
;************************************************************************************************
;************************************************************************************************}
;绘制附加小地图
; res@gsnCenterString                       ="July (1950-2006)"
  ;res@tmXBLabelsOn                          = True
  ;plot3 = gsn_csm_contour_map_ce(wks,ts3,res)
;res@gsnCenterString                       ="October (1950-2006)"
  ;plot4 = gsn_csm_contour_map_ce(wks,ts4,res)
  
                           ; common label bar
mpres                  = True
  mpres@gsnFrame         = False
  mpres@gsnDraw          = False
; Tickmark stuff
;  mpres@pmTickMarkDisplayMode = "Always"
; mpres@tmXBLabelFontHeightF  = 0.01
; Map stuff
; mpres@mpDataBaseVersion  ="MediumRes"
  mpres@mpOutlineOn      = False
  mpres@mpMinLatF        = 2.0     ;hainan domain
  mpres@mpMaxLatF        =  23.5
  mpres@mpMinLonF        = 105.0
  mpres@mpMaxLonF        =  123.0
  mpres@mpOutlineBoundarySets ="NoBoundaries"     ; plot borders of the nations
; Width/height
  mpres@vpHeightF        = 0.17    ; Make this second map much smaller.
  mpres@vpWidthF         = 0.17
  mpres@mpLandFillColor        = "White"
  mpres@mpOceanFillColor       = "White"
  mpres@mpInlandWaterFillColor  = "White"
  mpres@tmXBOn =False
  mpres@tmYLOn = False
  map1 = gsn_csm_map_ce(wks,mpres)
  map2 = gsn_csm_map_ce(wks,mpres)  
;{************************************************************************************************
;**********************************hainandao***********************************************************
;************************************************************************************************
;添加海南诸岛数据于小地图
lines = new(segsDims(0),graphic)   ; array to hold polylines
  liness = new(segsDims(0),graphic)
plres1            =True           ; resourcesfor polylines
; plres@gsLineColor ="blue"
  lon1    = f->x
  lat1    = f->y
  segNum = 0       ; Counter for addingpolylines
  do i=0, numFeatures-1  
     startSegment = geometry(i, geom_segIndex)
     numSegments  = geometry(i, geom_numSegs)
     do seg=startSegment, startSegment+numSegments-1
        startPT = segments(seg,segs_xyzIndex)
        endPT   = startPT +segments(seg, segs_numPnts) - 1
        lines(segNum) =gsn_add_polyline(wks,  map1 , lon1(startPT:endPT),  \
                                                   lat1(startPT:endPT), plres1)
       liness(segNum) =gsn_add_polyline(wks,  map2 , lon1(startPT:endPT),  \
                                                   lat1(startPT:endPT), plres1)
       segNum = segNum + 1
     end do
  end do
; if(isatt(res,"gsnDraw").and..not.res@gsnDraw) then
;   draw(map)
; end if
;************************************************************************************************
;************************************************************************************************
;************************************************************************************************}
;将小地图加至大地图的右下角
amres                 = True
amres@amParallelPosF  = 0.494    ; -0.5 is the left edge of the plot.
amres@amOrthogonalPosF =0.493   ; -0.5 is the top edge of the plot.
amres@amJust          = "BottomRight"
  map_anno1 =gsn_add_annotation(base_map1, map1, amres)  ; Attach map to map.

  map_anno2 = gsn_add_annotation(base_map2, map2, amres)





map.png

评分

参与人数 1金钱 +10 贡献 +3 收起 理由
mofangbao + 10 + 3 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-29 21:26:28 | 显示全部楼层
赞一个
美中不足的是西藏东南部和西北部
南海.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 08:38:51 | 显示全部楼层
不错
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-11-30 10:16:15 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-1 10:08:36 | 显示全部楼层
不错,很有帮助。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-1 12:46:04 | 显示全部楼层
这种地图如果用中国自己提供的shp文件,那国境就很准确了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-1 15:10:56 | 显示全部楼层
支持
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-4 19:59:39 | 显示全部楼层
感谢楼主分享。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-20 15:08:12 | 显示全部楼层
很好,感谢楼主分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-4-20 15:08:23 | 显示全部楼层
很好,感谢楼主分享
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表