latitudeComparison.frink

View or download latitudeComparison.frink in plain text format


/** This program allows you to draw multiple country outlines shifted by
    longitude so you can compare how latitudes in each country compare. */


use Country.frink

drawCountry[g is graphics, code, longitudeOffset] :=
{
   countries = Country.getCountryList[]
   country = countries@code
   firstPoly = true
   
   for poly = country.borders
   {
      p = new polygon
      for [x, y] = poly
         p.addPoint[x degrees + longitudeOffset, -y degrees]
      g.add[p]

      // Label first (which will be the largest) polygon
      if firstPoly
      {
         [cx, cy] = p.getCentroid[]
         g.text[code, cx, cy]
         firstPoly = false;
      }
   }

   return g
}

g = new graphics
g.font["SansSerif", 1 degree]
g.drawCountry[g, "US", 0 degrees]
g.drawCountry[g, "DE", -120 degrees]
g.drawCountry[g, "GB", -120 degrees]
g.drawCountry[g, "PL", -120 degrees]
g.drawCountry[g, "UG", -120 degrees]
g.drawCountry[g, "JP", -238 degrees]


// Use the bounding box of the graphic to dynamically draw latitude lines
// for only the countries that were actually drawn above.
[west, north, east, south] = getBoundingBox[g]

// Draw primary lines within the mapped area
latStep = 10 degrees
southest = floor[south, latStep]
northest = ceil[north, latStep]
for lat = northest to southest + 1/2 latStep step latStep
{
   g.color[0,0,0,.3]
   g.line[west, lat, east, lat]
   g.color[0,0,0]
   g.text[format[-lat, degrees, 0], east, lat, "left", "center"]
   g.text[format[-lat, degrees, 0], west, lat, "right", "center"]
}

// Draw secondary lines that enclose the mapped area
latStep = 1 degree
southest = ceil[south, latStep]
northest = floor[north, latStep]
g.color[0,0,0,.2]
for lat = northest to southest + 1/2 latStep step latStep
   g.line[west, lat, east, lat]

g.show[]
g.invertGrays[].show[]
g.write["latitudeComparison.png", 1024, 600]
//g.browse["latitudeComparison.png"]


View or download latitudeComparison.frink in plain text format


This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 17590 days, 6 hours, 39 minutes ago.