RegionsKML.java

  1. package gov.usgs.earthquake.geoserve;

  2. import java.util.Date;

  3. import gov.usgs.earthquake.qdm.Point;
  4. import gov.usgs.earthquake.qdm.Region;
  5. import gov.usgs.earthquake.qdm.Regions;
  6. import gov.usgs.util.XmlUtils;

  7. /**
  8.  * Custom formatting for gov.usgs.earthquake.qdm.Regions.
  9.  */
  10. public class RegionsKML {

  11.     /**
  12.      * Output ANSS Authoritative Regions in KML format.
  13.      * @param regions ANSS Authoritative regions
  14.      * @return string of ANSS regions in KML format
  15.      */
  16.     public String formatKML(final Regions regions) {
  17.         StringBuffer kml = new StringBuffer(String.join("\n",
  18.             "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
  19.             "<kml xmlns=\"http://www.opengis.net/kml/2.2\">",
  20.             "<Document id=\"regions_xml\">",
  21.             "  <name>ANSS Authoritative Regions</name>",
  22.             "  <description>"
  23.                     + XmlUtils.formatDate(new Date())
  24.                     + "</description>",
  25.             "  <open>1</open>",
  26.             "  <Style id=\"RegionStyle\">",
  27.             "    <LabelStyle>",
  28.             "      <color>00000000</color>",
  29.             "      <scale>0.000000</scale>",
  30.             "    </LabelStyle>",
  31.             "    <LineStyle>",
  32.             "      <color>ff0000ff</color>",
  33.             "      <width>2.000000</width>",
  34.             "    </LineStyle>",
  35.             "    <PolyStyle>",
  36.             "      <color>00ffffff</color>",
  37.             "      <outline>1</outline>",
  38.             "    </PolyStyle>",
  39.             "  </Style>",
  40.             ""
  41.         ));

  42.         for (final Region region : regions.regions) {
  43.             kml.append("\n<Placemark id=\"region_").append(region.regionid).append("\">\n");
  44.             kml.append("<name>").append(region.regionid).append("</name>\n");
  45.             kml.append("<styleUrl>#RegionStyle</styleUrl>\n");
  46.             kml.append("<MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>\n");
  47.             for (final Point point : region.points) {
  48.                 kml.append("  ").append(point.x).append(",").append(point.y).append("\n");
  49.             }
  50.             kml.append("</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>\n");
  51.             kml.append("</Placemark>\n");
  52.         }

  53.         kml.append(String.join("\n",
  54.             "",
  55.             "</Document>",
  56.             "</kml>",
  57.             ""
  58.         ));

  59.         return kml.toString();
  60.     }

  61.     /**
  62.      * Download ANSS Authoritative Regions,
  63.      * and print to console in Regions KML format.
  64.      * @param args Console arguments
  65.      * @throws Exception if error occurs
  66.      */
  67.     public static void main(final String[] args) throws Exception {
  68.         Regions regions = ANSSRegionsFactory.getFactory().getRegions();
  69.         String kml = new RegionsKML().formatKML(regions);
  70.         System.out.println(kml);
  71.     }

  72. }