From 6e36eeab42bf4744a8c5c0d8adb8a03045ae2734 Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Mon, 5 Dec 2016 13:42:30 -0700
Subject: [PATCH 1/2] cybershake sites and export util

---
 src/org/opensha2/internal/CybershakeSite.java |  33 ++++-
 src/org/opensha2/internal/NshmpSiteFiles.java | 140 ++++++++++++++++--
 2 files changed, 152 insertions(+), 21 deletions(-)

diff --git a/src/org/opensha2/internal/CybershakeSite.java b/src/org/opensha2/internal/CybershakeSite.java
index 515ed51a4..39cd2a3d1 100644
--- a/src/org/opensha2/internal/CybershakeSite.java
+++ b/src/org/opensha2/internal/CybershakeSite.java
@@ -18,11 +18,10 @@ public enum CybershakeSite implements NamedLocation {
    * that there are scattered inconsistencies between the Wills and CVM vs30
    * values (e.g. LAPD) Sites beginning with lowercase s have been capitalized.
    * 
-   * CVM vs30 values for S603 and S684, and S474 and S476 are identical; waiting
-   * on reponse from Callahan or Milner.
+   * CVM vs30 values for [S603, S684], [S474, S476], [S644, S646], and [S688,
+   * S689] are identical; waiting on reponse from Callahan or Milner.
    * 
-   * Missing Orange County and Inland Empire sites; waiting on reponse from
-   * Callahan or Milner.
+   * Site S603 is repeated (and commented out) in Inland Empire group.
    */
 
   /* UGMS Original 14 */
@@ -77,11 +76,31 @@ public enum CybershakeSite implements NamedLocation {
   P3(-118.42409, 34.24939, 3938, 280.0, 343.0, 0.35, 2.33),
   S238(-118.54821, 34.26435, 4037, 387.0, 473.0, 0.15, 2.62),
   P2(-118.46393, 34.285625, 3932, 455.0, 537.0, 0.15, 3.5),
-  P21(-118.58717, 34.209946, 3934, 280.0, 292.0, 0.22, 2.36);
-
-  /* Inland Empire */
+  P21(-118.58717, 34.209946, 3934, 280.0, 292.0, 0.22, 2.36),
 
   /* Orange County */
+  S510(-118.04497, 33.72038, 4125, 387.0, 254.0, 0.58, 3.16),
+  S512(-117.99206, 33.79899, 4126, 280.0, 283.0, 0.72, 4.72),
+  S514(-117.93905, 33.87758, 4127, 387.0, 359.0, 0.62, 4.24),
+  S516(-117.88595, 33.95615, 4128, 390.0, 328.0, 0.31, 2.21),
+  S550(-117.95093, 33.67617, 4139, 280.0, 243.0, 0.44, 4.04),
+  S552(-117.89795, 33.75474, 4140, 280.0, 278.0, 0.47, 4.84),
+  S554(-117.84489, 33.83329, 4141, 280.0, 328.0, 0.33, 2.26),
+  S556(-117.79173, 33.91182, 4142, 390.0, 364.0, 0.18, 2.38),
+  S591(-117.85698, 33.63189, 4151, 390.0, 1975.0, 0.0, 2.27),
+  S593(-117.80395, 33.71042, 4152, 280.0, 279.0, 0.31, 1.8),
+  S595(-117.75082, 33.78893, 4153, 515.0, 2040.0, 0.0, 1.54),
+
+  /* Inland Empire */
+  S599(-117.64428, 33.94589, 4155, 387.0, 364.0, 0.19, 0.95),
+  S601(-117.59086, 34.02433, 4156, 354.0, 272.0, 0.2, 0.31),
+  // S603(-117.53735,34.10275,3883,354.0,364.0,0.19,0.43),
+  S605(-117.48374, 34.18115, 4157, 748.0, 704.0, 0.02, 1.07),
+  S644(-117.44314, 34.05816, 4167, 280.0, 364.0, 0.17, 0.31),
+  S646(-117.38947, 34.13652, 4168, 280.0, 364.0, 0.16, 0.31),
+  S647(-117.36259, 34.17569, 4169, 280.0, 392.0, 0.31, 1.22),
+  S688(-117.2953, 34.09181, 4181, 280.0, 272.0, 0.29, 1.45),
+  S689(-117.2684, 34.13096, 4182, 280.0, 272.0, 0.2, 0.31);
 
   private final Location loc;
   private final int run; // cybershake run #
diff --git a/src/org/opensha2/internal/NshmpSiteFiles.java b/src/org/opensha2/internal/NshmpSiteFiles.java
index 0527631e5..2581fd2cc 100644
--- a/src/org/opensha2/internal/NshmpSiteFiles.java
+++ b/src/org/opensha2/internal/NshmpSiteFiles.java
@@ -19,6 +19,7 @@ import org.opensha2.geo.Location;
 import org.opensha2.geo.LocationList;
 import org.opensha2.internal.GeoJson.Feature;
 import org.opensha2.internal.GeoJson.FeatureCollection;
+import org.opensha2.internal.GeoJson.PointProperties;
 import org.opensha2.util.NamedLocation;
 
 import com.google.common.base.Function;
@@ -63,6 +64,9 @@ final class NshmpSiteFiles {
    */
   public static void main(String[] args) throws IOException {
     writeNshmpSites();
+    writeSites("nureg", EnumSet.allOf(NuregSite.class), DEC3_FMT);
+    writeCybershakeSites("cybershake", EnumSet.allOf(CybershakeSite.class));
+
     // writeNshmpPolys();
     // writeNshmpSummaryPoly();
     // writeNshmpSites_0p1();
@@ -204,14 +208,18 @@ final class NshmpSiteFiles {
   }
 
   static void writeNshmpSites_0p1() throws IOException {
-    writeSites("ceus-0p1",
+    writeSites(
+        "ceus-0p1",
         FluentIterable.from(NshmpSite.ceus())
             .transform(adjustLocation_0p1())
-            .toList());
-    writeSites("wus-0p1",
+            .toList(),
+        DEC2_FMT);
+    writeSites(
+        "wus-0p1",
         FluentIterable.from(NshmpSite.wus())
             .transform(adjustLocation_0p1())
-            .toList());
+            .toList(),
+        DEC2_FMT);
   }
 
   static void writeNshmpSites() throws IOException {
@@ -219,39 +227,74 @@ final class NshmpSiteFiles {
     writeNshmpSites("ceus", NshmpSite.ceus());
     writeNshmpSites("wus", NshmpSite.wus());
     writeNshmpSites("nrc", NshmpSite.nrc());
-    writeSites("nehrp", NshmpSite.nehrp());
+    writeSites("nehrp", NshmpSite.nehrp(), DEC2_FMT);
   }
 
   static void writeNshmpSites(String name, Collection<NshmpSite> sites)
       throws IOException {
     List<NshmpSite> sortedSites = Lists.newArrayList(sites);
     Collections.sort(sortedSites, new NshmpSite.StateComparator());
-    writeSites(name, sortedSites);
+    writeSites(name, sortedSites, DEC2_FMT);
   }
 
-  static void writeSites(String name, Collection<? extends NamedLocation> sites)
-      throws IOException {
+  static void writeCybershakeSites(
+      String name,
+      Collection<CybershakeSite> sites) throws IOException {
+
+    Path jsonOut = EXPORT_DIR.resolve("sites-" + name + ".geojson");
+    writeCybershakeJsonSites(jsonOut, sites, CybershakeVs30.NONE);
+    jsonOut = EXPORT_DIR.resolve("sites-" + name + "-vs30-wills.geojson");
+    writeCybershakeJsonSites(jsonOut, sites, CybershakeVs30.WILLS);
+    jsonOut = EXPORT_DIR.resolve("sites-" + name + "-vs30-cvm.geojson");
+    writeCybershakeJsonSites(jsonOut, sites, CybershakeVs30.CVM);
+
+    Path csvOut = EXPORT_DIR.resolve("sites-" + name + ".csv");
+    writeCybershakeCsvSites(csvOut, sites, CybershakeVs30.NONE);
+    csvOut = EXPORT_DIR.resolve("sites-" + name + "-vs30-wills.csv");
+    writeCybershakeCsvSites(csvOut, sites, CybershakeVs30.WILLS);
+    csvOut = EXPORT_DIR.resolve("sites-" + name + "-vs30-cvm.csv");
+    writeCybershakeCsvSites(csvOut, sites, CybershakeVs30.CVM);
+  }
+
+  static void writeSites(
+      String name,
+      Collection<? extends NamedLocation> sites,
+      DecimalFormat latLonFormat) throws IOException {
+
     Path jsonOut = EXPORT_DIR.resolve("sites-" + name + ".geojson");
     writeJsonSites(jsonOut, sites);
     Path csvOut = EXPORT_DIR.resolve("sites-" + name + ".csv");
-    writeCsvSites(csvOut, sites);
+    writeCsvSites(csvOut, sites, latLonFormat);
   }
 
-  private static final DecimalFormat FMT = new DecimalFormat("0.00");
+  private static final DecimalFormat DEC2_FMT = new DecimalFormat("0.00");
+  private static final DecimalFormat DEC3_FMT = new DecimalFormat("0.000");
+  private static final DecimalFormat DEC5_FMT = new DecimalFormat("0.00000");
   private static final int NAME_BUFF = 28;
   private static final int LON_BUFF = 8;
   private static final int LAT_BUFF = 7;
+  private static final int LON_BUFF_CYBER = 10;
+  private static final int LAT_BUFF_CYBER = 9;
+
+  private enum CybershakeVs30 {
+    NONE,
+    WILLS,
+    CVM;
+  }
+
+  private static void writeCsvSites(
+      Path out,
+      Collection<? extends NamedLocation> locs,
+      final DecimalFormat latLonFormat) throws IOException {
 
-  private static void writeCsvSites(Path out, Collection<? extends NamedLocation> locs)
-      throws IOException {
     Iterable<String> lines = Iterables.transform(locs, new Function<NamedLocation, String>() {
       @Override
       public String apply(NamedLocation loc) {
         StringBuilder sb = new StringBuilder();
         sb.append(padEnd(loc.toString() + ",", NAME_BUFF, ' '));
-        sb.append(padStart(FMT.format(loc.location().lon()), LON_BUFF, ' '));
+        sb.append(padStart(latLonFormat.format(loc.location().lon()), LON_BUFF, ' '));
         sb.append(',');
-        sb.append(padStart(FMT.format(loc.location().lat()), LAT_BUFF, ' '));
+        sb.append(padStart(latLonFormat.format(loc.location().lat()), LAT_BUFF, ' '));
         return sb.toString();
       }
     });
@@ -266,6 +309,43 @@ final class NshmpSiteFiles {
         StandardCharsets.UTF_8);
   }
 
+  private static void writeCybershakeCsvSites(
+      Path out,
+      Collection<CybershakeSite> locs,
+      final CybershakeVs30 vs30) throws IOException {
+
+    Iterable<String> lines = Iterables.transform(locs, new Function<CybershakeSite, String>() {
+      @Override
+      public String apply(CybershakeSite loc) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(padEnd(loc.toString() + ",", NAME_BUFF, ' '));
+        sb.append(padStart(DEC5_FMT.format(loc.location().lon()), LON_BUFF_CYBER, ' '));
+        sb.append(',');
+        sb.append(padStart(DEC5_FMT.format(loc.location().lat()), LAT_BUFF_CYBER, ' '));
+        if (vs30 != CybershakeVs30.NONE) {
+          double vs30value = (vs30 == CybershakeVs30.WILLS) ? loc.willsVs30() : loc.cvmVs30();
+          sb.append(", ").append(padStart(Double.toString(vs30value), 7, ' '));
+          sb.append(", ").append(DEC2_FMT.format(loc.z1p0()));
+          sb.append(", ").append(DEC2_FMT.format(loc.z2p5()));
+        }
+        return sb.toString();
+      }
+    });
+    StringBuilder header = new StringBuilder(padEnd("name,", NAME_BUFF, ' '))
+        .append(padStart("lon", LON_BUFF_CYBER, ' '))
+        .append(',')
+        .append(padStart("lat", LAT_BUFF_CYBER, ' '));
+    if (vs30 != CybershakeVs30.NONE) {
+      header.append(",    vs30")
+          .append(", z1p0")
+          .append(", z2p5");
+    }
+    Files.write(
+        out,
+        Iterables.concat(ImmutableList.of(header.toString()), lines),
+        StandardCharsets.UTF_8);
+  }
+
   private static void writeJsonSites(Path out, Collection<? extends NamedLocation> sites)
       throws IOException {
 
@@ -279,6 +359,38 @@ final class NshmpSiteFiles {
     Files.write(out, json.getBytes(StandardCharsets.UTF_8));
   }
 
+  private static void writeCybershakeJsonSites(
+      Path out,
+      Collection<CybershakeSite> sites,
+      CybershakeVs30 vs30) throws IOException {
+
+    List<Feature> features = new ArrayList<>(sites.size());
+    for (CybershakeSite loc : sites) {
+      Feature feature = GeoJson.createPoint(loc);
+      CybershakeSiteProperties props = new CybershakeSiteProperties();
+      props.title = loc.name();
+      // props.runId = loc.runId();
+      if (vs30 != CybershakeVs30.NONE) {
+        props.vs30 = (vs30 == CybershakeVs30.WILLS) ? loc.willsVs30() : loc.cvmVs30();
+        props.z1p0 = loc.z1p0();
+        props.z2p5 = loc.z2p5();
+      }
+      feature.properties = props;
+      features.add(feature);
+    }
+    FeatureCollection fc = new FeatureCollection();
+    fc.features = features;
+    String json = GeoJson.cleanPoints(GSON.toJson(fc));
+    Files.write(out, json.getBytes(StandardCharsets.UTF_8));
+  }
+
+  static class CybershakeSiteProperties extends PointProperties {
+    // Integer runId;
+    Double vs30;
+    Double z1p0;
+    Double z2p5;
+  }
+
   private static final Function<NamedLocation, NamedLocation> adjustLocation_0p1() {
     return new Function<NamedLocation, NamedLocation>() {
 
-- 
GitLab


From 8de69dc8de66cc94dcaf24fdc867bfeb57d973e8 Mon Sep 17 00:00:00 2001
From: Peter Powers <pmpowers@usgs.gov>
Date: Mon, 5 Dec 2016 13:43:02 -0700
Subject: [PATCH 2/2] nureg and cybershk csv and geojson

---
 etc/nshm/sites-cybershake-vs30-cvm.csv       |  64 ++
 etc/nshm/sites-cybershake-vs30-cvm.geojson   | 887 +++++++++++++++++++
 etc/nshm/sites-cybershake-vs30-wills.csv     |  64 ++
 etc/nshm/sites-cybershake-vs30-wills.geojson | 887 +++++++++++++++++++
 etc/nshm/sites-cybershake.csv                |  64 ++
 etc/nshm/sites-cybershake.geojson            | 698 +++++++++++++++
 etc/nshm/sites-nureg.csv                     |   8 +
 etc/nshm/sites-nureg.geojson                 |  82 ++
 8 files changed, 2754 insertions(+)
 create mode 100644 etc/nshm/sites-cybershake-vs30-cvm.csv
 create mode 100644 etc/nshm/sites-cybershake-vs30-cvm.geojson
 create mode 100644 etc/nshm/sites-cybershake-vs30-wills.csv
 create mode 100644 etc/nshm/sites-cybershake-vs30-wills.geojson
 create mode 100644 etc/nshm/sites-cybershake.csv
 create mode 100644 etc/nshm/sites-cybershake.geojson
 create mode 100644 etc/nshm/sites-nureg.csv
 create mode 100644 etc/nshm/sites-nureg.geojson

diff --git a/etc/nshm/sites-cybershake-vs30-cvm.csv b/etc/nshm/sites-cybershake-vs30-cvm.csv
new file mode 100644
index 000000000..0c2d72780
--- /dev/null
+++ b/etc/nshm/sites-cybershake-vs30-cvm.csv
@@ -0,0 +1,64 @@
+name,                              lon,      lat,    vs30, z1p0, z2p5
+CCP,                        -118.41302, 34.05489,   362.0, 0.39, 2.96
+COO,                        -118.21639, 33.89604,   267.0, 0.73, 4.28
+LADT,                       -118.25713, 34.05204,   359.0, 0.31, 2.08
+LAPD,                       -118.12500, 34.55700,  2571.0, 0.00, 0.00
+P22,                        -118.56609, 34.18277,   303.0, 0.22, 2.27
+PAS,                        -118.17119, 34.14843,   821.0, 0.01, 0.31
+S429,                       -118.23333, 33.80858,   332.0, 0.71, 2.83
+S603,                       -117.53735, 34.10275,   364.0, 0.19, 0.43
+S684,                       -117.40266, 33.93515,   364.0, 0.15, 0.31
+S758,                       -117.53532, 33.37562,  2414.0, 0.00, 1.19
+SBSM,                       -117.29201, 34.06499,   355.0, 0.33, 1.77
+SMCA,                       -118.48939, 34.00909,   387.0, 0.59, 2.47
+STNI,                       -118.17881, 33.93088,   269.0, 0.88, 5.57
+WNGC,                       -118.06530, 34.04182,   296.0, 0.51, 2.44
+S344,                       -118.39576, 33.93587,   366.0, 0.69, 2.49
+S345,                       -118.36942, 33.97525,   358.0, 0.58, 3.01
+S346,                       -118.34305, 34.01462,   285.0, 0.65, 4.16
+S347,                       -118.31666, 34.05399,   366.0, 0.31, 2.05
+S348,                       -118.29024, 34.09336,   506.0, 0.31, 1.93
+S349,                       -118.26380, 34.13272,   412.0, 0.15, 0.49
+S351,                       -118.21085, 34.21142,   379.0, 0.09, 0.31
+S353,                       -118.15780, 34.29010,   703.0, 0.02, 0.31
+S383,                       -118.38029, 33.77382,  2195.0, 0.00, 1.46
+S385,                       -118.32766, 33.85257,   332.0, 0.76, 3.14
+S387,                       -118.27493, 33.93130,   341.0, 0.66, 3.97
+S388,                       -118.24853, 33.97065,   287.0, 0.83, 5.61
+S389,                       -118.22211, 34.01000,   295.0, 0.60, 3.98
+S391,                       -118.16919, 34.08869,   383.0, 0.31, 2.11
+S393,                       -118.11618, 34.16735,   374.0, 0.15, 1.27
+S395,                       -118.06307, 34.24599, 2537.92, 0.00, 0.00
+S470,                       -118.13910, 33.76452,  353.22, 0.64, 2.93
+S472,                       -118.08625, 33.84317,   268.0, 0.82, 4.79
+S474,                       -118.03331, 33.92180,   351.0, 0.63, 3.36
+S476,                       -117.98027, 34.00041,   351.0, 0.31, 1.96
+S478,                       -117.92713, 34.07899,   325.0, 0.26, 2.65
+S480,                       -117.87389, 34.15755,   728.0, 0.02, 1.25
+S518,                       -117.83275, 34.03470,   366.0, 0.15, 1.14
+S520,                       -117.77945, 34.11322,   364.0, 0.15, 0.31
+S311,                       -118.35851, 34.17667,   323.0, 0.33, 1.16
+S275,                       -118.45331, 34.22055,   330.0, 0.35, 1.85
+P3,                         -118.42409, 34.24939,   343.0, 0.35, 2.33
+S238,                       -118.54821, 34.26435,   473.0, 0.15, 2.62
+P2,                         -118.46393, 34.28562,   537.0, 0.15, 3.50
+P21,                        -118.58717, 34.20995,   292.0, 0.22, 2.36
+S510,                       -118.04497, 33.72038,   254.0, 0.58, 3.16
+S512,                       -117.99206, 33.79899,   283.0, 0.72, 4.72
+S514,                       -117.93905, 33.87758,   359.0, 0.62, 4.24
+S516,                       -117.88595, 33.95615,   328.0, 0.31, 2.21
+S550,                       -117.95093, 33.67617,   243.0, 0.44, 4.04
+S552,                       -117.89795, 33.75474,   278.0, 0.47, 4.84
+S554,                       -117.84489, 33.83329,   328.0, 0.33, 2.26
+S556,                       -117.79173, 33.91182,   364.0, 0.18, 2.38
+S591,                       -117.85698, 33.63189,  1975.0, 0.00, 2.27
+S593,                       -117.80395, 33.71042,   279.0, 0.31, 1.80
+S595,                       -117.75082, 33.78893,  2040.0, 0.00, 1.54
+S599,                       -117.64428, 33.94589,   364.0, 0.19, 0.95
+S601,                       -117.59086, 34.02433,   272.0, 0.20, 0.31
+S605,                       -117.48374, 34.18115,   704.0, 0.02, 1.07
+S644,                       -117.44314, 34.05816,   364.0, 0.17, 0.31
+S646,                       -117.38947, 34.13652,   364.0, 0.16, 0.31
+S647,                       -117.36259, 34.17569,   392.0, 0.31, 1.22
+S688,                       -117.29530, 34.09181,   272.0, 0.29, 1.45
+S689,                       -117.26840, 34.13096,   272.0, 0.20, 0.31
diff --git a/etc/nshm/sites-cybershake-vs30-cvm.geojson b/etc/nshm/sites-cybershake-vs30-cvm.geojson
new file mode 100644
index 000000000..1bda221c8
--- /dev/null
+++ b/etc/nshm/sites-cybershake-vs30-cvm.geojson
@@ -0,0 +1,887 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.41302, 34.05489]
+      },
+      "properties": {
+        "vs30": 362.0,
+        "z1p0": 0.39,
+        "z2p5": 2.96,
+        "marker-size": "small",
+        "title": "CCP"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.21639, 33.89604]
+      },
+      "properties": {
+        "vs30": 267.0,
+        "z1p0": 0.73,
+        "z2p5": 4.28,
+        "marker-size": "small",
+        "title": "COO"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.25713, 34.05204]
+      },
+      "properties": {
+        "vs30": 359.0,
+        "z1p0": 0.31,
+        "z2p5": 2.08,
+        "marker-size": "small",
+        "title": "LADT"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.125, 34.557]
+      },
+      "properties": {
+        "vs30": 2571.0,
+        "z1p0": 0.0,
+        "z2p5": 0.0,
+        "marker-size": "small",
+        "title": "LAPD"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.56609, 34.18277]
+      },
+      "properties": {
+        "vs30": 303.0,
+        "z1p0": 0.22,
+        "z2p5": 2.27,
+        "marker-size": "small",
+        "title": "P22"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.17119, 34.14843]
+      },
+      "properties": {
+        "vs30": 821.0,
+        "z1p0": 0.01,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "PAS"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.23333, 33.80858]
+      },
+      "properties": {
+        "vs30": 332.0,
+        "z1p0": 0.71,
+        "z2p5": 2.83,
+        "marker-size": "small",
+        "title": "S429"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.53735, 34.10275]
+      },
+      "properties": {
+        "vs30": 364.0,
+        "z1p0": 0.19,
+        "z2p5": 0.43,
+        "marker-size": "small",
+        "title": "S603"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.40266, 33.93515]
+      },
+      "properties": {
+        "vs30": 364.0,
+        "z1p0": 0.15,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S684"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.53532, 33.37562]
+      },
+      "properties": {
+        "vs30": 2414.0,
+        "z1p0": 0.0,
+        "z2p5": 1.19,
+        "marker-size": "small",
+        "title": "S758"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.29201, 34.06499]
+      },
+      "properties": {
+        "vs30": 355.0,
+        "z1p0": 0.33,
+        "z2p5": 1.77,
+        "marker-size": "small",
+        "title": "SBSM"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.48939, 34.00909]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.59,
+        "z2p5": 2.47,
+        "marker-size": "small",
+        "title": "SMCA"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.17881, 33.93088]
+      },
+      "properties": {
+        "vs30": 269.0,
+        "z1p0": 0.88,
+        "z2p5": 5.57,
+        "marker-size": "small",
+        "title": "STNI"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.0653, 34.04182]
+      },
+      "properties": {
+        "vs30": 296.0,
+        "z1p0": 0.51,
+        "z2p5": 2.44,
+        "marker-size": "small",
+        "title": "WNGC"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.39576, 33.93587]
+      },
+      "properties": {
+        "vs30": 366.0,
+        "z1p0": 0.69,
+        "z2p5": 2.49,
+        "marker-size": "small",
+        "title": "S344"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.36942, 33.97525]
+      },
+      "properties": {
+        "vs30": 358.0,
+        "z1p0": 0.58,
+        "z2p5": 3.01,
+        "marker-size": "small",
+        "title": "S345"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.34305, 34.01462]
+      },
+      "properties": {
+        "vs30": 285.0,
+        "z1p0": 0.65,
+        "z2p5": 4.16,
+        "marker-size": "small",
+        "title": "S346"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.31666, 34.05399]
+      },
+      "properties": {
+        "vs30": 366.0,
+        "z1p0": 0.31,
+        "z2p5": 2.05,
+        "marker-size": "small",
+        "title": "S347"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.29024, 34.09336]
+      },
+      "properties": {
+        "vs30": 506.0,
+        "z1p0": 0.31,
+        "z2p5": 1.93,
+        "marker-size": "small",
+        "title": "S348"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.2638, 34.13272]
+      },
+      "properties": {
+        "vs30": 412.0,
+        "z1p0": 0.15,
+        "z2p5": 0.49,
+        "marker-size": "small",
+        "title": "S349"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.21085, 34.21142]
+      },
+      "properties": {
+        "vs30": 379.0,
+        "z1p0": 0.09,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S351"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.1578, 34.2901]
+      },
+      "properties": {
+        "vs30": 703.0,
+        "z1p0": 0.02,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S353"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.38029, 33.77382]
+      },
+      "properties": {
+        "vs30": 2195.0,
+        "z1p0": 0.0,
+        "z2p5": 1.46,
+        "marker-size": "small",
+        "title": "S383"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.32766, 33.85257]
+      },
+      "properties": {
+        "vs30": 332.0,
+        "z1p0": 0.76,
+        "z2p5": 3.14,
+        "marker-size": "small",
+        "title": "S385"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.27493, 33.9313]
+      },
+      "properties": {
+        "vs30": 341.0,
+        "z1p0": 0.66,
+        "z2p5": 3.97,
+        "marker-size": "small",
+        "title": "S387"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.24853, 33.97065]
+      },
+      "properties": {
+        "vs30": 287.0,
+        "z1p0": 0.83,
+        "z2p5": 5.61,
+        "marker-size": "small",
+        "title": "S388"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.22211, 34.01]
+      },
+      "properties": {
+        "vs30": 295.0,
+        "z1p0": 0.6,
+        "z2p5": 3.98,
+        "marker-size": "small",
+        "title": "S389"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.16919, 34.08869]
+      },
+      "properties": {
+        "vs30": 383.0,
+        "z1p0": 0.31,
+        "z2p5": 2.11,
+        "marker-size": "small",
+        "title": "S391"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.11618, 34.16735]
+      },
+      "properties": {
+        "vs30": 374.0,
+        "z1p0": 0.15,
+        "z2p5": 1.27,
+        "marker-size": "small",
+        "title": "S393"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.06307, 34.24599]
+      },
+      "properties": {
+        "vs30": 2537.92,
+        "z1p0": 0.0,
+        "z2p5": 0.0,
+        "marker-size": "small",
+        "title": "S395"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.1391, 33.76452]
+      },
+      "properties": {
+        "vs30": 353.22,
+        "z1p0": 0.64,
+        "z2p5": 2.93,
+        "marker-size": "small",
+        "title": "S470"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.08625, 33.84317]
+      },
+      "properties": {
+        "vs30": 268.0,
+        "z1p0": 0.82,
+        "z2p5": 4.79,
+        "marker-size": "small",
+        "title": "S472"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.03331, 33.9218]
+      },
+      "properties": {
+        "vs30": 351.0,
+        "z1p0": 0.63,
+        "z2p5": 3.36,
+        "marker-size": "small",
+        "title": "S474"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.98027, 34.00041]
+      },
+      "properties": {
+        "vs30": 351.0,
+        "z1p0": 0.31,
+        "z2p5": 1.96,
+        "marker-size": "small",
+        "title": "S476"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.92713, 34.07899]
+      },
+      "properties": {
+        "vs30": 325.0,
+        "z1p0": 0.26,
+        "z2p5": 2.65,
+        "marker-size": "small",
+        "title": "S478"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.87389, 34.15755]
+      },
+      "properties": {
+        "vs30": 728.0,
+        "z1p0": 0.02,
+        "z2p5": 1.25,
+        "marker-size": "small",
+        "title": "S480"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.83275, 34.0347]
+      },
+      "properties": {
+        "vs30": 366.0,
+        "z1p0": 0.15,
+        "z2p5": 1.14,
+        "marker-size": "small",
+        "title": "S518"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.77945, 34.11322]
+      },
+      "properties": {
+        "vs30": 364.0,
+        "z1p0": 0.15,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S520"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.35851, 34.17667]
+      },
+      "properties": {
+        "vs30": 323.0,
+        "z1p0": 0.33,
+        "z2p5": 1.16,
+        "marker-size": "small",
+        "title": "S311"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.45331, 34.22055]
+      },
+      "properties": {
+        "vs30": 330.0,
+        "z1p0": 0.35,
+        "z2p5": 1.85,
+        "marker-size": "small",
+        "title": "S275"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.42409, 34.24939]
+      },
+      "properties": {
+        "vs30": 343.0,
+        "z1p0": 0.35,
+        "z2p5": 2.33,
+        "marker-size": "small",
+        "title": "P3"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.54821, 34.26435]
+      },
+      "properties": {
+        "vs30": 473.0,
+        "z1p0": 0.15,
+        "z2p5": 2.62,
+        "marker-size": "small",
+        "title": "S238"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.46393, 34.28563]
+      },
+      "properties": {
+        "vs30": 537.0,
+        "z1p0": 0.15,
+        "z2p5": 3.5,
+        "marker-size": "small",
+        "title": "P2"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.58717, 34.20995]
+      },
+      "properties": {
+        "vs30": 292.0,
+        "z1p0": 0.22,
+        "z2p5": 2.36,
+        "marker-size": "small",
+        "title": "P21"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.04497, 33.72038]
+      },
+      "properties": {
+        "vs30": 254.0,
+        "z1p0": 0.58,
+        "z2p5": 3.16,
+        "marker-size": "small",
+        "title": "S510"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.99206, 33.79899]
+      },
+      "properties": {
+        "vs30": 283.0,
+        "z1p0": 0.72,
+        "z2p5": 4.72,
+        "marker-size": "small",
+        "title": "S512"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.93905, 33.87758]
+      },
+      "properties": {
+        "vs30": 359.0,
+        "z1p0": 0.62,
+        "z2p5": 4.24,
+        "marker-size": "small",
+        "title": "S514"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.88595, 33.95615]
+      },
+      "properties": {
+        "vs30": 328.0,
+        "z1p0": 0.31,
+        "z2p5": 2.21,
+        "marker-size": "small",
+        "title": "S516"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.95093, 33.67617]
+      },
+      "properties": {
+        "vs30": 243.0,
+        "z1p0": 0.44,
+        "z2p5": 4.04,
+        "marker-size": "small",
+        "title": "S550"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.89795, 33.75474]
+      },
+      "properties": {
+        "vs30": 278.0,
+        "z1p0": 0.47,
+        "z2p5": 4.84,
+        "marker-size": "small",
+        "title": "S552"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.84489, 33.83329]
+      },
+      "properties": {
+        "vs30": 328.0,
+        "z1p0": 0.33,
+        "z2p5": 2.26,
+        "marker-size": "small",
+        "title": "S554"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.79173, 33.91182]
+      },
+      "properties": {
+        "vs30": 364.0,
+        "z1p0": 0.18,
+        "z2p5": 2.38,
+        "marker-size": "small",
+        "title": "S556"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.85698, 33.63189]
+      },
+      "properties": {
+        "vs30": 1975.0,
+        "z1p0": 0.0,
+        "z2p5": 2.27,
+        "marker-size": "small",
+        "title": "S591"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.80395, 33.71042]
+      },
+      "properties": {
+        "vs30": 279.0,
+        "z1p0": 0.31,
+        "z2p5": 1.8,
+        "marker-size": "small",
+        "title": "S593"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.75082, 33.78893]
+      },
+      "properties": {
+        "vs30": 2040.0,
+        "z1p0": 0.0,
+        "z2p5": 1.54,
+        "marker-size": "small",
+        "title": "S595"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.64428, 33.94589]
+      },
+      "properties": {
+        "vs30": 364.0,
+        "z1p0": 0.19,
+        "z2p5": 0.95,
+        "marker-size": "small",
+        "title": "S599"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.59086, 34.02433]
+      },
+      "properties": {
+        "vs30": 272.0,
+        "z1p0": 0.2,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S601"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.48374, 34.18115]
+      },
+      "properties": {
+        "vs30": 704.0,
+        "z1p0": 0.02,
+        "z2p5": 1.07,
+        "marker-size": "small",
+        "title": "S605"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.44314, 34.05816]
+      },
+      "properties": {
+        "vs30": 364.0,
+        "z1p0": 0.17,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S644"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.38947, 34.13652]
+      },
+      "properties": {
+        "vs30": 364.0,
+        "z1p0": 0.16,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S646"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.36259, 34.17569]
+      },
+      "properties": {
+        "vs30": 392.0,
+        "z1p0": 0.31,
+        "z2p5": 1.22,
+        "marker-size": "small",
+        "title": "S647"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.2953, 34.09181]
+      },
+      "properties": {
+        "vs30": 272.0,
+        "z1p0": 0.29,
+        "z2p5": 1.45,
+        "marker-size": "small",
+        "title": "S688"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.2684, 34.13096]
+      },
+      "properties": {
+        "vs30": 272.0,
+        "z1p0": 0.2,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S689"
+      }
+    }
+  ]
+}
diff --git a/etc/nshm/sites-cybershake-vs30-wills.csv b/etc/nshm/sites-cybershake-vs30-wills.csv
new file mode 100644
index 000000000..09bcc3c32
--- /dev/null
+++ b/etc/nshm/sites-cybershake-vs30-wills.csv
@@ -0,0 +1,64 @@
+name,                              lon,      lat,    vs30, z1p0, z2p5
+CCP,                        -118.41302, 34.05489,   387.0, 0.39, 2.96
+COO,                        -118.21639, 33.89604,   280.0, 0.73, 4.28
+LADT,                       -118.25713, 34.05204,   390.0, 0.31, 2.08
+LAPD,                       -118.12500, 34.55700,   515.0, 0.00, 0.00
+P22,                        -118.56609, 34.18277,   280.0, 0.22, 2.27
+PAS,                        -118.17119, 34.14843,   748.0, 0.01, 0.31
+S429,                       -118.23333, 33.80858,   280.0, 0.71, 2.83
+S603,                       -117.53735, 34.10275,   354.0, 0.19, 0.43
+S684,                       -117.40266, 33.93515,   387.0, 0.15, 0.31
+S758,                       -117.53532, 33.37562,   390.0, 0.00, 1.19
+SBSM,                       -117.29201, 34.06499,   280.0, 0.33, 1.77
+SMCA,                       -118.48939, 34.00909,   387.0, 0.59, 2.47
+STNI,                       -118.17881, 33.93088,   280.0, 0.88, 5.57
+WNGC,                       -118.06530, 34.04182,   280.0, 0.51, 2.44
+S344,                       -118.39576, 33.93587,   387.0, 0.69, 2.49
+S345,                       -118.36942, 33.97525,   387.0, 0.58, 3.01
+S346,                       -118.34305, 34.01462,   280.0, 0.65, 4.16
+S347,                       -118.31666, 34.05399,   280.0, 0.31, 2.05
+S348,                       -118.29024, 34.09336,   387.0, 0.31, 1.93
+S349,                       -118.26380, 34.13272,   280.0, 0.15, 0.49
+S351,                       -118.21085, 34.21142,   349.0, 0.09, 0.31
+S353,                       -118.15780, 34.29010,   748.0, 0.02, 0.31
+S383,                       -118.38029, 33.77382,   390.0, 0.00, 1.46
+S385,                       -118.32766, 33.85257,   387.0, 0.76, 3.14
+S387,                       -118.27493, 33.93130,   387.0, 0.66, 3.97
+S388,                       -118.24853, 33.97065,   280.0, 0.83, 5.61
+S389,                       -118.22211, 34.01000,   280.0, 0.60, 3.98
+S391,                       -118.16919, 34.08869,   390.0, 0.31, 2.11
+S393,                       -118.11618, 34.16735,   387.0, 0.15, 1.27
+S395,                       -118.06307, 34.24599,   748.0, 0.00, 0.00
+S470,                       -118.13910, 33.76452,   387.0, 0.64, 2.93
+S472,                       -118.08625, 33.84317,   280.0, 0.82, 4.79
+S474,                       -118.03331, 33.92180,   387.0, 0.63, 3.36
+S476,                       -117.98027, 34.00041,   390.0, 0.31, 1.96
+S478,                       -117.92713, 34.07899,   280.0, 0.26, 2.65
+S480,                       -117.87389, 34.15755,   748.0, 0.02, 1.25
+S518,                       -117.83275, 34.03470,   390.0, 0.15, 1.14
+S520,                       -117.77945, 34.11322,   349.0, 0.15, 0.31
+S311,                       -118.35851, 34.17667,   280.0, 0.33, 1.16
+S275,                       -118.45331, 34.22055,   280.0, 0.35, 1.85
+P3,                         -118.42409, 34.24939,   280.0, 0.35, 2.33
+S238,                       -118.54821, 34.26435,   387.0, 0.15, 2.62
+P2,                         -118.46393, 34.28562,   455.0, 0.15, 3.50
+P21,                        -118.58717, 34.20995,   280.0, 0.22, 2.36
+S510,                       -118.04497, 33.72038,   387.0, 0.58, 3.16
+S512,                       -117.99206, 33.79899,   280.0, 0.72, 4.72
+S514,                       -117.93905, 33.87758,   387.0, 0.62, 4.24
+S516,                       -117.88595, 33.95615,   390.0, 0.31, 2.21
+S550,                       -117.95093, 33.67617,   280.0, 0.44, 4.04
+S552,                       -117.89795, 33.75474,   280.0, 0.47, 4.84
+S554,                       -117.84489, 33.83329,   280.0, 0.33, 2.26
+S556,                       -117.79173, 33.91182,   390.0, 0.18, 2.38
+S591,                       -117.85698, 33.63189,   390.0, 0.00, 2.27
+S593,                       -117.80395, 33.71042,   280.0, 0.31, 1.80
+S595,                       -117.75082, 33.78893,   515.0, 0.00, 1.54
+S599,                       -117.64428, 33.94589,   387.0, 0.19, 0.95
+S601,                       -117.59086, 34.02433,   354.0, 0.20, 0.31
+S605,                       -117.48374, 34.18115,   748.0, 0.02, 1.07
+S644,                       -117.44314, 34.05816,   280.0, 0.17, 0.31
+S646,                       -117.38947, 34.13652,   280.0, 0.16, 0.31
+S647,                       -117.36259, 34.17569,   280.0, 0.31, 1.22
+S688,                       -117.29530, 34.09181,   280.0, 0.29, 1.45
+S689,                       -117.26840, 34.13096,   280.0, 0.20, 0.31
diff --git a/etc/nshm/sites-cybershake-vs30-wills.geojson b/etc/nshm/sites-cybershake-vs30-wills.geojson
new file mode 100644
index 000000000..2d9aeb9bf
--- /dev/null
+++ b/etc/nshm/sites-cybershake-vs30-wills.geojson
@@ -0,0 +1,887 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.41302, 34.05489]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.39,
+        "z2p5": 2.96,
+        "marker-size": "small",
+        "title": "CCP"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.21639, 33.89604]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.73,
+        "z2p5": 4.28,
+        "marker-size": "small",
+        "title": "COO"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.25713, 34.05204]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.31,
+        "z2p5": 2.08,
+        "marker-size": "small",
+        "title": "LADT"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.125, 34.557]
+      },
+      "properties": {
+        "vs30": 515.0,
+        "z1p0": 0.0,
+        "z2p5": 0.0,
+        "marker-size": "small",
+        "title": "LAPD"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.56609, 34.18277]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.22,
+        "z2p5": 2.27,
+        "marker-size": "small",
+        "title": "P22"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.17119, 34.14843]
+      },
+      "properties": {
+        "vs30": 748.0,
+        "z1p0": 0.01,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "PAS"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.23333, 33.80858]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.71,
+        "z2p5": 2.83,
+        "marker-size": "small",
+        "title": "S429"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.53735, 34.10275]
+      },
+      "properties": {
+        "vs30": 354.0,
+        "z1p0": 0.19,
+        "z2p5": 0.43,
+        "marker-size": "small",
+        "title": "S603"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.40266, 33.93515]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.15,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S684"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.53532, 33.37562]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.0,
+        "z2p5": 1.19,
+        "marker-size": "small",
+        "title": "S758"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.29201, 34.06499]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.33,
+        "z2p5": 1.77,
+        "marker-size": "small",
+        "title": "SBSM"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.48939, 34.00909]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.59,
+        "z2p5": 2.47,
+        "marker-size": "small",
+        "title": "SMCA"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.17881, 33.93088]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.88,
+        "z2p5": 5.57,
+        "marker-size": "small",
+        "title": "STNI"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.0653, 34.04182]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.51,
+        "z2p5": 2.44,
+        "marker-size": "small",
+        "title": "WNGC"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.39576, 33.93587]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.69,
+        "z2p5": 2.49,
+        "marker-size": "small",
+        "title": "S344"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.36942, 33.97525]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.58,
+        "z2p5": 3.01,
+        "marker-size": "small",
+        "title": "S345"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.34305, 34.01462]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.65,
+        "z2p5": 4.16,
+        "marker-size": "small",
+        "title": "S346"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.31666, 34.05399]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.31,
+        "z2p5": 2.05,
+        "marker-size": "small",
+        "title": "S347"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.29024, 34.09336]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.31,
+        "z2p5": 1.93,
+        "marker-size": "small",
+        "title": "S348"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.2638, 34.13272]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.15,
+        "z2p5": 0.49,
+        "marker-size": "small",
+        "title": "S349"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.21085, 34.21142]
+      },
+      "properties": {
+        "vs30": 349.0,
+        "z1p0": 0.09,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S351"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.1578, 34.2901]
+      },
+      "properties": {
+        "vs30": 748.0,
+        "z1p0": 0.02,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S353"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.38029, 33.77382]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.0,
+        "z2p5": 1.46,
+        "marker-size": "small",
+        "title": "S383"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.32766, 33.85257]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.76,
+        "z2p5": 3.14,
+        "marker-size": "small",
+        "title": "S385"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.27493, 33.9313]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.66,
+        "z2p5": 3.97,
+        "marker-size": "small",
+        "title": "S387"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.24853, 33.97065]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.83,
+        "z2p5": 5.61,
+        "marker-size": "small",
+        "title": "S388"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.22211, 34.01]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.6,
+        "z2p5": 3.98,
+        "marker-size": "small",
+        "title": "S389"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.16919, 34.08869]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.31,
+        "z2p5": 2.11,
+        "marker-size": "small",
+        "title": "S391"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.11618, 34.16735]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.15,
+        "z2p5": 1.27,
+        "marker-size": "small",
+        "title": "S393"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.06307, 34.24599]
+      },
+      "properties": {
+        "vs30": 748.0,
+        "z1p0": 0.0,
+        "z2p5": 0.0,
+        "marker-size": "small",
+        "title": "S395"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.1391, 33.76452]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.64,
+        "z2p5": 2.93,
+        "marker-size": "small",
+        "title": "S470"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.08625, 33.84317]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.82,
+        "z2p5": 4.79,
+        "marker-size": "small",
+        "title": "S472"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.03331, 33.9218]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.63,
+        "z2p5": 3.36,
+        "marker-size": "small",
+        "title": "S474"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.98027, 34.00041]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.31,
+        "z2p5": 1.96,
+        "marker-size": "small",
+        "title": "S476"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.92713, 34.07899]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.26,
+        "z2p5": 2.65,
+        "marker-size": "small",
+        "title": "S478"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.87389, 34.15755]
+      },
+      "properties": {
+        "vs30": 748.0,
+        "z1p0": 0.02,
+        "z2p5": 1.25,
+        "marker-size": "small",
+        "title": "S480"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.83275, 34.0347]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.15,
+        "z2p5": 1.14,
+        "marker-size": "small",
+        "title": "S518"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.77945, 34.11322]
+      },
+      "properties": {
+        "vs30": 349.0,
+        "z1p0": 0.15,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S520"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.35851, 34.17667]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.33,
+        "z2p5": 1.16,
+        "marker-size": "small",
+        "title": "S311"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.45331, 34.22055]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.35,
+        "z2p5": 1.85,
+        "marker-size": "small",
+        "title": "S275"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.42409, 34.24939]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.35,
+        "z2p5": 2.33,
+        "marker-size": "small",
+        "title": "P3"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.54821, 34.26435]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.15,
+        "z2p5": 2.62,
+        "marker-size": "small",
+        "title": "S238"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.46393, 34.28563]
+      },
+      "properties": {
+        "vs30": 455.0,
+        "z1p0": 0.15,
+        "z2p5": 3.5,
+        "marker-size": "small",
+        "title": "P2"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.58717, 34.20995]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.22,
+        "z2p5": 2.36,
+        "marker-size": "small",
+        "title": "P21"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.04497, 33.72038]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.58,
+        "z2p5": 3.16,
+        "marker-size": "small",
+        "title": "S510"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.99206, 33.79899]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.72,
+        "z2p5": 4.72,
+        "marker-size": "small",
+        "title": "S512"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.93905, 33.87758]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.62,
+        "z2p5": 4.24,
+        "marker-size": "small",
+        "title": "S514"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.88595, 33.95615]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.31,
+        "z2p5": 2.21,
+        "marker-size": "small",
+        "title": "S516"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.95093, 33.67617]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.44,
+        "z2p5": 4.04,
+        "marker-size": "small",
+        "title": "S550"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.89795, 33.75474]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.47,
+        "z2p5": 4.84,
+        "marker-size": "small",
+        "title": "S552"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.84489, 33.83329]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.33,
+        "z2p5": 2.26,
+        "marker-size": "small",
+        "title": "S554"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.79173, 33.91182]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.18,
+        "z2p5": 2.38,
+        "marker-size": "small",
+        "title": "S556"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.85698, 33.63189]
+      },
+      "properties": {
+        "vs30": 390.0,
+        "z1p0": 0.0,
+        "z2p5": 2.27,
+        "marker-size": "small",
+        "title": "S591"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.80395, 33.71042]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.31,
+        "z2p5": 1.8,
+        "marker-size": "small",
+        "title": "S593"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.75082, 33.78893]
+      },
+      "properties": {
+        "vs30": 515.0,
+        "z1p0": 0.0,
+        "z2p5": 1.54,
+        "marker-size": "small",
+        "title": "S595"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.64428, 33.94589]
+      },
+      "properties": {
+        "vs30": 387.0,
+        "z1p0": 0.19,
+        "z2p5": 0.95,
+        "marker-size": "small",
+        "title": "S599"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.59086, 34.02433]
+      },
+      "properties": {
+        "vs30": 354.0,
+        "z1p0": 0.2,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S601"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.48374, 34.18115]
+      },
+      "properties": {
+        "vs30": 748.0,
+        "z1p0": 0.02,
+        "z2p5": 1.07,
+        "marker-size": "small",
+        "title": "S605"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.44314, 34.05816]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.17,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S644"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.38947, 34.13652]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.16,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S646"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.36259, 34.17569]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.31,
+        "z2p5": 1.22,
+        "marker-size": "small",
+        "title": "S647"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.2953, 34.09181]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.29,
+        "z2p5": 1.45,
+        "marker-size": "small",
+        "title": "S688"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.2684, 34.13096]
+      },
+      "properties": {
+        "vs30": 280.0,
+        "z1p0": 0.2,
+        "z2p5": 0.31,
+        "marker-size": "small",
+        "title": "S689"
+      }
+    }
+  ]
+}
diff --git a/etc/nshm/sites-cybershake.csv b/etc/nshm/sites-cybershake.csv
new file mode 100644
index 000000000..ced2ec4ef
--- /dev/null
+++ b/etc/nshm/sites-cybershake.csv
@@ -0,0 +1,64 @@
+name,                              lon,      lat
+CCP,                        -118.41302, 34.05489
+COO,                        -118.21639, 33.89604
+LADT,                       -118.25713, 34.05204
+LAPD,                       -118.12500, 34.55700
+P22,                        -118.56609, 34.18277
+PAS,                        -118.17119, 34.14843
+S429,                       -118.23333, 33.80858
+S603,                       -117.53735, 34.10275
+S684,                       -117.40266, 33.93515
+S758,                       -117.53532, 33.37562
+SBSM,                       -117.29201, 34.06499
+SMCA,                       -118.48939, 34.00909
+STNI,                       -118.17881, 33.93088
+WNGC,                       -118.06530, 34.04182
+S344,                       -118.39576, 33.93587
+S345,                       -118.36942, 33.97525
+S346,                       -118.34305, 34.01462
+S347,                       -118.31666, 34.05399
+S348,                       -118.29024, 34.09336
+S349,                       -118.26380, 34.13272
+S351,                       -118.21085, 34.21142
+S353,                       -118.15780, 34.29010
+S383,                       -118.38029, 33.77382
+S385,                       -118.32766, 33.85257
+S387,                       -118.27493, 33.93130
+S388,                       -118.24853, 33.97065
+S389,                       -118.22211, 34.01000
+S391,                       -118.16919, 34.08869
+S393,                       -118.11618, 34.16735
+S395,                       -118.06307, 34.24599
+S470,                       -118.13910, 33.76452
+S472,                       -118.08625, 33.84317
+S474,                       -118.03331, 33.92180
+S476,                       -117.98027, 34.00041
+S478,                       -117.92713, 34.07899
+S480,                       -117.87389, 34.15755
+S518,                       -117.83275, 34.03470
+S520,                       -117.77945, 34.11322
+S311,                       -118.35851, 34.17667
+S275,                       -118.45331, 34.22055
+P3,                         -118.42409, 34.24939
+S238,                       -118.54821, 34.26435
+P2,                         -118.46393, 34.28562
+P21,                        -118.58717, 34.20995
+S510,                       -118.04497, 33.72038
+S512,                       -117.99206, 33.79899
+S514,                       -117.93905, 33.87758
+S516,                       -117.88595, 33.95615
+S550,                       -117.95093, 33.67617
+S552,                       -117.89795, 33.75474
+S554,                       -117.84489, 33.83329
+S556,                       -117.79173, 33.91182
+S591,                       -117.85698, 33.63189
+S593,                       -117.80395, 33.71042
+S595,                       -117.75082, 33.78893
+S599,                       -117.64428, 33.94589
+S601,                       -117.59086, 34.02433
+S605,                       -117.48374, 34.18115
+S644,                       -117.44314, 34.05816
+S646,                       -117.38947, 34.13652
+S647,                       -117.36259, 34.17569
+S688,                       -117.29530, 34.09181
+S689,                       -117.26840, 34.13096
diff --git a/etc/nshm/sites-cybershake.geojson b/etc/nshm/sites-cybershake.geojson
new file mode 100644
index 000000000..022c0fa21
--- /dev/null
+++ b/etc/nshm/sites-cybershake.geojson
@@ -0,0 +1,698 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.41302, 34.05489]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "CCP"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.21639, 33.89604]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "COO"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.25713, 34.05204]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "LADT"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.125, 34.557]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "LAPD"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.56609, 34.18277]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "P22"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.17119, 34.14843]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "PAS"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.23333, 33.80858]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S429"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.53735, 34.10275]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S603"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.40266, 33.93515]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S684"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.53532, 33.37562]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S758"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.29201, 34.06499]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "SBSM"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.48939, 34.00909]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "SMCA"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.17881, 33.93088]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "STNI"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.0653, 34.04182]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "WNGC"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.39576, 33.93587]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S344"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.36942, 33.97525]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S345"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.34305, 34.01462]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S346"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.31666, 34.05399]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S347"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.29024, 34.09336]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S348"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.2638, 34.13272]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S349"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.21085, 34.21142]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S351"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.1578, 34.2901]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S353"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.38029, 33.77382]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S383"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.32766, 33.85257]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S385"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.27493, 33.9313]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S387"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.24853, 33.97065]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S388"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.22211, 34.01]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S389"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.16919, 34.08869]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S391"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.11618, 34.16735]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S393"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.06307, 34.24599]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S395"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.1391, 33.76452]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S470"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.08625, 33.84317]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S472"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.03331, 33.9218]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S474"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.98027, 34.00041]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S476"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.92713, 34.07899]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S478"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.87389, 34.15755]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S480"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.83275, 34.0347]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S518"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.77945, 34.11322]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S520"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.35851, 34.17667]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S311"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.45331, 34.22055]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S275"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.42409, 34.24939]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "P3"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.54821, 34.26435]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S238"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.46393, 34.28563]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "P2"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.58717, 34.20995]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "P21"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-118.04497, 33.72038]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S510"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.99206, 33.79899]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S512"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.93905, 33.87758]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S514"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.88595, 33.95615]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S516"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.95093, 33.67617]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S550"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.89795, 33.75474]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S552"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.84489, 33.83329]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S554"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.79173, 33.91182]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S556"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.85698, 33.63189]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S591"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.80395, 33.71042]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S593"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.75082, 33.78893]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S595"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.64428, 33.94589]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S599"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.59086, 34.02433]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S601"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.48374, 34.18115]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S605"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.44314, 34.05816]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S644"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.38947, 34.13652]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S646"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.36259, 34.17569]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S647"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.2953, 34.09181]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S688"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-117.2684, 34.13096]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "S689"
+      }
+    }
+  ]
+}
diff --git a/etc/nshm/sites-nureg.csv b/etc/nshm/sites-nureg.csv
new file mode 100644
index 000000000..1849c8944
--- /dev/null
+++ b/etc/nshm/sites-nureg.csv
@@ -0,0 +1,8 @@
+name,                            lon,    lat
+Central IL,                  -90.000, 40.000
+Chattanooga TN,              -85.255, 35.064
+Houston TX,                  -95.363, 29.760
+Jackson MS,                  -90.187, 32.312
+Manchester NH,               -71.463, 42.991
+Savannah GA,                 -81.097, 32.082
+Topeka KS,                   -95.682, 39.047
diff --git a/etc/nshm/sites-nureg.geojson b/etc/nshm/sites-nureg.geojson
new file mode 100644
index 000000000..59d53c2fb
--- /dev/null
+++ b/etc/nshm/sites-nureg.geojson
@@ -0,0 +1,82 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-90.0, 40.0]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "Central IL"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-85.255, 35.064]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "Chattanooga TN"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-95.363, 29.76]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "Houston TX"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-90.187, 32.312]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "Jackson MS"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-71.463, 42.991]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "Manchester NH"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-81.097, 32.082]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "Savannah GA"
+      }
+    },
+    {
+      "type": "Feature",
+      "geometry": {
+        "type": "Point",
+        "coordinates": [-95.682, 39.047]
+      },
+      "properties": {
+        "marker-size": "small",
+        "title": "Topeka KS"
+      }
+    }
+  ]
+}
-- 
GitLab