/** This program demonstrates the use of the country polygons in Country.frink to draw a map of the world. It can be readily altered to draw the map in your favorite projection. */ use Country.frink use geometry.frink g = new graphics g.stroke[0.001] g.font["SansSerif", "bold", 0.5 degree] // Comment this in to clip to just a part of the world. //g.clipRectSides[-100 degrees, -40 degrees, -30 degrees, -10 degrees] // Iterate through all countries. for [code, country] = Country.getCountryList[] { cc = new color[randomFloat[0,1], randomFloat[0,1], randomFloat[0,1], .8] for poly = country.borders // Iterate through polygons in a country. { p = new filledPolygon // This polygon is the filled country po = new polygon // This is the outline of the country for [long, lat] = poly // Iterate through points in polygon { p.addPoint[long degree, -lat degree] po.addPoint[long degree, -lat degree] // Comment out the two lines above and use the 2 lines below for // a sinusoidal projection. Also change the line at bottom that // writes the country code. // p.addPoint[long degree cos[lat degree], -lat degree] // po.addPoint[long degree cos[lat degree], -lat degree] } // Comment this in to draw bounding boxes, which is kinda interesting. //[left,top,bottom,right] = getBoundingBox[p] //g.drawRectSides[left,top,bottom,right] // Draw filled countries g.color[cc] g.add[p] // Draw country outlines g.color[0.2,0.2,0.2,.8] g.add[po] // Draw country names. [clong, clat] = polygonCentroid[poly] g.color[0,0,0] g.text[code, clong degree, -clat degree] // Use the following line for sinusoidal projection and comment out the // line above. // g.text[code, clong degree cos[clat degree], -clat degree] } } g.show[] //g.write["world.svg", 1000, 500]