RegionsJSON.java

package gov.usgs.earthquake.geoserve;


import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonValue;

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

/**
 * RegionsJSON reads GeoJSON formatted ANSS Authoritative Regions.
 */
public class RegionsJSON {

    /**
     * Parse {@link gov.usgs.earthquake.qdm.Regions} from a GeoJSON feature collection.
     *
     * @param json geojson feature collection.
     * @return Regions
     */
    public Regions parseRegions(final JsonObject json) {
        Regions regions = new Regions();
        // NEIC is always the default
        regions.defaultNetid = "us";

        JsonArray features = json.getJsonArray("features");
        for (JsonValue value : features) {
            JsonObject jsonRegion = value.asJsonObject();
            Region region = parseRegion(jsonRegion);
            regions.netids.add(region.netid);
            regions.regions.add(region);
        }

        return regions;
    }

    /**
     * Parse {@link gov.usgs.earthquake.qdm.Region} from a GeoJSON feature.
     *
     * @param json geojson feature.
     * @return region
     */
    public Region parseRegion(final JsonObject json) {
        JsonObject properties = json.getJsonObject("properties");
        String networkId = properties.getString("network");
        String regionId = properties.getString("region");

        Region region = new Region(networkId, regionId);
        JsonArray coordinates = json.getJsonObject("geometry")
                .getJsonArray("coordinates");
        for (JsonValue coord : coordinates.getJsonArray(0)) {
            JsonArray point = coord.asJsonArray();
            region.points.add(new Point(
                point.getJsonNumber(0).doubleValue(),
                point.getJsonNumber(1).doubleValue()));
        }

        return region;
    }

}