RegionsKML.java

package gov.usgs.earthquake.geoserve;

import java.util.Date;

import gov.usgs.earthquake.qdm.Point;
import gov.usgs.earthquake.qdm.Region;
import gov.usgs.earthquake.qdm.Regions;
import gov.usgs.util.XmlUtils;

/**
 * Custom formatting for gov.usgs.earthquake.qdm.Regions.
 */
public class RegionsKML {

  /**
   * Output ANSS Authoritative Regions in KML format.
   *
   * @param regions ANSS Authoritative regions
   * @return string of ANSS regions in KML format
   */
  public String formatKML(final Regions regions) {
    StringBuffer kml = new StringBuffer(String.join("\n", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
        "<kml xmlns=\"http://www.opengis.net/kml/2.2\">", "<Document id=\"regions_xml\">",
        "  <name>ANSS Authoritative Regions</name>",
        "  <description>" + XmlUtils.formatDate(new Date()) + "</description>", "  <open>1</open>",
        "  <Style id=\"RegionStyle\">", "    <LabelStyle>", "      <color>00000000</color>",
        "      <scale>0.000000</scale>", "    </LabelStyle>", "    <LineStyle>", "      <color>ff0000ff</color>",
        "      <width>2.000000</width>", "    </LineStyle>", "    <PolyStyle>", "      <color>00ffffff</color>",
        "      <outline>1</outline>", "    </PolyStyle>", "  </Style>", ""));

    for (final Region region : regions.regions) {
      kml.append("\n<Placemark id=\"region_").append(region.regionid).append("\">\n");
      kml.append("<name>").append(region.regionid).append("</name>\n");
      kml.append("<styleUrl>#RegionStyle</styleUrl>\n");
      kml.append("<MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates>\n");
      for (final Point point : region.points) {
        kml.append("  ").append(point.x).append(",").append(point.y).append("\n");
      }
      kml.append("</coordinates></LinearRing></outerBoundaryIs></Polygon></MultiGeometry>\n");
      kml.append("</Placemark>\n");
    }

    kml.append(String.join("\n", "", "</Document>", "</kml>", ""));

    return kml.toString();
  }

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

}