[ncl-talk] Draw only outer boundaries of a shapefiles polygon

Tabish Ansari tabishumaransari at gmail.com
Thu May 30 13:32:45 MDT 2019


Hi

I'm trying to map three distinct regions, two of which are a collection of
several districts, and create boundaries for them on a map. I have
shapefiles for each district but drawing polylines using all the member
districts would also draw internal boundaries which I don't want. I only
want to draw outer boundaries for each region. Please see the attached
plot.

My script is pasted here:




























































































































*begin  wks  = gsn_open_wks("png","pulse-districts") ; send graphics to PNG
file  res                     = True  res at gsnDraw             = False
; don't draw yet  res at gsnFrame            = False       ; don't advance
frame yet  res at gsnMaximize         = True       ; maximize plot in frame;
 res at gsnPaperOrientation = "portrait"  res at vpKeepAspect        = True
res at mpProjection        = "LambertConformal"    ; choose projection
res at mpLambertParallel1F = 20          ; first parallel
res at mpLambertParallel2F = 50          ; second parallel
res at mpLambertMeridianF  = 110         ; meridian  res at mpLimitMode         =
"Corners"   ; corner method of zoom  res at mpLeftCornerLatF  = 35
res at mpLeftCornerLonF  = 109.35  res at mpRightCornerLatF = 44.41
res at mpRightCornerLonF = 124.94  res at pmTickMarkDisplayMode = "Always"  ;
turn on tickmarks  res at tmXBMajorOutwardLengthF = 0.0
res at tmXTMajorOutwardLengthF = 0.0  res at tmYLMajorOutwardLengthF = 0.0
res at tmYRMajorOutwardLengthF = 0.0   res at tiMainFontHeightF  = 0.025
res at tiYAxisFontHeightF = 0.01  res at tiXAxisFontHeightF = 0.01
res at tmXBLabelFontHeightF = 0.01  plot = gsn_csm_map(wks,res)   ; Create
map, but don't draw it
yet.;*************************************************; Section to add
polygons to map.;*************************************************  f =
addfile("/home/tabish/Shapefiles/China/CHN_adm2.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 at geom_segIndex  geom_numSegs  =
f at geom_numSegs  segs_xyzIndex = f at segs_xyzIndex  segs_numPnts  =
f at segs_numPnts  lines       = new(segsDims(0),graphic)   ; Array to hold
polygons  numFeatures = geomDims(0)  name =  f->NAME_2  lon   = f->x  lat
= f->y  plres             = True       ; resources for polylines
plres at gsEdgesOn   = True       ; draw border around polygons
plres at gsEdgeColor = "grey"    ;  plres at gsFillColor      = "Navy";
 plres at gsFillOpacityF    = 0.5    segNum = 0  do i=0, numFeatures-1       ;
color assignment (probably a better way to do this?)     if
(name(i).eq."Beijing") then        plres at gsFillColor = "tomato"
 else if
(name(i).eq."Langfang").or.(name(i).eq."Baoding").or.(name(i).eq."Shijiazhuang").or.(name(i).eq."Xingtai").or.(name(i).eq."Handan").or.(name(i).eq."Tangshan").or.(name(i).eq."Tianjin").or.(name(i).eq."Cangzhou").or.(name(i).eq."Hengshui").or.(name(i).eq."Dezhou").or.(name(i).eq."Binzhou").or.(name(i).eq."Dongying").or.(name(i).eq."Liaocheng").or.(name(i).eq."Jinan").or.(name(i).eq."Zibo")then
      plres at gsFillColor = "limegreen"          else
plres at gsFillColor = "dodgerblue"     end if     end if     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_polygon(wks, plot,
lon(startPT:endPT),  \
 lat(startPT:endPT), plres)        segNum = segNum + 1     end do
plres at gsFillColor      = "Grey"  end doprint("done making
polygons")delete(lat)delete(lon);---Attach some dummy text strings  txres
            = True  txres at txFontHeightF = 0.020  txres at txJust        =
"CenterCenter";STARTING TO MARK CITIES WHERE APEC CONTROLS WERE
IMPLEMENTEDlat=40.15lon=116.4074text = "Beijing"text_id1 =
gsn_add_text(wks,plot,text,lon,lat,txres)lat=38lon=116.2text = "Near
Neighbourhood"text_id8 =
gsn_add_text(wks,plot,text,lon,lat,txres)lat=41lon=112.2text = "Far
Neighbourhood"text_id8 = gsn_add_text(wks,plot,text,lon,lat,txres);
Maximize output in frame. This will draw everything and advance; the
frame.;  maximize_output(wks,False)end*

Thanks very much.

Cheers,

Tabish

Tabish U Ansari
PhD student, Lancaster Environment Center
Lancaster Univeristy
Bailrigg, Lancaster,
LA1 4YW, United Kingdom
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20190530/912a8efb/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pulse-districts.png
Type: image/png
Size: 195698 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20190530/912a8efb/attachment.png>


More information about the ncl-talk mailing list