aboutsummaryrefslogtreecommitdiff
path: root/bigtop-data-generators
diff options
context:
space:
mode:
authorRJ Nowling <rnowling@gmail.com>2015-09-15 09:46:46 -0500
committerRJ Nowling <rnowling@gmail.com>2015-09-15 09:46:46 -0500
commitad88e7414540d6631854f1a731a3c1c029a3c965 (patch)
tree82d233e3884b24372a6b341c79577690613fe199 /bigtop-data-generators
parentbe796c98323573c7a3dff84a0a5115490c966a0f (diff)
BIGTOP-1991. Add BigTop Weatherman
Diffstat (limited to 'bigtop-data-generators')
-rw-r--r--bigtop-data-generators/README.md5
-rw-r--r--bigtop-data-generators/bigpetstore-data-generator/README.md34
-rw-r--r--bigtop-data-generators/bigpetstore-data-generator/build.gradle60
-rw-r--r--bigtop-data-generators/bigtop-location-data/README.md26
-rw-r--r--bigtop-data-generators/bigtop-location-data/build.gradle49
-rw-r--r--bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/Location.java136
-rw-r--r--bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationConstants.java10
-rw-r--r--bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationReader.java282
-rw-r--r--bigtop-data-generators/bigtop-name-generator/README.md26
-rw-r--r--bigtop-data-generators/bigtop-name-generator/build.gradle50
-rw-r--r--bigtop-data-generators/bigtop-samplers/README.md26
-rw-r--r--bigtop-data-generators/bigtop-samplers/build.gradle51
-rw-r--r--bigtop-data-generators/bigtop-samplers/src/main/java/org/apache/bigtop/datagenerators/samplers/samplers/GammaSampler.java34
-rw-r--r--bigtop-data-generators/bigtop-weatherman/README.md36
-rw-r--r--bigtop-data-generators/bigtop-weatherman/build.gradle37
-rw-r--r--bigtop-data-generators/bigtop-weatherman/settings.gradle16
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherGenerator.java67
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherRecord.java77
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/Driver.java194
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/PrecipitationSampler.java51
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/TemperatureSampler.java71
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherConstants.java53
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherParametersReader.java80
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherRecordBuilder.java163
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSampler.java50
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSamplerBuilder.java80
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherStationParameters.java110
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WindSpeedSampler.java74
-rw-r--r--bigtop-data-generators/bigtop-weatherman/src/main/resources/input_data/weather_parameters.csv897
-rw-r--r--bigtop-data-generators/build.gradle44
-rw-r--r--bigtop-data-generators/settings.gradle2
31 files changed, 2405 insertions, 486 deletions
diff --git a/bigtop-data-generators/README.md b/bigtop-data-generators/README.md
index 4765662a..e6fd5c71 100644
--- a/bigtop-data-generators/README.md
+++ b/bigtop-data-generators/README.md
@@ -24,6 +24,7 @@ The following data generators are included so far:
* BigPetStore -- generates customers, stores, products, and transactions for a fictional chain of pet stores
* BigTop Name Generator -- generates names by sampling from U.S. Census data
+* BigTop Weatherman -- weather simulator
We have the following libraries:
@@ -45,3 +46,7 @@ Jar files can be installed to a local Maven cache to simplify integration by ext
$ gradle install
You can then define the dependencies via Maven.
+
+Running
+-------
+Please see READMEs in individual project directories.
diff --git a/bigtop-data-generators/bigpetstore-data-generator/README.md b/bigtop-data-generators/bigpetstore-data-generator/README.md
index 1acfe907..9e65db6b 100644
--- a/bigtop-data-generators/bigpetstore-data-generator/README.md
+++ b/bigtop-data-generators/bigpetstore-data-generator/README.md
@@ -17,35 +17,11 @@
BigPetStore Data Generator
==========================
-BigPetStore ...
+Library for simulating customer purchasing behavior at a fictional chain of petstores for the purpose of generating synthetic transaction data.
-Data Generator ...
-
-=======
Building and Testing
--------------------
-We use the Gradle build system for the BPS data generator so you'll need
-to install Gradle on your system.
-Once that's done, you can use gradle to run the included unit tests
-and build the data generator jar.
-
-To build:
-
- $ gradle build
-
-This will create several directories and a jar located at:
-
- build/libs/bigpetstore-data-generator-0.9.0-SNAPSHOT.jar
-
-Building automatically runs the included unit tests. If you would prefer
-to just run the unit tests, you can do so by:
-
- $ gradle test
-
-
-To clean up the build files, run:
-
- $ gradle clean
+The data generator is part of a Gradle multiproject build. Please see the README in the parent directory for build and test instructions.
Running the Data Generator
@@ -55,12 +31,12 @@ Hadoop or Spark applications) or using a command-line interface.
The data generator CLI requires several parameters. To get
descriptions:
- $ java -jar build/libs/bigpetstore-data-generator-0.9.0-SNAPSHOT.jar
+ $ java -jar build/libs/bigpetstore-data-generator-1.1.0-SNAPSHOT.jar
Here is an example for generating 10 stores, 1000 customers, 100 purchasing models,
and a year of transactions:
- $ java -jar build/libs/bigpetstore-data-generator-0.9.0-SNAPSHOT.jar generatedData/ 10 1000 100 365.0
+ $ java -jar build/libs/bigpetstore-data-generator-1.1.0-SNAPSHOT.jar generatedData/ 10 1000 100 365.0
Groovy Drivers for Scripting
@@ -75,5 +51,5 @@ To use Groovy scripts, you will need to have Groovy installed on your system. B
data generator as instructed above. Then run the scripts in the `groovy_example_drivers`
directory as so:
- $ groovy -classpath ../build/libs/bigpetstore-data-generator-0.9.0-SNAPSHOT.jar MonteCarloExponentialSamplingExample.groovy
+ $ groovy -classpath ../build/libs/bigpetstore-data-generator-1.1.0-SNAPSHOT.jar MonteCarloExponentialSamplingExample.groovy
diff --git a/bigtop-data-generators/bigpetstore-data-generator/build.gradle b/bigtop-data-generators/bigpetstore-data-generator/build.gradle
index 97875120..2d5b4cd2 100644
--- a/bigtop-data-generators/bigpetstore-data-generator/build.gradle
+++ b/bigtop-data-generators/bigpetstore-data-generator/build.gradle
@@ -13,55 +13,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-apply plugin: 'eclipse'
-apply plugin: 'groovy'
-apply plugin: 'java'
-apply plugin: 'maven'
-group = 'org.apache.bigtop'
-version = '1.1.0-SNAPSHOT'
jar {
-
- from {
- configurations.runtime.collect {
- it.isDirectory() ? it : zipTree(it)
- }
- }
-
- manifest {
- attributes 'Title': 'BigPetStore Data Generator', 'Version': version
- attributes 'Main-Class': 'org.apache.bigtop.datagenerators.bigpetstore.cli.Driver'
+ from {
+ configurations.runtime.collect {
+ it.isDirectory() ? it : zipTree(it)
}
-}
-
-repositories {
- mavenLocal()
- mavenCentral()
-}
-
-test {
- // show standard out and error on console
- testLogging.showStandardStreams = true
-
- // listen to events in the test execution lifecycle
- beforeTest { descriptor ->
- logger.lifecycle("Running test: " + descriptor)
- }
-
- // listen to standard out and standard error of the test JVM(s)
- onOutput { descriptor, event ->
- logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
- }
+ }
+ manifest {
+ attributes 'Title': 'BigPetStore Data Generator', 'Version': version
+ attributes 'Main-Class': 'org.apache.bigtop.datagenerators.bigpetstore.cli.Driver'
+ }
}
dependencies {
- compile 'com.google.guava:guava:18.0'
- compile 'com.google.code.gson:gson:2.3'
- compile 'org.apache.commons:commons-lang3:3.4'
- compile project(":bigtop-samplers")
- compile project(":bigtop-name-generator")
- compile project(":bigtop-location-data")
-
- testCompile 'junit:junit:4.+'
+ compile 'com.google.guava:guava:18.0'
+ compile 'com.google.code.gson:gson:2.3'
+ compile 'org.apache.commons:commons-lang3:3.4'
+ compile project(":bigtop-samplers")
+ compile project(":bigtop-name-generator")
+ compile project(":bigtop-location-data")
+
+ testCompile 'junit:junit:4.+'
}
diff --git a/bigtop-data-generators/bigtop-location-data/README.md b/bigtop-data-generators/bigtop-location-data/README.md
index 9aff06f9..b61eeb03 100644
--- a/bigtop-data-generators/bigtop-location-data/README.md
+++ b/bigtop-data-generators/bigtop-location-data/README.md
@@ -23,28 +23,4 @@ data model.
Building and Testing
--------------------
-We use the Gradle build system for the BPS data generator so you'll need
-to install Gradle on your system.
-Once that's done, you can use gradle to run the included unit tests
-and build the data generator jar.
-
-To build:
-
- $ gradle build
-
-This will create several directories and a jar located at:
-
- build/libs/bigtop-location-data-1.1.0-SNAPSHOT.jar
-
-Building automatically runs the included unit tests. If you would prefer
-to just run the unit tests, you can do so by:
-
- $ gradle test
-
-To clean up the build files, run:
-
- $ gradle clean
-
-To install a jar into your local maven repository:
-
- $ gradle install
+This project is part of a Gradle multi-project build -- please see the parent directory for build instructions.
diff --git a/bigtop-data-generators/bigtop-location-data/build.gradle b/bigtop-data-generators/bigtop-location-data/build.gradle
index 9eb91e39..bbced98f 100644
--- a/bigtop-data-generators/bigtop-location-data/build.gradle
+++ b/bigtop-data-generators/bigtop-location-data/build.gradle
@@ -13,51 +13,22 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-apply plugin: 'eclipse'
-apply plugin: 'groovy'
-apply plugin: 'java'
-apply plugin: 'maven'
-group = 'org.apache.bigtop'
-version = '1.1.0-SNAPSHOT'
jar {
-
- from {
- configurations.runtime.collect {
- it.isDirectory() ? it : zipTree(it)
- }
- }
-
- manifest {
- attributes 'Title': 'BigTop Samplers', 'Version': version
+ from {
+ configurations.runtime.collect {
+ it.isDirectory() ? it : zipTree(it)
}
-}
-
-repositories {
- mavenLocal()
- mavenCentral()
-}
-
-test {
- // show standard out and error on console
- testLogging.showStandardStreams = true
-
- // listen to events in the test execution lifecycle
- beforeTest { descriptor ->
- logger.lifecycle("Running test: " + descriptor)
- }
-
- // listen to standard out and standard error of the test JVM(s)
- onOutput { descriptor, event ->
- logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
- }
+ }
+ manifest {
+ attributes 'Title': 'BigTop Samplers', 'Version': version
+ }
}
dependencies {
- compile 'com.google.guava:guava:18.0'
-
- compile 'org.apache.commons:commons-lang3:3.4'
+ compile 'com.google.guava:guava:18.0'
+ compile 'org.apache.commons:commons-lang3:3.4'
- testCompile 'junit:junit:4.+'
+ testCompile 'junit:junit:4.+'
}
diff --git a/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/Location.java b/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/Location.java
index 62afc0a8..58f6cdf0 100644
--- a/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/Location.java
+++ b/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/Location.java
@@ -19,72 +19,72 @@ import java.io.Serializable;
import org.apache.commons.lang3.tuple.Pair;
-public class Location implements Serializable
-{
- private static final long serialVersionUID = 1769986686070108470L;
-
- final String zipcode;
- final Pair<Double, Double> coordinates;
- final String city;
- final String state;
- final double medianHouseholdIncome;
- final long population;
-
- public Location(String zipcode, Pair<Double, Double> coordinates,
- String city, String state, double medianHouseholdIncome, long population)
- {
- this.city = city;
- this.state = state;
- this.zipcode = zipcode;
- this.coordinates = coordinates;
- this.medianHouseholdIncome = medianHouseholdIncome;
- this.population = population;
- }
-
- public String getZipcode()
- {
- return zipcode;
- }
-
- public Pair<Double, Double> getCoordinates()
- {
- return coordinates;
- }
-
- public double getMedianHouseholdIncome()
- {
- return medianHouseholdIncome;
- }
-
- public long getPopulation()
- {
- return population;
- }
-
- public double distance(Location other)
- {
- if(other.getZipcode().equals(zipcode))
- return 0.0;
-
- Pair<Double, Double> otherCoords = other.getCoordinates();
-
- double dist = Math.sin(Math.toRadians(coordinates.getLeft())) *
- Math.sin(Math.toRadians(otherCoords.getLeft())) +
- Math.cos(Math.toRadians(coordinates.getLeft())) *
- Math.cos(Math.toRadians(otherCoords.getLeft())) *
- Math.cos(Math.toRadians(coordinates.getRight() - otherCoords.getRight()));
- dist = Math.toDegrees(Math.acos(dist)) * 69.09;
-
- return dist;
- }
-
- public String getCity()
- {
- return city;
- }
-
- public String getState()
- {
- return state;
- }
+public class Location implements Serializable {
+ private static final long serialVersionUID = 1769986686070108470L;
+
+ final String zipcode;
+ final Pair<Double, Double> coordinates;
+ final String city;
+ final String state;
+ final double medianHouseholdIncome;
+ final long population;
+
+ public Location(String zipcode, Pair<Double, Double> coordinates, String city,
+ String state, double medianHouseholdIncome, long population) {
+ this.city = city;
+ this.state = state;
+ this.zipcode = zipcode;
+ this.coordinates = coordinates;
+ this.medianHouseholdIncome = medianHouseholdIncome;
+ this.population = population;
+ }
+
+ public String getZipcode() {
+ return zipcode;
+ }
+
+ public Pair<Double, Double> getCoordinates() {
+ return coordinates;
+ }
+
+ public double getMedianHouseholdIncome() {
+ return medianHouseholdIncome;
+ }
+
+ public long getPopulation() {
+ return population;
+ }
+
+ public double distance(Pair<Double, Double> otherCoords) {
+ if (Math.abs(coordinates.getLeft() - otherCoords.getLeft()) < 1e-5
+ || Math.abs(coordinates.getRight() - otherCoords.getRight()) < 1e-5)
+ return 0.0;
+
+ double dist = Math.sin(Math.toRadians(coordinates.getLeft()))
+ * Math.sin(Math.toRadians(otherCoords.getLeft()))
+ + Math.cos(Math.toRadians(coordinates.getLeft()))
+ * Math.cos(Math.toRadians(otherCoords.getLeft()))
+ * Math.cos(Math.toRadians(
+ coordinates.getRight() - otherCoords.getRight()));
+ dist = Math.toDegrees(Math.acos(dist)) * 69.09;
+
+ return dist;
+ }
+
+ public double distance(Location other) {
+ if (other.getZipcode().equals(zipcode))
+ return 0.0;
+
+ Pair<Double, Double> otherCoords = other.getCoordinates();
+
+ return distance(otherCoords);
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public String getState() {
+ return state;
+ }
}
diff --git a/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationConstants.java b/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationConstants.java
index 4140bfd4..e6ea242e 100644
--- a/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationConstants.java
+++ b/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationConstants.java
@@ -17,9 +17,9 @@ package org.apache.bigtop.datagenerators.locations;
import java.io.File;
-public class LocationConstants
-{
- public static final File COORDINATES_FILE = new File("zips.csv");
- public static final File INCOMES_FILE = new File("ACS_12_5YR_S1903/ACS_12_5YR_S1903_with_ann.csv");
- public static final File POPULATION_FILE = new File("population_data.csv");
+public class LocationConstants {
+ public static final File COORDINATES_FILE = new File("zips.csv");
+ public static final File INCOMES_FILE = new File(
+ "ACS_12_5YR_S1903/ACS_12_5YR_S1903_with_ann.csv");
+ public static final File POPULATION_FILE = new File("population_data.csv");
}
diff --git a/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationReader.java b/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationReader.java
index 5be4d59d..6d5b29ec 100644
--- a/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationReader.java
+++ b/bigtop-data-generators/bigtop-location-data/src/main/java/org/apache/bigtop/datagenerators/locations/LocationReader.java
@@ -32,151 +32,141 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
-public class LocationReader
-{
- private static class ZipcodeLocationRecord
- {
- public final Pair<Double, Double> coordinates;
- public final String state;
- public final String city;
-
- public ZipcodeLocationRecord(Pair<Double, Double> coordinates,
- String city, String state)
- {
- this.coordinates = coordinates;
- this.city = city;
- this.state = state;
- }
- }
-
- private InputStream getResource(File filename)
- {
- InputStream stream = getClass().getResourceAsStream("/input_data/" + filename);
- return new BufferedInputStream(stream);
- }
-
- private ImmutableMap<String, Double> readIncomeData(InputStream path) throws FileNotFoundException
- {
- Scanner scanner = new Scanner(path);
-
- // skip headers
- scanner.nextLine();
- scanner.nextLine();
-
- Map<String, Double> entries = Maps.newHashMap();
- while(scanner.hasNextLine())
- {
- String line = scanner.nextLine().trim();
- String[] cols = line.split(",");
- // zipcodes are in the form "ZCTA5 XXXXX"
- String zipcode = cols[2].split(" ")[1].trim();
- try
- {
- double medianHouseholdIncome = Integer.parseInt(cols[5].trim());
- entries.put(zipcode, medianHouseholdIncome);
- }
- catch(NumberFormatException e)
- {
-
- }
- }
-
- scanner.close();
-
- return ImmutableMap.copyOf(entries);
- }
-
- private ImmutableMap<String, Long> readPopulationData(InputStream path) throws FileNotFoundException
- {
- Scanner scanner = new Scanner(path);
-
- // skip header
- scanner.nextLine();
-
- Map<String, Long> entries = Maps.newHashMap();
- while(scanner.hasNextLine())
- {
- String line = scanner.nextLine().trim();
-
- if(line.length() == 0)
- continue;
-
- String[] cols = line.split(",");
-
- String zipcode = cols[0].trim();
- Long population = Long.parseLong(cols[1].trim());
-
- if(entries.containsKey(zipcode))
- {
- entries.put(zipcode, Math.max(entries.get(zipcode), population));
- }
- else
- {
- entries.put(zipcode, population);
- }
- }
-
- scanner.close();
-
- return ImmutableMap.copyOf(entries);
- }
-
- private ImmutableMap<String, ZipcodeLocationRecord> readCoordinates(InputStream path) throws FileNotFoundException
- {
- Scanner scanner = new Scanner(path);
-
- // skip header
- scanner.nextLine();
-
- Map<String, ZipcodeLocationRecord> entries = Maps.newHashMap();
- while(scanner.hasNextLine())
- {
- String line = scanner.nextLine().trim();
-
- String[] cols = line.split(", ");
-
- // remove quote marks
- String zipcode = cols[0].substring(1, cols[0].length() - 1);
- String state = cols[1].substring(1, cols[1].length() - 1);
- Double latitude = Double.parseDouble(cols[2].substring(1, cols[2].length() - 1));
- Double longitude = Double.parseDouble(cols[3].substring(1, cols[3].length() - 1));
- String city = cols[4].substring(1, cols[4].length() - 1);
-
- Pair<Double, Double> coords = Pair.of(latitude, longitude);
-
- ZipcodeLocationRecord record = new ZipcodeLocationRecord(coords, city, state);
-
- entries.put(zipcode, record);
- }
-
- scanner.close();
-
- return ImmutableMap.copyOf(entries);
- }
-
- public ImmutableList<Location> readData() throws FileNotFoundException
- {
-
- ImmutableMap<String, Double> incomes = readIncomeData(getResource(LocationConstants.INCOMES_FILE));
- ImmutableMap<String, Long> populations = readPopulationData(getResource(LocationConstants.POPULATION_FILE));
- ImmutableMap<String, ZipcodeLocationRecord> coordinates = readCoordinates(getResource(LocationConstants.COORDINATES_FILE));
-
- Set<String> zipcodeSubset = new HashSet<String>(incomes.keySet());
- zipcodeSubset.retainAll(populations.keySet());
- zipcodeSubset.retainAll(coordinates.keySet());
-
- List<Location> table = new Vector<Location>();
- for(String zipcode : zipcodeSubset)
- {
- Location record = new Location(zipcode,
- coordinates.get(zipcode).coordinates,
- coordinates.get(zipcode).city,
- coordinates.get(zipcode).state,
- incomes.get(zipcode),
- populations.get(zipcode));
- table.add(record);
- }
+public class LocationReader {
+ private static class ZipcodeLocationRecord {
+ public final Pair<Double, Double> coordinates;
+ public final String state;
+ public final String city;
+
+ public ZipcodeLocationRecord(Pair<Double, Double> coordinates, String city,
+ String state) {
+ this.coordinates = coordinates;
+ this.city = city;
+ this.state = state;
+ }
+ }
- return ImmutableList.copyOf(table);
- }
+ private InputStream getResource(File filename) {
+ InputStream stream = getClass()
+ .getResourceAsStream("/input_data/" + filename);
+ return new BufferedInputStream(stream);
+ }
+
+ private ImmutableMap<String, Double> readIncomeData(InputStream path)
+ throws FileNotFoundException {
+ Scanner scanner = new Scanner(path);
+
+ // skip headers
+ scanner.nextLine();
+ scanner.nextLine();
+
+ Map<String, Double> entries = Maps.newHashMap();
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine().trim();
+ String[] cols = line.split(",");
+ // zipcodes are in the form "ZCTA5 XXXXX"
+ String zipcode = cols[2].split(" ")[1].trim();
+ try {
+ double medianHouseholdIncome = Integer.parseInt(cols[5].trim());
+ entries.put(zipcode, medianHouseholdIncome);
+ } catch (NumberFormatException e) {
+
+ }
+ }
+
+ scanner.close();
+
+ return ImmutableMap.copyOf(entries);
+ }
+
+ private ImmutableMap<String, Long> readPopulationData(InputStream path)
+ throws FileNotFoundException {
+ Scanner scanner = new Scanner(path);
+
+ // skip header
+ scanner.nextLine();
+
+ Map<String, Long> entries = Maps.newHashMap();
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine().trim();
+
+ if (line.length() == 0)
+ continue;
+
+ String[] cols = line.split(",");
+
+ String zipcode = cols[0].trim();
+ Long population = Long.parseLong(cols[1].trim());
+
+ if (entries.containsKey(zipcode)) {
+ entries.put(zipcode, Math.max(entries.get(zipcode), population));
+ } else {
+ entries.put(zipcode, population);
+ }
+ }
+
+ scanner.close();
+
+ return ImmutableMap.copyOf(entries);
+ }
+
+ private ImmutableMap<String, ZipcodeLocationRecord> readCoordinates(
+ InputStream path) throws FileNotFoundException {
+ Scanner scanner = new Scanner(path);
+
+ // skip header
+ scanner.nextLine();
+
+ Map<String, ZipcodeLocationRecord> entries = Maps.newHashMap();
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine().trim();
+
+ String[] cols = line.split(", ");
+
+ // remove quote marks
+ String zipcode = cols[0].substring(1, cols[0].length() - 1);
+ String state = cols[1].substring(1, cols[1].length() - 1);
+ Double latitude = Double
+ .parseDouble(cols[2].substring(1, cols[2].length() - 1));
+ Double longitude = Double
+ .parseDouble(cols[3].substring(1, cols[3].length() - 1));
+ String city = cols[4].substring(1, cols[4].length() - 1);
+
+ Pair<Double, Double> coords = Pair.of(latitude, longitude);
+
+ ZipcodeLocationRecord record = new ZipcodeLocationRecord(coords, city,
+ state);
+
+ entries.put(zipcode, record);
+ }
+
+ scanner.close();
+
+ return ImmutableMap.copyOf(entries);
+ }
+
+ public ImmutableList<Location> readData() throws FileNotFoundException {
+
+ ImmutableMap<String, Double> incomes = readIncomeData(
+ getResource(LocationConstants.INCOMES_FILE));
+ ImmutableMap<String, Long> populations = readPopulationData(
+ getResource(LocationConstants.POPULATION_FILE));
+ ImmutableMap<String, ZipcodeLocationRecord> coordinates = readCoordinates(
+ getResource(LocationConstants.COORDINATES_FILE));
+
+ Set<String> zipcodeSubset = new HashSet<String>(incomes.keySet());
+ zipcodeSubset.retainAll(populations.keySet());
+ zipcodeSubset.retainAll(coordinates.keySet());
+
+ List<Location> table = new Vector<Location>();
+ for (String zipcode : zipcodeSubset) {
+ Location record = new Location(zipcode,
+ coordinates.get(zipcode).coordinates,
+ coordinates.get(zipcode).city, coordinates.get(zipcode).state,
+ incomes.get(zipcode), populations.get(zipcode));
+ table.add(record);
+ }
+
+ return ImmutableList.copyOf(table);
+ }
}
diff --git a/bigtop-data-generators/bigtop-name-generator/README.md b/bigtop-data-generators/bigtop-name-generator/README.md
index aa204b2b..93e23a5d 100644
--- a/bigtop-data-generators/bigtop-name-generator/README.md
+++ b/bigtop-data-generators/bigtop-name-generator/README.md
@@ -24,28 +24,4 @@ their frequencies according to the U.S. Census.
Building and Testing
--------------------
-We use the Gradle build system for the BPS data generator so you'll need
-to install Gradle on your system.
-Once that's done, you can use gradle to run the included unit tests
-and build the data generator jar.
-
-To build:
-
- $ gradle build
-
-This will create several directories and a jar located at:
-
- build/libs/bigtop-name-generator-1.1.0-SNAPSHOT.jar
-
-Building automatically runs the included unit tests. If you would prefer
-to just run the unit tests, you can do so by:
-
- $ gradle test
-
-To clean up the build files, run:
-
- $ gradle clean
-
-To install a jar into your local maven repository:
-
- $ gradle install
+This project is part of a Gradle multiproject build. Please see the README in the parent directory for build instructions.
diff --git a/bigtop-data-generators/bigtop-name-generator/build.gradle b/bigtop-data-generators/bigtop-name-generator/build.gradle
index 0bff824f..133dc931 100644
--- a/bigtop-data-generators/bigtop-name-generator/build.gradle
+++ b/bigtop-data-generators/bigtop-name-generator/build.gradle
@@ -13,51 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-apply plugin: 'eclipse'
-apply plugin: 'groovy'
-apply plugin: 'java'
-apply plugin: 'maven'
-group = 'org.apache.bigtop'
-version = '1.1.0-SNAPSHOT'
jar {
-
- from {
- configurations.runtime.collect {
- it.isDirectory() ? it : zipTree(it)
- }
- }
-
- manifest {
- attributes 'Title': 'BigTop Name Generator', 'Version': version
+ from {
+ configurations.runtime.collect {
+ it.isDirectory() ? it : zipTree(it)
}
-}
-
-repositories {
- mavenLocal()
- mavenCentral()
-}
-
-test {
- // show standard out and error on console
- testLogging.showStandardStreams = true
-
- // listen to events in the test execution lifecycle
- beforeTest { descriptor ->
- logger.lifecycle("Running test: " + descriptor)
- }
-
- // listen to standard out and standard error of the test JVM(s)
- onOutput { descriptor, event ->
- logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
- }
+ }
+ manifest {
+ attributes 'Title': 'BigTop Name Generator', 'Version': version
+ }
}
dependencies {
- compile 'com.google.guava:guava:18.0'
- compile 'org.apache.commons:commons-lang3:3.4'
- compile project(":bigtop-samplers")
+ compile 'com.google.guava:guava:18.0'
+ compile 'org.apache.commons:commons-lang3:3.4'
+ compile project(":bigtop-samplers")
- testCompile 'junit:junit:4.+'
+ testCompile 'junit:junit:4.+'
}
diff --git a/bigtop-data-generators/bigtop-samplers/README.md b/bigtop-data-generators/bigtop-samplers/README.md
index 3a91c1b2..5fb4a558 100644
--- a/bigtop-data-generators/bigtop-samplers/README.md
+++ b/bigtop-data-generators/bigtop-samplers/README.md
@@ -22,28 +22,4 @@ functions, probability mass functions, weight functions and samplers.
Building and Testing
--------------------
-We use the Gradle build system for the BPS data generator so you'll need
-to install Gradle on your system.
-Once that's done, you can use gradle to run the included unit tests
-and build the data generator jar.
-
-To build:
-
- $ gradle build
-
-This will create several directories and a jar located at:
-
- build/libs/bigtop-samplers-0.9.0-SNAPSHOT.jar
-
-Building automatically runs the included unit tests. If you would prefer
-to just run the unit tests, you can do so by:
-
- $ gradle test
-
-To clean up the build files, run:
-
- $ gradle clean
-
-To install a jar into your local maven repository:
-
- $ gradle install
+This project is part of a multiproject Gradle build. Please see the README in the parent directory for instructions on building.
diff --git a/bigtop-data-generators/bigtop-samplers/build.gradle b/bigtop-data-generators/bigtop-samplers/build.gradle
index 84b5fe05..1d9ced0f 100644
--- a/bigtop-data-generators/bigtop-samplers/build.gradle
+++ b/bigtop-data-generators/bigtop-samplers/build.gradle
@@ -13,52 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-apply plugin: 'eclipse'
-apply plugin: 'groovy'
-apply plugin: 'java'
-apply plugin: 'maven'
-group = 'org.apache.bigtop'
-version = '1.1.0-SNAPSHOT'
jar {
-
- from {
- configurations.runtime.collect {
- it.isDirectory() ? it : zipTree(it)
- }
- }
-
- manifest {
- attributes 'Title': 'BigTop Samplers', 'Version': version
+ from {
+ configurations.runtime.collect {
+ it.isDirectory() ? it : zipTree(it)
}
-}
-
-repositories {
- mavenLocal()
- mavenCentral()
-}
-
-test {
- // show standard out and error on console
- testLogging.showStandardStreams = true
-
- // listen to events in the test execution lifecycle
- beforeTest { descriptor ->
- logger.lifecycle("Running test: " + descriptor)
- }
-
- // listen to standard out and standard error of the test JVM(s)
- onOutput { descriptor, event ->
- logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
- }
+ }
+ manifest {
+ attributes 'Title': 'BigTop Samplers', 'Version': version
+ }
}
dependencies {
- compile 'com.google.guava:guava:18.0'
-
- compile 'org.apache.commons:commons-lang3:3.4'
- compile 'org.apache.commons:commons-math3:3.5'
+ compile 'com.google.guava:guava:18.0'
+ compile 'org.apache.commons:commons-lang3:3.4'
+ compile 'org.apache.commons:commons-math3:3.5'
- testCompile 'junit:junit:4.+'
+ testCompile 'junit:junit:4.+'
}
diff --git a/bigtop-data-generators/bigtop-samplers/src/main/java/org/apache/bigtop/datagenerators/samplers/samplers/GammaSampler.java b/bigtop-data-generators/bigtop-samplers/src/main/java/org/apache/bigtop/datagenerators/samplers/samplers/GammaSampler.java
new file mode 100644
index 00000000..fb08b482
--- /dev/null
+++ b/bigtop-data-generators/bigtop-samplers/src/main/java/org/apache/bigtop/datagenerators/samplers/samplers/GammaSampler.java
@@ -0,0 +1,34 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.samplers.samplers;
+
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.commons.math3.distribution.GammaDistribution;
+
+public class GammaSampler implements Sampler<Double> {
+ private final GammaDistribution gamma;
+
+ public GammaSampler(double k, double theta, SeedFactory seedFactory) {
+ gamma = new GammaDistribution(k, theta);
+ gamma.reseedRandomGenerator(seedFactory.getNextSeed());
+ }
+
+ @Override
+ public Double sample() throws Exception {
+ return gamma.sample();
+ }
+
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/README.md b/bigtop-data-generators/bigtop-weatherman/README.md
new file mode 100644
index 00000000..608496c4
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/README.md
@@ -0,0 +1,36 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+BigTop Weatherman
+=================
+
+Library for generating weather on a zipcode-by-zipcode basis.
+
+Building and Testing
+--------------------
+This project is part of a multiproject Gradle build. Please see directions in the parent directory for build instructions.
+
+Running
+-------
+BigTop Weatherman is primarily designed for consumption as a library but it also provides a CLI interface in the jar. The jar can be executed as follows:
+
+ $ java -jar build/libs/bigtop-weatherman-1.1.0-SNAPSHOT.jar outputDir zipcode simulationLength startDate seed
+
+For example, simulating the weather in South Bend, IN 46617:
+
+ $ java -jar build/libs/bigtop-weatherman-1.1.0-SNAPSHOT.jar output/ 46617 365 2014-04-05 1234
+
+will produce a file `output/46617.txt` containing simulated daily temperature, wind chill, wind speed, total precipitation, rainfall, and snowfall readings.
diff --git a/bigtop-data-generators/bigtop-weatherman/build.gradle b/bigtop-data-generators/bigtop-weatherman/build.gradle
new file mode 100644
index 00000000..a2835f7c
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/build.gradle
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+jar {
+ from {
+ configurations.runtime.collect {
+ it.isDirectory() ? it : zipTree(it)
+ }
+ }
+
+ manifest {
+ attributes 'Title': 'BigTop Weatherman', 'Version': version
+ attributes 'Main-Class': 'org.apache.bigtop.datagenerators.weatherman.internal.Driver'
+ }
+}
+
+dependencies {
+ compile 'com.google.guava:guava:18.0'
+ compile 'org.apache.commons:commons-lang3:3.4'
+ compile 'joda-time:joda-time:2.8.2'
+ compile project(':bigtop-samplers')
+ compile project(':bigtop-location-data')
+
+ testCompile 'junit:junit:4.+'
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/settings.gradle b/bigtop-data-generators/bigtop-weatherman/settings.gradle
new file mode 100644
index 00000000..dbc292c8
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/settings.gradle
@@ -0,0 +1,16 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+rootProject.name = "bigtop-weatherman"
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherGenerator.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherGenerator.java
new file mode 100644
index 00000000..0601c147
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherGenerator.java
@@ -0,0 +1,67 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman;
+
+import java.util.List;
+
+import org.apache.bigtop.datagenerators.locations.Location;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import org.apache.bigtop.datagenerators.weatherman.internal.WeatherParametersReader;
+import org.apache.bigtop.datagenerators.weatherman.internal.WeatherSamplerBuilder;
+import org.apache.bigtop.datagenerators.weatherman.internal.WeatherStationParameters;
+import org.joda.time.LocalDate;
+
+/**
+ * Generates daily weather records for a given location.
+ *
+ * @author rnowling
+ *
+ */
+public class WeatherGenerator implements Sampler<WeatherRecord> {
+ private final Sampler<WeatherRecord> weatherSampler;
+
+ /**
+ * Initializes the generator.
+ *
+ * @param startDate
+ * - first day of simulation
+ * @param location
+ * - location to simulate weather for
+ * @param seedFactory
+ * - for initializing seeds
+ * @throws Exception
+ * - if weather parameter data cannot be read
+ */
+ public WeatherGenerator(LocalDate startDate, Location location,
+ SeedFactory seedFactory) throws Exception {
+ List<WeatherStationParameters> parameters = new WeatherParametersReader()
+ .readParameters();
+ WeatherSamplerBuilder builder = new WeatherSamplerBuilder(parameters,
+ location, startDate, seedFactory);
+ weatherSampler = builder.build();
+ }
+
+ /**
+ * Generates a daily WeatherRecord for consecutive days, one day per call.
+ *
+ * @return Weather data for a single day
+ * @throws Exception
+ */
+ public WeatherRecord sample() throws Exception {
+ return weatherSampler.sample();
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherRecord.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherRecord.java
new file mode 100644
index 00000000..04d2eaa1
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/WeatherRecord.java
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman;
+
+import org.joda.time.LocalDate;
+
+/**
+ * Weather data for a single day and location
+ *
+ * @author rnowling
+ *
+ */
+public interface WeatherRecord {
+
+ /**
+ * Day
+ *
+ * @return date
+ */
+ public abstract LocalDate getDate();
+
+ /**
+ * Average daily temperature in units of Fahrenheit
+ *
+ * @return temperature
+ */
+ public abstract double getTemperature();
+
+ /**
+ * Daily total precipitation measured in millimeters
+ *
+ * @return total precipitation
+ */
+ public abstract double getPrecipitation();
+
+ /**
+ * Daily average wind speed in meters per second.
+ *
+ * @return average wind speed
+ */
+ public abstract double getWindSpeed();
+
+ /**
+ * Daily average wind chill in Fahrenheit
+ *
+ * @return average wind chill
+ */
+ public abstract double getWindChill();
+
+ /**
+ * Daily total rainfall in millimeters
+ *
+ * @return total rainfall
+ */
+ public abstract double getRainFall();
+
+ /**
+ * Daily total snowfall in centimeters
+ *
+ * @return total snowfall
+ */
+ public abstract double getSnowFall();
+
+} \ No newline at end of file
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/Driver.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/Driver.java
new file mode 100644
index 00000000..0bd8c41c
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/Driver.java
@@ -0,0 +1,194 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.Writer;
+import java.util.List;
+import java.util.Random;
+
+import org.apache.bigtop.datagenerators.locations.Location;
+import org.apache.bigtop.datagenerators.locations.LocationReader;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.weatherman.WeatherGenerator;
+import org.apache.bigtop.datagenerators.weatherman.WeatherRecord;
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+
+import com.google.common.collect.Lists;
+
+public class Driver {
+ List<Location> locations;
+ Location location;
+ int simulationLength;
+ LocalDate startDate;
+ SeedFactory seedFactory;
+ File outputDir;
+
+ static final int NPARAMS = 5;
+
+ private void printUsage() {
+ String usage = "BigPetStore Data Generator\n" + "\n"
+ + "Usage: java -jar bigpetstore-weather-generator.java outputDir zipcode simulationLength startDate [seed]\n"
+ + "\n" + "outputDir - (string) directory to write files\n"
+ + "zipcode - (string) location zipcode\n"
+ + "simulationLength - (int) number of days to simulate\n"
+ + "startDate - (string) simulation start date in YYYY-MM-DD format\n"
+ + "seed - (long) seed for RNG. If not given, one is randomly generated.\n";
+
+ System.out.println(usage);
+ }
+
+ private Location findLocation(String zipcode) {
+ for (Location location : locations) {
+ if (location.getZipcode().equals(zipcode))
+ return location;
+ }
+
+ return null;
+ }
+
+ /**
+ * Returns local date from string in YYYY-MM-DD format
+ *
+ * @param text
+ * @return
+ */
+ private LocalDate parseDate(String text) {
+ DateTimeFormatter dtFormatter = DateTimeFormat.forPattern("yyyy-MM-dd");
+ DateTime dt = dtFormatter.parseDateTime(text);
+
+ return dt.toLocalDate();
+ }
+
+ public void parseArgs(String[] args) {
+ if (args.length != NPARAMS && args.length != (NPARAMS - 1)) {
+ printUsage();
+ System.exit(1);
+ }
+
+ int i = -1;
+
+ outputDir = new File(args[++i]);
+ if (!outputDir.exists()) {
+ System.err.println("Given path (" + args[i] + ") does not exist.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ if (!outputDir.isDirectory()) {
+ System.err.println("Given path (" + args[i] + ") is not a directory.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ location = findLocation(args[++i]);
+ if (location == null) {
+ System.err.println(
+ "No location found for given zipcode \"" + args[i] + "\"");
+ printUsage();
+ System.exit(1);
+ }
+
+ try {
+ simulationLength = Integer.parseInt(args[++i]);
+ } catch (Exception e) {
+ System.err.println("Unable to parse '" + args[i]
+ + "' as an int for simulationLength.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ try {
+ startDate = parseDate(args[++i]);
+ } catch (Exception e) {
+ System.err.println("Unable to parse '" + args[i]
+ + "'. Expected string in 'YYYY-MM-DD' format.\n");
+ printUsage();
+ System.exit(1);
+ }
+
+ long seed = (new Random()).nextLong();
+ if (args.length == NPARAMS) {
+ try {
+ seed = Long.parseLong(args[++i]);
+ } catch (Exception e) {
+ System.err.println(
+ "Unable to parse '" + args[i] + "' as a long for the seed.\n");
+ printUsage();
+ System.exit(1);
+ }
+ }
+
+ seedFactory = new SeedFactory(seed);
+ }
+
+ private void writeWeather(Location location, List<WeatherRecord> trajectory)
+ throws Exception {
+ File outputFile = new File(outputDir.toString() + File.separator
+ + location.getZipcode() + ".txt");
+ Writer output = new BufferedWriter(new FileWriter(outputFile));
+
+ output.write(
+ "date,city,state,zipcode,temperature,windchill,windspeed,precipitation,rainfall,snowfall\n");
+ for (WeatherRecord weather : trajectory) {
+ String record = weather.getDate() + ",";
+ record += location.getCity() + ",";
+ record += location.getState() + ",";
+ record += location.getZipcode() + ",";
+ record += weather.getTemperature() + ",";
+ record += weather.getWindChill() + ",";
+ record += weather.getWindSpeed() + ",";
+ record += weather.getPrecipitation() + ",";
+ record += weather.getRainFall() + ",";
+ record += weather.getSnowFall() + "\n";
+
+ output.write(record);
+ }
+
+ output.close();
+ }
+
+ public void run(String[] args) throws Exception {
+ locations = new LocationReader().readData();
+
+ parseArgs(args);
+
+ WeatherGenerator generator = new WeatherGenerator(startDate, location,
+ seedFactory);
+
+ LocalDate date = startDate;
+ LocalDate endDate = startDate.plusDays(simulationLength);
+ List<WeatherRecord> trajectory = Lists.newArrayList();
+
+ while (date.isBefore(endDate)) {
+ WeatherRecord weather = generator.sample();
+ trajectory.add(weather);
+ date = weather.getDate();
+ }
+
+ writeWeather(location, trajectory);
+ }
+
+ public static void main(String[] args) throws Exception {
+ Driver driver = new Driver();
+ driver.run(args);
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/PrecipitationSampler.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/PrecipitationSampler.java
new file mode 100644
index 00000000..118e2451
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/PrecipitationSampler.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.ExponentialSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class PrecipitationSampler implements
+ ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> {
+ private final Sampler<Double> precipitationSampler;
+
+ public PrecipitationSampler(double averagePrecipitation,
+ SeedFactory seedFactory) {
+ precipitationSampler = new ExponentialSampler(1.0 / averagePrecipitation,
+ seedFactory);
+ }
+
+ public WeatherRecordBuilder sample(WeatherRecordBuilder record)
+ throws Exception {
+ double temp = record.getTemperature();
+ double precipitation = precipitationSampler.sample();
+ record.setPrecipitation(precipitation);
+
+ double fractionRain = 1.0
+ / (1.0 + Math.exp(-WeatherConstants.PRECIPITATION_A
+ * (temp - WeatherConstants.PRECIPITATION_B)));
+
+ double rainfall = fractionRain * precipitation;
+ double snowfall = WeatherConstants.PRECIPITATION_TO_SNOWFALL
+ * (1.0 - fractionRain) * precipitation;
+ record.setRainFall(rainfall);
+ record.setSnowFall(snowfall);
+
+ return record;
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/TemperatureSampler.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/TemperatureSampler.java
new file mode 100644
index 00000000..b64b6e0e
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/TemperatureSampler.java
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.GaussianSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import org.joda.time.LocalDate;
+
+public class TemperatureSampler implements
+ ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> {
+ final private Sampler<Double> R;
+ final private double average;
+ final private double coeffReal;
+ final private double coeffImag;
+
+ private LocalDate date;
+ private double noise;
+
+ public TemperatureSampler(LocalDate startDate, double tempAverage,
+ double tempRealCoeff, double tempImagCoeff, double tempSigma,
+ SeedFactory seedFactory) {
+ R = new GaussianSampler(0.0, tempSigma, seedFactory);
+
+ this.average = tempAverage;
+ this.coeffReal = tempRealCoeff;
+ this.coeffImag = tempImagCoeff;
+
+ date = startDate;
+ noise = 0.0;
+ }
+
+ public WeatherRecordBuilder sample(WeatherRecordBuilder weatherRecord)
+ throws Exception {
+ double temp = 0.0;
+ while (date.isEqual(weatherRecord.getDate())
+ || date.isBefore(weatherRecord.getDate())) {
+ double dayOfYear = date.getDayOfYear();
+ temp = average
+ + coeffReal * Math.cos(-2.0 * Math.PI * dayOfYear
+ / WeatherConstants.TEMPERATURE_PERIOD)
+ + coeffImag * Math.sin(-2.0 * Math.PI * dayOfYear
+ / WeatherConstants.TEMPERATURE_PERIOD)
+ + noise;
+
+ noise += -1.0 * noise * WeatherConstants.TEMPERATURE_GAMMA
+ * WeatherConstants.WEATHER_TIMESTEP
+ + Math.sqrt(WeatherConstants.WEATHER_TIMESTEP) * R.sample();
+
+ date = date.plusDays(WeatherConstants.WEATHER_TIMESTEP);
+ }
+
+ weatherRecord.setTemperature(temp);
+
+ return weatherRecord;
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherConstants.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherConstants.java
new file mode 100644
index 00000000..83461607
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherConstants.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import java.io.File;
+
+public class WeatherConstants {
+ public static final File WEATHER_PARAMETERS_FILE = new File(
+ "weather_parameters.csv");
+
+ public static final double TEMPERATURE_GAMMA = 0.5; // 2 / day
+ public static final int WEATHER_TIMESTEP = 1; // days
+ public static final double TEMPERATURE_PERIOD = 365.0; // days
+
+ public static final double PRECIPITATION_A = 0.2;
+ public static final double PRECIPITATION_B = 27.0;
+ public static final double PRECIPITATION_TO_SNOWFALL = 10.0;
+
+ public static final double WIND_CHILL_PROBABILITY_A = 0.8;
+ public static final double WIND_CHILL_PROBABILITY_B = 0.5;
+ public static final double WIND_CHILL_PROBABILITY_C = 10.0; // F
+ public static final double WIND_CHILL_PROBABILITY_D = 0.2;
+
+ public static final double WIND_SPEED_PROBABILITY_A = -0.5;
+ public static final double WIND_SPEED_PROBABILITY_B = 0.8;
+ public static final double WIND_SPEED_PROBABILITY_C = 17.5; // mph
+ public static final double WIND_SPEED_PROBABILITY_D = 1.0;
+
+ public static final double SNOWFALL_PROBABILITY_A = -0.8;
+ public static final double SNOWFALL_PROBABILITY_B = 10.0;
+ public static final double SNOWFALL_PROBABILITY_C = 0.75; // in
+ public static final double SNOWFALL_PROBABILITY_D = 1.0;
+
+ public static final double RAINFALL_PROBABILITY_A = -0.6;
+ public static final double RAINFALL_PROBABILITY_B = 7.5;
+ public static final double RAINFALL_PROBABILITY_C = 0.75; // in
+ public static final double RAINFALL_PROBABILITY_D = 1.0;
+
+ public static final double M_PER_S_TO_MPH = 2.23694;
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherParametersReader.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherParametersReader.java
new file mode 100644
index 00000000..e8097d66
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherParametersReader.java
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Scanner;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import com.google.common.collect.Lists;
+
+public class WeatherParametersReader {
+ private InputStream getResource(File filename) throws Exception {
+ InputStream stream = getClass()
+ .getResourceAsStream("/input_data/" + filename);
+ return new BufferedInputStream(stream);
+ }
+
+ private WeatherStationParameters parseLine(String line) {
+ line = line.trim();
+ String[] cols = line.split(",");
+
+ String WBAN = cols[0];
+ String city = cols[1];
+ String state = cols[2];
+ double latitude = Double.parseDouble(cols[3]);
+ double longitude = Double.parseDouble(cols[4]);
+ Pair<Double, Double> coordinates = Pair.of(latitude, longitude);
+ double temperatureAverage = Double.parseDouble(cols[5]);
+ double temperatureRealCoeff = Double.parseDouble(cols[6]);
+ double temperatureImagCoeff = Double.parseDouble(cols[7]);
+ double temperatureDerivStd = Double.parseDouble(cols[8]);
+ double precipitationAverage = Double.parseDouble(cols[9]);
+ double windSpeedRealCoeff = Double.parseDouble(cols[10]);
+ double windSpeedImagCoeff = Double.parseDouble(cols[11]);
+ double windSpeedK = Double.parseDouble(cols[12]);
+ double windSpeedTheta = Double.parseDouble(cols[13]);
+
+ return new WeatherStationParameters(WBAN, city, state, coordinates,
+ temperatureAverage, temperatureRealCoeff, temperatureImagCoeff,
+ temperatureDerivStd, precipitationAverage, windSpeedRealCoeff,
+ windSpeedImagCoeff, windSpeedK, windSpeedTheta);
+ }
+
+ public List<WeatherStationParameters> readParameters() throws Exception {
+ InputStream inputStream = getResource(
+ WeatherConstants.WEATHER_PARAMETERS_FILE);
+ Scanner scanner = new Scanner(inputStream);
+
+ // skip header
+ scanner.nextLine();
+
+ List<WeatherStationParameters> parameterList = Lists.newArrayList();
+ while (scanner.hasNextLine()) {
+ String line = scanner.nextLine();
+ WeatherStationParameters parameters = parseLine(line);
+ parameterList.add(parameters);
+ }
+
+ scanner.close();
+
+ return parameterList;
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherRecordBuilder.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherRecordBuilder.java
new file mode 100644
index 00000000..393414e7
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherRecordBuilder.java
@@ -0,0 +1,163 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import java.io.Serializable;
+
+import org.apache.bigtop.datagenerators.weatherman.WeatherRecord;
+import org.joda.time.LocalDate;
+
+public class WeatherRecordBuilder implements Serializable, WeatherRecord {
+ private static final long serialVersionUID = -6397575341624071821L;
+
+ private LocalDate date;
+ private Double temperature;
+ private Double precipitation;
+ private Double windSpeed;
+ private Double windChill;
+ private Double rainFall;
+ private Double snowFall;
+
+ public WeatherRecordBuilder(LocalDate date) {
+ this.date = date;
+ }
+
+ public WeatherRecordBuilder(LocalDate date, double temperature,
+ double precipitation, double windSpeed, double windChill,
+ double rainFall, double snowFall) {
+ this.date = date;
+ this.temperature = temperature;
+ this.precipitation = precipitation;
+ this.windSpeed = windSpeed;
+ this.windChill = windChill;
+ this.rainFall = rainFall;
+ this.snowFall = snowFall;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.bigtop.bigpetstore.datagenerator.generators.weather.
+ * WeatherRecord#getDate()
+ */
+ @Override
+ public LocalDate getDate() {
+ return date;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.bigtop.bigpetstore.datagenerator.generators.weather.
+ * WeatherRecord#getTemperature()
+ */
+ @Override
+ public double getTemperature() {
+ return temperature;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.bigtop.bigpetstore.datagenerator.generators.weather.
+ * WeatherRecord#getPrecipitation()
+ */
+ @Override
+ public double getPrecipitation() {
+ return precipitation;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.bigtop.bigpetstore.datagenerator.generators.weather.
+ * WeatherRecord#getWindSpeed()
+ */
+ @Override
+ public double getWindSpeed() {
+ return windSpeed;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.bigtop.bigpetstore.datagenerator.generators.weather.
+ * WeatherRecord#getWindChill()
+ */
+ @Override
+ public double getWindChill() {
+ return windChill;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.bigtop.bigpetstore.datagenerator.generators.weather.
+ * WeatherRecord#getRainFall()
+ */
+ @Override
+ public double getRainFall() {
+ return rainFall;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.bigtop.bigpetstore.datagenerator.generators.weather.
+ * WeatherRecord#getSnowFall()
+ */
+ @Override
+ public double getSnowFall() {
+ return snowFall;
+ }
+
+ public WeatherRecord build() {
+ if (temperature == null || precipitation == null || windSpeed == null
+ || windChill == null || rainFall == null || snowFall == null) {
+ throw new IllegalStateException("Not all fields have been initialized.");
+ }
+
+ return this;
+ }
+
+ public void setDate(LocalDate date) {
+ this.date = date;
+ }
+
+ public void setTemperature(Double temperature) {
+ this.temperature = temperature;
+ }
+
+ public void setPrecipitation(Double precipitation) {
+ this.precipitation = precipitation;
+ }
+
+ public void setWindSpeed(Double windSpeed) {
+ this.windSpeed = windSpeed;
+ }
+
+ public void setWindChill(Double windChill) {
+ this.windChill = windChill;
+ }
+
+ public void setRainFall(Double rainFall) {
+ this.rainFall = rainFall;
+ }
+
+ public void setSnowFall(Double snowFall) {
+ this.snowFall = snowFall;
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSampler.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSampler.java
new file mode 100644
index 00000000..3885caa5
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSampler.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import org.apache.bigtop.datagenerators.weatherman.WeatherRecord;
+import org.joda.time.LocalDate;
+
+public class WeatherSampler implements Sampler<WeatherRecord> {
+ private final ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> tempSampler;
+ private final ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> windSpeedSampler;
+ private final ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> precipitationSampler;
+ private LocalDate date;
+
+ public WeatherSampler(LocalDate startDate,
+ ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> tempSampler,
+ ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> windSpeedSampler,
+ ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> precipitationSampler) {
+ this.tempSampler = tempSampler;
+ this.windSpeedSampler = windSpeedSampler;
+ this.precipitationSampler = precipitationSampler;
+ date = startDate;
+ }
+
+ public WeatherRecord sample() throws Exception {
+ WeatherRecordBuilder weatherRecord = new WeatherRecordBuilder(date);
+
+ weatherRecord = tempSampler.sample(weatherRecord);
+ weatherRecord = windSpeedSampler.sample(weatherRecord);
+ weatherRecord = precipitationSampler.sample(weatherRecord);
+
+ date = date.plusDays(WeatherConstants.WEATHER_TIMESTEP);
+
+ return weatherRecord.build();
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSamplerBuilder.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSamplerBuilder.java
new file mode 100644
index 00000000..40128ae9
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherSamplerBuilder.java
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import java.util.Collection;
+
+import org.apache.bigtop.datagenerators.locations.Location;
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+import org.apache.bigtop.datagenerators.weatherman.WeatherRecord;
+import org.joda.time.LocalDate;
+
+public class WeatherSamplerBuilder {
+
+ private final WeatherStationParameters parameters;
+ private final SeedFactory seedFactory;
+ private final LocalDate startDate;
+
+ public WeatherSamplerBuilder(
+ Collection<WeatherStationParameters> weatherParameters,
+ Location location, LocalDate startDate, SeedFactory seedFactory) {
+ parameters = findClosest(weatherParameters, location);
+ this.seedFactory = seedFactory;
+ this.startDate = startDate;
+ }
+
+ private WeatherStationParameters findClosest(
+ Collection<WeatherStationParameters> weatherParameters,
+ Location location) {
+ WeatherStationParameters closestStation = null;
+ double minDist = Double.MAX_VALUE;
+
+ for (WeatherStationParameters parameters : weatherParameters) {
+ double dist = location.distance(parameters.getCoordinates());
+ if (dist < minDist) {
+ minDist = dist;
+ closestStation = parameters;
+ }
+ }
+
+ return closestStation;
+ }
+
+ private ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> buildTempSampler() {
+ return new TemperatureSampler(startDate, parameters.getTemperatureAverage(),
+ parameters.getTemperatureRealCoeff(),
+ parameters.getTemperatureImagCoeff(),
+ parameters.getTemperatureDerivStd(), seedFactory);
+ }
+
+ private ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> buildWindSpeedSampler() {
+ return new WindSpeedSampler(parameters.getWindSpeedRealCoeff(),
+ parameters.getWindSpeedImagCoeff(), parameters.getWindSpeedK(),
+ parameters.getWindSpeedTheta(), seedFactory);
+ }
+
+ private ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> buildPrecipitationSampler() {
+ return new PrecipitationSampler(parameters.getPrecipitationAverage(),
+ seedFactory);
+ }
+
+ public Sampler<WeatherRecord> build() {
+ return new WeatherSampler(startDate, buildTempSampler(),
+ buildWindSpeedSampler(), buildPrecipitationSampler());
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherStationParameters.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherStationParameters.java
new file mode 100644
index 00000000..7edba341
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WeatherStationParameters.java
@@ -0,0 +1,110 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+public class WeatherStationParameters implements Serializable {
+ private static final long serialVersionUID = -7268791467819627718L;
+
+ private String WBAN;
+ private String city;
+ private String state;
+ private Pair<Double, Double> coordinates;
+ private double temperatureAverage;
+ private double temperatureRealCoeff;
+ private double temperatureImagCoeff;
+ private double temperatureDerivStd;
+ private double precipitationAverage;
+ private double windSpeedRealCoeff;
+ private double windSpeedImagCoeff;
+ private double windSpeedK;
+ private double windSpeedTheta;
+
+ public WeatherStationParameters(String WBAN, String city, String state,
+ Pair<Double, Double> coordinates, double temperatureAverage,
+ double temperatureRealCoeff, double temperatureImagCoeff,
+ double temperatureDerivStd, double precipitationAverage,
+ double windSpeedRealCoeff, double windSpeedImagCoeff,
+ double windSpeedK, double windSpeedTheta) {
+ this.city = city;
+ this.state = state;
+ this.coordinates = coordinates;
+ this.temperatureAverage = temperatureAverage;
+ this.temperatureRealCoeff = temperatureRealCoeff;
+ this.temperatureImagCoeff = temperatureImagCoeff;
+ this.temperatureDerivStd = temperatureDerivStd;
+ this.precipitationAverage = precipitationAverage;
+ this.windSpeedRealCoeff = windSpeedRealCoeff;
+ this.windSpeedImagCoeff = windSpeedImagCoeff;
+ this.windSpeedK = windSpeedK;
+ this.windSpeedTheta = windSpeedTheta;
+ }
+
+ public String getWBAN() {
+ return WBAN;
+ }
+
+ public String getCity() {
+ return city;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public Pair<Double, Double> getCoordinates() {
+ return coordinates;
+ }
+
+ public double getTemperatureAverage() {
+ return temperatureAverage;
+ }
+
+ public double getTemperatureRealCoeff() {
+ return temperatureRealCoeff;
+ }
+
+ public double getTemperatureImagCoeff() {
+ return temperatureImagCoeff;
+ }
+
+ public double getTemperatureDerivStd() {
+ return temperatureDerivStd;
+ }
+
+ public double getPrecipitationAverage() {
+ return precipitationAverage;
+ }
+
+ public double getWindSpeedRealCoeff() {
+ return windSpeedRealCoeff;
+ }
+
+ public double getWindSpeedImagCoeff() {
+ return windSpeedImagCoeff;
+ }
+
+ public double getWindSpeedK() {
+ return windSpeedK;
+ }
+
+ public double getWindSpeedTheta() {
+ return windSpeedTheta;
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WindSpeedSampler.java b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WindSpeedSampler.java
new file mode 100644
index 00000000..c4454325
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/java/org/apache/bigtop/datagenerators/weatherman/internal/WindSpeedSampler.java
@@ -0,0 +1,74 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.bigtop.datagenerators.weatherman.internal;
+
+import org.apache.bigtop.datagenerators.samplers.SeedFactory;
+import org.apache.bigtop.datagenerators.samplers.samplers.ConditionalSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.GammaSampler;
+import org.apache.bigtop.datagenerators.samplers.samplers.Sampler;
+
+public class WindSpeedSampler implements
+ ConditionalSampler<WeatherRecordBuilder, WeatherRecordBuilder> {
+ private final double coeffReal;
+ private final double coeffImag;
+ private final Sampler<Double> gamma;
+
+ public WindSpeedSampler(double windSpeedRealCoeff, double windSpeedImagCoeff,
+ double windSpeedK, double windSpeedTheta, SeedFactory seedFactory) {
+ coeffReal = windSpeedRealCoeff;
+ coeffImag = windSpeedImagCoeff;
+
+ gamma = new GammaSampler(windSpeedK, windSpeedTheta, seedFactory);
+
+ }
+
+ /**
+ *
+ * @param temp
+ * - given in Fahrenheit
+ * @param windSpeed
+ * - given in MPH
+ * @return
+ */
+ private Double windChill(double temp, double windSpeed) {
+ double v_16 = Math.pow(windSpeed, 0.16);
+ double windChill = 35.74 + 0.6215 * temp - 35.74 * v_16
+ + 0.4275 * temp * v_16;
+
+ return windChill;
+ }
+
+ public WeatherRecordBuilder sample(WeatherRecordBuilder weatherRecord)
+ throws Exception {
+
+ double dayOfYear = weatherRecord.getDate().getDayOfYear();
+ // meters/second
+ double windSpeed = Math.max(0.0,
+ coeffReal
+ * Math.cos(-2.0 * Math.PI * dayOfYear
+ / WeatherConstants.TEMPERATURE_PERIOD)
+ + coeffImag * Math.sin(-2.0 * Math.PI * dayOfYear
+ / WeatherConstants.TEMPERATURE_PERIOD) + gamma.sample());
+
+ double windChill = windChill(weatherRecord.getTemperature(),
+ windSpeed * WeatherConstants.M_PER_S_TO_MPH);
+
+ weatherRecord.setWindSpeed(windSpeed);
+ weatherRecord.setWindChill(windChill);
+
+ return weatherRecord;
+ }
+}
diff --git a/bigtop-data-generators/bigtop-weatherman/src/main/resources/input_data/weather_parameters.csv b/bigtop-data-generators/bigtop-weatherman/src/main/resources/input_data/weather_parameters.csv
new file mode 100644
index 00000000..5d511877
--- /dev/null
+++ b/bigtop-data-generators/bigtop-weatherman/src/main/resources/input_data/weather_parameters.csv
@@ -0,0 +1,897 @@
+WBAN,City,State,Latitude,Longitude,Temperature Average,Temperature Real Coeff,Temperature Imag Coeff,Temp Deriv Std,Precipitation Average,Wind Speed Coeff Real,Wind Speed Coeff Imag,Wind Speed k,Wind Speed Theta
+14853,DETROIT,MI,42.23333,-83.53333,53.0568654646,-22.5320710554,7.35343358484,8.17976262428,0.127760055479,1.55741549907,-1.24359704356,3.95457928154,2.13109915235
+14852,YOUNGSTOWN/WARREN,OH,41.25444,-80.67389,51.0220385675,-20.8281661634,5.54808686298,8.56935855617,0.205475206612,1.55442679407,-1.24373432187,3.20490893057,2.42805040934
+14918,INTERNATIONAL FALLS,MN,48.5614,-93.3981,38.2868965517,-28.5760826835,7.70285617519,9.29375512483,0.152151724138,0.533795038545,-0.625074679509,2.981466123,2.10246017714
+14850,TRAVERSE CITY,MI,44.74083,-85.5825,48.2665745856,-22.3066904451,7.86489085151,8.38991896448,0.137672651934,1.08454013627,-0.516888707072,3.25831148596,1.86340286602
+14913,DULUTH,MN,46.8369,-92.1833,42.0387275242,-26.7481553685,8.47833831452,8.69480811185,0.167219917012,0.800756565261,-0.57598980924,3.73409073211,2.44489521972
+14910,ALEXANDRIA,MN,45.8679,-95.3941,43.6593406593,-29.0895822608,9.01852044458,8.61452026449,0.0873626373626,0.783443932236,-0.571771559267,3.95954476322,2.48897799357
+14858,HANCOCK,MI,47.16861,-88.48889,42.030726257,-22.5737642486,7.94485420373,7.7862234154,0.10875,1.20508067683,-0.631962082081,4.41578143158,2.11329381221
+14916,GRAND FORKS,ND,47.9428,-97.1839,41.3591160221,-30.4481792864,8.64360258045,8.89834759886,0.0932113259669,1.05441288782,-0.855558379174,4.32401482837,2.29781207397
+14914,FARGO,ND,46.92528,-96.81111,43.9365517241,-30.2722956526,8.56341229561,9.32885849502,0.121696551724,0.816522163059,-0.91939627302,4.54165323919,2.29711277055
+94746,WORCESTER,MA,42.2706,-71.8731,50.1345353675,-21.2636635174,6.94977321269,7.56799787879,0.215721220527,1.19967060252,-0.948328513743,3.65085911248,2.61827301847
+13737,NORFOLK,VA,36.9033,-76.1922,62.0068493151,-17.4987475546,5.45685951845,7.44907752964,0.193623287671,0.222902754171,-0.601741745834,3.77218992031,2.29411450623
+13736,MORGANTOWN,WV,39.64278,-79.91639,54.9958847737,-19.790354287,4.69191417002,8.33743967831,0.157983539095,0.920319848974,-1.08384725396,2.21499452902,1.91796650813
+13735,MILLVILLE,NJ,39.3667,-75.0667,55.493543759,-19.6998939799,7.00925374252,8.05644379625,0.16824964132,0.829330069425,-1.17512479496,3.16444304537,1.8631976303
+13734,MARTINSBURG,WV,39.4019,-77.9844,55.3884297521,-20.2433483094,4.67046422727,7.53867357607,0.143347107438,1.2944308919,-1.16112415383,3.65552475552,1.45977014306
+13733,LYNCHBURG,VA,37.3208,-79.2067,57.4046639232,-18.8626001816,4.63678515944,7.40277711215,0.159176954733,0.685428734794,-0.972068894612,2.38874699621,1.88142096683
+13739,PHILADELPHIA,PA,39.8683,-75.2311,57.9532967033,-20.7161601004,6.46684758586,6.98863778957,0.193949175824,0.866874504361,-1.10888207451,3.59064851296,2.3666865553
+24048,GREYBULL,WY,44.51694,-108.08222,47.9310344828,-27.8891620752,7.05138789585,7.2503797651,0.0147931034483,-1.56961968371,-1.01962226248,4.13511689595,1.51426315869
+94194,REXBURG,ID,43.83389,-111.80444,45.2534435262,-23.9118374927,7.0278048938,7.06298611703,0.0378719008264,-0.757301426992,-0.98870480236,3.88228355903,1.71730884373
+04858,NEWARK,OH,40.02278,-82.4625,52.9626038781,-21.3648531989,5.13316722356,8.11423065012,0.157541551247,1.51825717083,-1.35677228856,3.37799289706,1.57734341368
+24164,BIG PINEY,WY,42.58444,-110.1075,39.0924137931,-24.7616420482,7.7977061382,7.211891784,0.0152896551724,-1.31480305071,-0.738607696553,3.0456221871,2.21731489772
+04857,ASHTABULA,OH,41.77806,-80.69583,50.3092926491,-20.5487266451,6.30403129926,8.66681534077,0.181747572816,2.01773331525,-1.03077474149,3.55378963976,1.90701077016
+04854,GAYLORD,MI,45.01333,-84.70139,44.3595041322,-23.2940128316,7.41309877405,8.96513029669,0.123842975207,1.02534976762,-0.279393000888,3.50894287327,1.99148768769
+04855,MARION,OH,40.61611,-83.06361,51.5319444444,-21.9852943043,5.82816148019,8.39672148559,0.147104166667,1.77621640741,-1.56546907199,3.88305703347,2.17222179288
+04852,NEW PHILADELPHIA,OH,40.47194,-81.42361,52.764868603,-20.8269157274,5.47846700577,8.58224881987,0.138257261411,1.11528924394,-1.25320804142,2.66091172513,1.69910252303
+04850,LIMA,OH,40.7075,-84.02722,53.1584022039,-22.3844652135,5.30628336532,8.29888750907,0.14173553719,2.21227910482,-1.65569191937,4.12606410292,2.13238255344
+04851,DEFIANCE,OH,41.3375,-84.42889,52.6461538462,-22.8512201834,5.2467139881,8.14918861649,0.110307692308,1.24629148365,-1.21190033056,3.10391185212,2.03203989925
+14950,OTTUMWA,IA,41.1077,-92.4466,52.0909090909,-24.2234115331,6.49035291077,9.02802052379,0.132789256198,1.61714326923,-1.51229605549,3.82515407608,2.52349438191
+93782,MAXTON,NC,34.79167,-79.36611,62.3462068966,-16.8509332226,4.52887299337,7.19434848504,0.163779310345,0.16099505573,-0.970834888088,2.931247129,2.02804110113
+93783,BURLINGTON,NC,36.04667,-79.47694,59.9807427785,-18.0290300345,4.4787188237,7.16883782585,0.177668500688,0.757494516501,-0.937045478983,2.66392496137,1.77902991621
+93780,MOUNT HOLLY,NJ,39.94917,-74.84167,55.6272855134,-20.2965633096,5.85483249095,7.75060809441,0.175886075949,1.30871131205,-1.31891044581,3.00247927474,1.62767500822
+93786,OCEAN CITY,MD,38.30833,-75.12389,56.7012448133,-17.8447766474,7.37608716619,7.7854082196,0.178900414938,0.480075614169,-0.813939526534,3.13716354651,2.26142736627
+93784,BALTIMORE,MD,39.2814,-76.6089,62.2954230236,-20.4391571204,6.73577767154,7.10516935705,0.16814147018,-0.0127250649067,0.00094431929641,0.17119410868,0.037267799625
+93785,CHAPEL HILL,NC,35.93333,-79.06417,60.8271092669,-17.6909470828,4.26467635524,7.22427137869,0.196721991701,0.296038053757,-0.708000527122,2.17952524323,1.64221686496
+12932,ALICE,TX,27.74111,-98.02472,74.639275766,-13.4831517494,3.35134970129,7.01610243733,0.0992966573816,-0.563238772202,-1.45993054093,3.40667928082,2.67383950709
+03049,ALPINE,TX,30.38333,-103.68333,63.4964336662,-16.8404609348,2.89102941761,8.44294533281,0.0510984308131,0.645008784852,-1.34465225017,3.20161467507,2.54463256193
+54734,DANBURY,CT,41.37139,-73.48278,51.401920439,-20.6253955448,6.25145189061,7.68663766912,0.170390946502,0.713676213223,-1.06388749721,2.6616102702,1.9796281549
+93107,MIRAMAR,CA,32.86667,-117.13333,63.6383866481,-7.14820432983,5.31134532472,3.988179936,0.0275799721836,0.325640925939,-0.32503801286,1.50881456814,3.40226016
+54733,BEVERLY,MA,42.58417,-70.9175,51.0694444444,-19.4796245327,7.60179375763,8.48563278132,0.161166666667,1.13809953184,-1.22667171032,3.28387756053,2.16846459436
+12935,PALACIOS,TX,28.72472,-96.25361,72.5110497238,-13.9648103588,4.59160976328,6.13057277494,0.136263812155,-0.100470415944,-1.67647774003,3.84281831501,2.59470879385
+64775,ROME,NY,43.23389,-75.41167,48.4299450549,-22.5553270009,7.41550594461,8.5326112012,0.166298076923,1.19712875504,-0.95272512034,3.32926749957,2.03844793559
+04787,DU BOIS,PA,41.17833,-78.89889,49.2977839335,-21.3676781583,6.01286850835,8.24944037663,0.149646814404,2.06540284046,-1.31434884581,3.50652400687,2.14293868038
+64776,PLATTSBURG,NY,44.65,-73.46667,46.6708333333,-23.3443171429,7.2138138717,8.5684252556,0.119479166667,0.169509468938,-1.01219495617,2.93026586246,1.91601878736
+24221,EUGENE,OR,44.1278,-123.2206,53.0303448276,-13.353746458,5.3294154773,5.29738984334,0.151220689655,-0.192989634397,-0.140365128772,2.98514308996,2.0360139934
+04780,FITCHBURG,MA,42.55194,-71.75583,51.4972451791,-22.5910937571,5.95190190779,7.96345808584,0.149338842975,0.622760611662,-1.14155871499,3.21838668997,1.76182928905
+04781,ISLIP,NY,40.79389,-73.10167,54.5082417582,-19.5994698862,7.4115261885,6.90679746051,0.183853021978,1.03943003459,-1.15925947149,3.7231160249,2.34999745597
+13886,GREENVILLE,SC,34.84611,-82.34611,62.9766803841,-16.8660119884,4.00445822615,6.24809941781,0.211378600823,0.325253868407,-0.726903838488,2.64887302584,2.21275871484
+24018,CHEYENNE,WY,41.15,-104.8167,47.9228650138,-21.1345131179,6.81379845297,9.24366061652,0.0846694214876,1.77333856351,-1.37579230124,4.27263550654,2.69070898165
+13880,CHARLESTON,SC,32.8986,-80.0402,67.3571428571,-14.6288392093,4.40622822838,6.75345042493,0.209402472527,0.179365505724,-0.937596032297,2.88319980965,2.51685415014
+21510,KAILUA/KONA,HI,19.73556,-156.04889,78.0475524476,-2.04064085147,2.1839069215,2.69340615228,0.0211678321678,-0.404359349991,-0.0761400215034,1.3926299515,5.22751933646
+24153,MISSOULA,MT,46.9208,-114.0925,47.1272475795,-21.2604508936,5.92597019228,6.39476755324,0.0675518672199,-1.03535571488,-0.5894614342,2.9686760197,1.53315897456
+24046,CRAIG,CO,40.49278,-107.52417,43.9307479224,-25.9113019147,6.90683450997,7.39876193864,0.04391966759,-1.27377299794,-0.788461469732,3.11931174122,1.65211528421
+24152,MEACHAM,OR,45.51139,-118.42472,43.5516759777,-15.8646645715,5.46538469452,6.83583066347,0.197849162011,-0.200200121719,-0.329192705211,1.02446086701,1.14817170779
+27406,DEADHORSE,AK,70.1917,-148.4772,13.406162465,-31.5556139815,20.0755360445,7.97779227922,0.0159453781513,1.4363698894,-0.495639690957,5.91946473183,2.00660224236
+93067,DENVER,CO,39.57028,-104.84889,51.2169680111,-21.5344292536,6.2086396277,9.20059036838,0.0593115438108,-0.653864714797,-1.05311936259,2.91115796445,2.62889525054
+24044,ALLIANCE,NE,42.0573,-102.8017,48.9830985915,-22.8909840736,10.3429517816,9.35169147462,0.0408169014085,-0.173059401841,-1.19876832919,4.07733387612,2.56574731639
+93027,ST JOHNS,AZ,34.51833,-109.37917,54.6151724138,-21.3909049508,5.56853875235,5.53371048785,0.0317172413793,-1.01997378791,-1.70165971704,3.56526544565,1.95174324737
+93026,DOUGLAS BISBEE,AZ,31.4583,-109.6061,63.7800829876,-17.8386291406,4.13738413889,4.59720359886,0.0527800829876,-0.652674760865,-1.366844525,3.2269160966,2.33693055922
+94989,AMES,IA,41.99056,-93.61889,50.2916666667,-25.4659702502,6.78942254552,8.8395514706,0.127354166667,1.32207234147,-1.7325917616,4.2285858386,2.12186776915
+94988,MARSHALLTOWN,IA,42.11056,-92.91611,49.7257617729,-25.5593902581,6.99445825056,9.51820830294,0.11033933518,1.59303154178,-2.09481085719,4.46686655156,2.28549535838
+03131,SAN DIEGO,CA,32.81583,-117.13944,64.1521438451,-7.28639534402,5.03647382884,3.71753544301,0.0271369294606,-0.744697755456,-0.492314567527,1.70513963409,2.69253491191
+24141,EPHRATA,WA,47.3078,-119.5154,52.0069541029,-21.9934464537,7.05422820491,5.87672770274,0.0301251738526,-1.1839003994,-0.66478131652,3.24981975153,2.24037246143
+94982,DAVENPORT,IA,41.61389,-90.59139,50.8248275862,-24.6182189052,6.6418893639,8.84132531904,0.141889655172,1.83020500187,-2.05878375076,4.39480319199,2.24271154623
+94985,MARSHFIELD,WI,44.63806,-90.1875,45.242090784,-26.0560010244,7.96070762118,8.35613701578,0.125632737276,1.00248151009,-0.865945749251,3.34180638715,2.47035056227
+26442,VALDEZ,AK,61.1303,-146.3517,39.6031746032,-16.3494292116,1.17398125513,4.81668062046,0.490670995671,1.38250333334,0.875299266619,4.34486693091,1.1304909195
+03031,ODESSA,TX,31.92056,-102.38667,66.2028169014,-19.3517331023,4.97210470545,8.43961375863,0.0402042253521,-1.14246945197,-1.07926634992,3.4552278168,2.96545946358
+03030,GUYMON,OK,36.68167,-101.50528,58.9752407153,-22.6215504608,5.6776890988,8.98912786036,0.061939477304,-0.486365523153,-1.15473016885,4.32717458279,2.51352897172
+03032,DRYDEN,TX,30.04806,-102.21306,70.8605299861,-17.1801802852,5.14408311324,6.82177395967,0.0553138075314,-0.828151991864,-0.729001388168,2.93521850379,2.93577967043
+14758,NEW HAVEN,CT,41.26389,-72.88722,54.1964038728,-20.1534861176,6.93892217903,6.85516977119,0.137219917012,0.969341873013,-0.652858646159,2.80233962349,2.23899063444
+94971,ESTHERVILLE,IA,43.40111,-94.74722,47.2884615385,-26.6177905278,7.32832979108,9.09209452954,0.0830563186813,1.72453447411,-2.03627876067,4.88165080303,2.34357647436
+94973,HAYWARD,WI,46.02611,-91.44417,41.9111111111,-25.9465583625,8.00817314235,9.4605088067,0.123416666667,-0.0141117837084,-0.531017928259,2.31549224162,1.75292700875
+14756,NANTUCKET,MA,41.25306,-70.06083,52.3986111111,-15.9607437884,7.78248095109,6.23740003447,0.158916666667,1.8294739432,-1.09794729735,4.55075064185,2.54933522004
+14757,POUGHKEEPSIE,NY,41.6266,-73.8842,52.3651452282,-21.5561225821,5.71624477116,7.66123311414,0.158008298755,0.960180991592,-1.16754372739,2.93404444696,1.45155304864
+94978,TEKAMAH,NE,41.76361,-96.17778,51.8980716253,-26.3960106962,5.57943130194,9.02793162059,0.0981611570248,1.01067554352,-2.12236846501,4.69178507389,2.14030973715
+14751,HARRISBURG,PA,40.21722,-76.85139,55.1282758621,-21.3956572239,5.57667945856,6.94102002569,0.174393103448,0.652481688938,-1.19645294021,3.08466214162,1.85004333009
+14752,HARTFORD,CT,41.73611,-72.65056,53.6721991701,-21.3640257569,6.51086184769,7.31839514842,0.150145228216,0.729045188694,-1.10346785053,2.81987047369,2.04044960569
+94871,BENTON HARBOR,MI,42.1256,-86.4284,50.875,-21.001608722,6.92548194709,8.55348369438,0.139708333333,2.09422640373,-1.11188090871,3.91414189457,1.87663525353
+94870,CHAMPAIGN/URBANA,IL,40.03972,-88.27778,53.7469050894,-23.0823310133,5.26108433342,8.45843045751,0.129140302613,2.44991276406,-2.24459738009,4.54978920013,2.19536449443
+13904,AUSTIN/BERGSTROM,TX,30.1831,-97.6799,69.0633608815,-16.9806925081,4.17458609925,7.57703716971,0.148388429752,0.0794309337882,-1.54893204132,3.61830508457,2.10157298892
+13869,ALBANY,GA,31.53556,-84.19444,68.1549100968,-14.6877940776,3.82797951356,6.10599341885,0.156908713693,0.28652048892,-0.812496663995,2.63971175391,1.9497916616
+94298,VANCOUVER,WA,45.62083,-122.65722,54.0873786408,-14.3511528228,4.77868247071,5.0052044191,0.148772538141,-0.320317091963,-0.300152392404,2.16648147442,1.80450716589
+13866,CHARLESTON,WV,38.3794,-81.59,56.8984700974,-19.5702529701,4.76003121078,7.69515799887,0.188783031989,1.15810573612,-1.34427670437,2.963569208,1.41270469105
+13865,MERIDIAN,MS,32.3347,-88.7442,64.7438016529,-16.2315685926,3.95987888696,6.95577887018,0.266384297521,0.934082428032,-1.09676036547,2.86196996409,1.7836738333
+12849,FORT LAUDERDALE,FL,26.0719,-80.1536,77.4256198347,-5.87860265064,2.9779281086,3.87993251716,0.282231404959,0.528848304116,-0.72375330252,3.53802179489,2.54644174442
+12842,TAMPA,FL,27.96194,-82.5403,74.9710743802,-9.20740745274,3.4448142814,4.7830066067,0.223326446281,0.155842423612,-0.688894958312,2.47231615227,2.47640326461
+12843,VERO BEACH,FL,27.651,-80.4199,73.9683631362,-7.76850433413,3.69472378149,4.93108378713,0.194381017882,0.419915122418,-0.733031644419,2.97258144268,2.59709706187
+12841,ORLANDO,FL,28.54528,-81.33306,74.3835616438,-9.11960485483,3.55120574639,4.83303056049,0.198226027397,0.128493853806,-0.724127917805,2.73016683032,2.53303804059
+93845,VALDOSTA,GA,30.7825,-83.27667,70.8107734807,-13.4549497603,3.97645928021,6.22052736714,0.183584254144,0.318856509646,-0.409523676544,2.10553510046,1.80332368961
+12844,WEST PALM BEACH,FL,26.6847,-80.0994,76.58033241,-6.27701775924,4.08488117752,4.22011348346,0.295512465374,0.584209773244,-0.813340787955,3.51159259377,2.56361019402
+93846,ANDERSON,SC,34.4977,-82.7097,62.4150684932,-16.8594921326,4.11720924259,6.17824599389,0.217664383562,0.546548251589,-1.13448821458,3.07977730696,1.67589060785
+03856,HUNTSVILLE,AL,34.64389,-86.78611,62.8720770289,-17.9768535481,4.03014375758,7.00819357677,0.22341127923,1.19958662917,-1.32803144584,3.12178377299,1.93092264214
+24230,REDMOND,OR,44.2558,-121.1392,47.7517531557,-16.2840181181,6.02262643794,7.12423458835,0.0373001402525,-0.662253798802,-0.734493186802,2.97632605506,2.04578394418
+03998,PARSONS,KS,37.32778,-95.50417,59.1553398058,-22.5039866027,5.44634850225,8.69488244787,0.129778085992,1.13538995527,-1.11806204968,3.41687663616,1.77888327123
+03999,BURNET,TX,30.7406,-98.2354,68.6427586207,-16.9820844036,4.41421069443,7.37724722074,0.0920896551724,-0.168040478508,-1.20444140471,2.88545163768,2.44819141613
+03996,TALLULAH/VICKSBURG,LA,32.35,-91.02778,65.7111111111,-16.3255442804,3.62687570697,7.58896690743,0.251166666667,1.47918445964,-1.21621570794,3.07355205295,1.78946050213
+03997,LAWRENCE,KS,39.00778,-95.21167,56.3457300275,-23.5296721226,5.91800129373,9.21615026373,0.101900826446,0.659605028804,-1.36061702535,3.81550675693,2.14493711057
+03994,SEDALIA,MO,38.70417,-93.18333,58.2134986226,-22.4600716943,5.72028308325,8.71210393955,0.140909090909,1.33620989517,-1.21343178602,3.52878427652,2.50333992227
+24259,MONTAGUE,CA,41.78139,-122.46806,52.1553398058,-18.512377948,6.45634492226,5.71855050713,0.0376144244105,-1.18832933576,-1.02618667413,4.02495302869,1.41657910401
+24135,BUTTE,MT,45.9647,-112.5006,41.2541436464,-21.4948698179,6.04470502181,7.89691439615,0.042203038674,-0.952451363343,-0.944631780059,2.66554579088,2.01626531129
+03859,BLUEFIELD,WV,37.2958,-81.2077,55.9889502762,-18.0773178091,4.90393525878,8.45617182757,0.191705801105,1.7487288194,-1.47111770502,3.12211581137,2.04856473623
+03991,DENTON,TX,33.20611,-97.19889,65.5151515152,-19.8830652865,5.46724645128,8.29374074546,0.117871900826,-0.00200758736177,-1.47367272386,4.03103917861,2.25635478656
+23064,GARDEN CITY,KS,37.92722,-100.72472,56.1017881706,-23.9123509324,6.28208564974,8.48145459117,0.0582255845942,-0.628333165915,-1.29132616318,4.42303185162,2.71465717035
+23065,GOODLAND,KS,39.36722,-101.69333,53.324137931,-23.2367979247,6.5344070259,9.67874528964,0.0688965517241,-0.00345553971809,-1.13782260699,4.27655096564,2.75991018149
+23066,GRAND JUNCTION,CO,39.1342,-108.54,52.9034482759,-27.1963995674,5.01089606323,6.27256498403,0.0444206896552,-2.23131153911,-0.62931512978,3.17048746313,2.21356149398
+23067,LA JUNTA,CO,38.0494,-103.5122,56.7489597781,-24.0761972914,6.1070748355,8.55164541752,0.0219902912621,-0.684146783859,-1.15546899425,3.59959241641,2.73439803955
+23061,ALAMOSA,CO,37.4389,-105.8613,41.7377279102,-25.6457728376,6.25130675948,5.91623566004,0.0410238429173,-1.60555432412,-1.56753171197,3.69346199515,1.78234660642
+94290,SEATTLE SAND POINT,WA,47.6872,-122.2553,53.8548850575,-13.0321343658,1.72875357567,4.11447978428,0.154051724138,-0.279567475308,-0.778812020838,2.63402878867,0.655544899646
+53922,FAYETTEVILLE/SPRINGDALE,AR,36.28333,-94.3,59.2013793103,-20.4159663508,5.74363357089,7.70508789631,0.15835862069,0.835413429716,-1.35000253943,3.5499163635,2.12403255709
+24133,BURLEY,ID,42.5416,-113.7661,49.1848275862,-21.1609185321,6.36009650115,6.47404579785,0.0311793103448,0.573890552202,-1.69337217486,4.09923858015,1.82459452643
+24283,ARCATA/EUREKA,CA,40.97806,-124.10861,50.818431912,-5.3750136394,3.22388347067,4.116583953,0.156458046768,-0.315842419156,-1.08591026349,2.8653876707,1.79800958544
+53921,MOUNT IDA,AR,34.5467,-93.57806,62.2732316227,-19.2727653799,4.28026258852,7.30977826709,0.206109570042,0.42482199537,-0.738883190926,1.70175305437,1.41071789183
+53925,DE QUEEN,AR,34.05,-94.40083,62.9719101124,-19.2934681957,4.0642991981,7.15017328412,0.12577247191,0.50424062478,-0.876322328444,2.23821818166,1.86846059342
+03071,MIDLAND,TX,32.03639,-102.10111,68.0997150997,-19.6335056348,2.61591434345,8.63357413727,0.026688034188,-0.413169816119,-1.57667996003,3.48188006552,2.59532480056
+93084,SAFFORD,AZ,32.85472,-109.63528,67.1744505495,-20.3817777512,5.52330528429,5.31542711394,0.0295879120879,-1.31513582829,-0.702914505579,3.19584894831,2.47475043388
+24160,WALLA WALLA,WA,46.09472,-118.28694,54.8404401651,-19.1734363917,5.9381084631,6.46163349235,0.0767125171939,-0.298623967423,-1.11618002938,4.03160764515,1.8654519365
+24130,BAKER CITY,OR,44.8428,-117.8086,45.3186206897,-19.6006192861,5.71845358657,6.20094099817,0.0357931034483,-0.168699473888,-1.15996896448,3.72112547382,1.70137624418
+26438,SEWARD,AK,60.12833,-149.41667,39.6260387812,-15.3500731917,4.82729140357,5.23543917817,0.295283933518,3.1608981922,0.192607586593,5.87660340046,1.47476695431
+14922,MINNEAPOLIS,MN,44.8831,-93.2289,48.4855967078,-28.0141463337,7.98421869534,8.3334669841,0.147839506173,0.272071326206,-0.772963695233,3.51745440448,2.45941827174
+24089,CASPER,WY,42.8977,-106.4739,47.3411927878,-23.1978375504,7.29469867144,9.27956569599,0.0794937586685,3.19871547712,-1.11745465046,5.26572962609,2.2038718068
+24162,ONTARIO,OR,44.02056,-117.01278,52.6107290234,-24.4967910617,5.70717252614,6.04625048975,0.0289064649243,-0.849089436699,-1.16281091933,3.86647466078,1.41632987587
+24126,OGDEN,UT,41.19611,-112.01139,52.6881868132,-24.7876591431,7.8712759173,6.56381651361,0.0493475274725,-1.08198181439,-0.42474604889,2.74239584063,2.38025809163
+03027,CLINES CORNERS,NM,35.00278,-105.66278,51.2831241283,-20.7478141153,5.10238876959,6.5807996856,0.0477824267782,2.1696192611,-1.79886237301,4.96563556601,2.78053288188
+23244,MOUNTAIN VIEW,CA,37.40583,-122.04806,60.1646090535,-8.3907176815,3.11376011879,3.96340269153,0.0336625514403,-2.15729853328,-0.608818206852,2.39798659276,2.22145667357
+24163,PASCO,WA,46.26667,-119.11667,53.7245179063,-20.0737328423,4.79941458169,6.25706117171,0.0310950413223,-0.239576540216,-1.40547448228,4.28771050643,1.45032996794
+04726,JOHNSTOWN,PA,40.31611,-78.83389,48.7602739726,-20.5466924419,5.75684188607,8.15058160226,0.168369863014,2.32949854466,-1.38286708632,3.93317378866,2.21651665396
+93210,OROVILLE,CA,39.49,-121.61833,62.762973352,-15.9416683579,5.00521056907,4.43230784578,0.0710238429173,-0.928072319586,-0.919372330855,3.57976796784,1.67972995241
+93740,FAYETTEVILLE,NC,34.99139,-78.88028,63.7107438017,-17.0471368878,4.76398090931,7.51334049372,0.172541322314,0.199628946964,-0.83104149077,2.86114112671,2.33040963683
+93741,NEWPORT NEWS,VA,37.13194,-76.49306,61.6408839779,-18.0612624249,5.43590942232,8.09197488529,0.224772099448,0.149667389,-1.13280833664,3.20668279251,2.25638072293
+53854,ORANGEBURG,SC,33.46167,-80.85806,65.5398351648,-15.4071145188,3.98836991779,6.75280865393,0.20095467033,0.63914100615,-0.820087272698,2.72133466513,1.8129032591
+53855,HAMILTON,OH,39.36444,-84.52472,54.540802213,-21.7130643486,4.52626427068,8.32876659245,0.166141078838,1.29836954017,-1.18105173758,2.91137908973,1.55468568398
+03927,DALLAS-FORT WORTH,TX,32.8978,-97.0189,68.1304945055,-19.1520311634,5.50146523494,7.31750135016,0.125254120879,0.183439111829,-1.49761443385,4.19598393357,2.47626892283
+53853,DESTIN,FL,30.4,-86.47167,70.2013986014,-12.7234239406,3.87140754914,6.47338254725,0.264146853147,1.19039765699,-0.787918913299,3.02203738907,2.15146847797
+53850,CLEMSON,SC,34.67194,-82.88639,64.3590096286,-16.6040846866,4.200572335,6.09464856285,0.244188445667,0.656730600275,-0.85249125147,2.71500167321,1.48808934512
+54813,MUNISING,MI,46.41667,-86.65,43.8864942529,-19.8071896237,10.4727687696,8.288843465,0.169439655172,1.06572437816,-0.485865297129,4.02166010241,2.24820665055
+53905,SHREVEPORT,LA,32.54278,-93.745,66.8418156809,-17.7525756913,4.72305486042,6.99403922843,0.186767537827,0.137623677655,-1.24990310263,3.07132913123,1.94723683833
+03928,WICHITA,KS,37.6475,-97.43,59.2878787879,-23.6054402557,5.9938264675,8.27099964915,0.140785123967,-0.0186468513097,-1.04639095856,4.44436120614,2.46952972195
+53858,PASCAGOULA,MS,30.46361,-88.53194,67.9931129477,-13.9284934084,3.85964414211,6.49436094916,0.275495867769,1.09672293431,-1.02916496936,2.88630041151,1.73900253991
+53859,DAYTON,OH,39.59361,-84.22639,54.2980769231,-21.672749653,5.69866468936,8.1003485239,0.161126373626,1.37930830184,-1.01404386531,3.11396182104,2.34547152822
+54778,PENN YAN,NY,42.6425,-77.05639,50.2876901798,-21.2338594831,6.70963106437,8.70788580399,0.115373443983,1.76948602875,-1.07291703397,3.54879181046,1.90503734058
+25309,JUNEAU,AK,58.3566,-134.564,41.5859697387,-14.4756733079,4.29368724636,4.47025836451,0.322902338377,0.571477623563,-0.629256784474,4.64758770562,1.55155848223
+25308,ANNETTE,AK,55.0389,-131.5787,46.6358543417,-11.0322867597,4.66144962742,4.38419405541,0.430840336134,1.19502594736,-0.530696422399,4.12007556199,1.58362383451
+14787,NEWPORT,RI,41.53333,-71.28333,52.1648351648,-18.4465750353,7.27206417697,6.67863881133,0.11657967033,1.43723342435,-0.984511257224,3.33953935089,2.188932875
+54773,FULTON,NY,43.34972,-76.38472,49.3282967033,-21.269563915,7.04497100978,8.3298545972,0.157252747253,1.75949580166,-1.26645295751,3.78224001848,1.71630660264
+54770,JAFFREY,NH,42.805,-72.00361,47.8033472803,-22.4620061819,7.13632110574,8.09001598552,0.172782426778,0.537985412716,-0.710979673396,2.47653914768,1.68544017619
+54771,MORRISVILLE,VT,44.53444,-72.61444,45.3370319001,-23.5272775808,8.28939119909,8.68771857239,0.135832177531,0.515084014127,-0.906631146976,2.36773592829,1.43286633359
+54777,TAUNTON,MA,41.87556,-71.02111,51.8418862691,-19.6108202328,6.29256029232,8.07295698915,0.174778085992,0.562107757279,-1.16334714165,2.7194743875,1.98124073187
+94732,PHILADELPHIA,PA,40.08194,-75.01111,56.2440392707,-19.9256589081,8.43709570624,7.44533636113,0.190224403927,0.942453849856,-1.4106579405,3.47599220793,2.06207077194
+22534,KAUNAKAKAI,HI,21.1545,-157.0961,74.576652602,-1.66481306773,2.48676921353,5.86038740592,0.0453797468354,-1.56142674662,-0.35297164293,3.89157780091,2.65592128969
+22536,LIHUE,HI,21.98389,-159.34056,75.8272980501,-2.42024517259,2.89105546368,1.98878842198,0.154199164345,-1.24665951371,-0.726960368834,4.2055631273,2.95784765684
+24155,PENDLETON,OR,45.6983,-118.8547,52.455801105,-18.4282802868,5.61392272528,6.19250005924,0.0519820441989,-0.544462585169,-1.13679307932,4.29962920495,1.92487368083
+13884,CRESTVIEW,FL,30.77972,-86.5225,68.1262002743,-14.0393152568,4.00836838175,6.53549370749,0.238641975309,0.712204631152,-0.895105914317,2.4001738606,1.78039228697
+24157,SPOKANE,WA,47.6216,-117.528,49.2458563536,-20.3274115022,6.58358918564,5.54397421253,0.0817541436464,-0.162950581731,-1.2486906455,4.36675466334,1.79254959641
+24156,POCATELLO,ID,42.9202,-112.5711,48.0013850416,-22.6530280326,6.40801093165,6.86216454961,0.0454778393352,-0.0297347663706,-1.43088704041,5.04608745613,1.80807096386
+13881,CHARLOTTE,NC,35.2236,-80.9552,61.6312154696,-17.6474542218,4.14593902684,6.86495524955,0.171774861878,0.273979386817,-0.85160929702,2.53651141211,2.28573387353
+13769,OCEANA,VA,36.81667,-76.03333,61.1326815642,-17.6815980931,5.72101876944,7.89461710386,0.221459497207,0.565397204156,-0.859916035592,3.80366219833,2.37752345446
+13883,COLUMBIA,SC,33.9419,-81.1181,65.8591352859,-16.1005417128,4.73154503059,6.93928642897,0.204665271967,0.190769604591,-1.0369127459,2.91196784502,1.77754388204
+13882,CHATTANOOGA,TN,35.0311,-85.2014,62.5631868132,-17.9708169444,4.35830956503,6.17609857446,0.244450549451,0.816168909031,-1.04968417885,2.84983166158,1.53845601424
+13764,GEORGETOWN,DE,38.68917,-75.35917,58.5260989011,-19.3170812241,6.22485859206,7.93391052467,0.183853021978,0.36771479216,-1.0290214753,3.052811579,2.07073570395
+24015,AKRON,CO,40.16667,-103.21667,51.6828254848,-23.259901981,7.29127274686,9.96586913633,0.0515650969529,-0.131893828264,-0.81624703477,3.71518085069,3.23524737259
+24017,CHADRON,NE,42.8374,-103.0981,49.6561210454,-25.0021063358,6.42459183843,9.30162600033,0.0557083906465,-0.523474897886,-1.04321916585,4.00026329288,2.17303440542
+13889,JACKSONVILLE,FL,30.495,-81.6936,69.5151098901,-12.2737004492,4.09224925914,6.34368878192,0.202005494505,-0.0138524725229,-0.921488163118,2.89524973001,2.19367476246
+24011,BISMARCK,ND,46.7825,-100.7572,43.9792243767,-27.3324622604,7.94232689009,9.25236282334,0.101862880886,-0.0223308163748,-0.978422203745,3.90267541271,2.2540116638
+24012,DICKINSON,ND,46.7994,-102.7972,44.1601123596,-25.4278594124,7.6081199741,10.2679938736,0.0654564606742,0.727830656124,-1.03304911309,4.17931376386,2.64794022631
+24013,MINOT,ND,48.2552,-101.2733,42.0746887967,-28.5902245719,8.30762947765,9.20683451828,0.0777800829876,1.01733905821,-0.626191192144,4.37744613537,2.2984975234
+25628,ST. GEORGE ISLAND,AK,56.6,-169.565,34.6977715877,-9.28458932729,9.33786653561,4.73719339036,0.0853830083565,4.45355587792,-1.45253829793,8.13365243525,1.97206747501
+94624,CHATHAM,MA,41.6875,-69.99333,52.4230769231,-17.7133504172,8.3582264471,6.39136944113,0.166195054945,0.545163945657,-0.886690465432,3.01460058529,2.18661081469
+14815,BATTLE CREEK,MI,42.3075,-85.25111,50.4485596708,-23.0630025689,6.37849463678,8.06513158651,0.121872427984,1.42762677553,-1.10852903098,3.79034120653,2.21033265754
+14813,AKRON,OH,41.0375,-81.46417,51.585399449,-21.6482564019,5.61350824021,8.45008777192,0.152272727273,1.55350495956,-1.15959198495,3.70269411231,1.91722509511
+94950,MITCHELL,SD,43.7743,-98.0384,48.8365384615,-27.6152257046,7.30020127816,9.23462330617,0.118557692308,0.727157441307,-1.12732883502,4.35575546199,2.35368135999
+93206,SAN LUIS OBISPO,CA,35.23722,-120.64139,60.3653846154,-6.0520970054,3.96088072422,4.51479542541,0.0397664835165,-1.87560264532,-0.941945350703,3.14854466631,2.01362000524
+93205,MARYSVILLE,CA,39.1019,-121.5677,62.7676348548,-15.7207512135,4.47007963628,4.88040719991,0.06622406639,-1.05436970407,-1.12110108004,4.03111789505,1.53034918384
+14819,CHICAGO,IL,41.78611,-87.75222,53.2693370166,-23.5995961758,7.51972125538,8.38756329804,0.127272099448,0.850972222352,-1.03934514547,3.47417118011,2.73780470703
+03178,SAN DIEGO,CA,32.57222,-116.97944,62.8317241379,-6.83128799641,5.26667884931,4.25418989221,0.0276620689655,0.310028682589,-0.592292235202,1.64889616953,2.71563072691
+03179,CHINO,CA,33.97528,-117.63611,65.3448753463,-11.8093764721,5.93756280445,4.06231999922,0.0121121883657,-1.58621579594,-0.627160469134,2.04156036111,2.44517225849
+93762,SITE R,PA,39.73333,-77.43333,56.406424581,-21.147081413,5.30459922314,7.67525406196,0.195104748603,1.07258481405,-0.806289849767,2.20120368117,1.28846467441
+54737,LANCASTER,PA,40.12028,-76.29444,53.9876373626,-21.1537192138,5.70925314302,7.09000393621,0.162135989011,1.07013071526,-1.35281101377,3.61122861431,1.78183551136
+03170,EUREKA,NV,39.6013,-116.0055,48.5105485232,-20.8500737664,9.5741591883,7.49559647226,0.032194092827,-1.33944400688,-0.393998106345,3.06365360341,2.39696155839
+03171,RIVERSIDE,CA,33.95194,-117.43861,67.7240896359,-10.9111933324,6.08517185811,4.6685828045,0.0171218487395,-0.324490478417,-0.424948781384,1.6333334114,2.58471947859
+23184,PRESCOTT,AZ,34.65167,-112.42083,57.4281767956,-19.1442239872,4.90472395066,5.02048849778,0.0453522099448,-0.737317902922,-1.28055467094,2.66982333508,2.42127055972
+03177,CARLSBAD,CA,33.12806,-117.27944,63.3434065934,-6.04392622883,5.09120735971,3.74397096491,0.0274244505495,-0.602358137926,-0.672069518133,1.52812115646,2.40617248272
+14710,MANCHESTER,NH,42.93333,-71.43833,51.4002770083,-22.0127910917,7.17020487291,7.76522852518,0.149750692521,0.408385176163,-1.16849607505,3.05497351546,1.95852467033
+14711,HARRISBURG,PA,40.1962,-76.7724,54.9449793673,-21.5743002168,6.29326853094,6.54483096541,0.185158184319,1.10233353352,-1.53087056262,3.91632261674,1.58230996781
+14712,READING,PA,40.36667,-75.96667,55.2912621359,-21.4681138364,5.3775651254,7.2747718874,0.163169209431,1.04883485507,-1.49384734086,3.44231840463,1.62693145446
+24231,ROSEBURG,OR,43.23889,-123.35472,55.9448275862,-14.2335984509,5.75064707197,5.2566942728,0.120103448276,-1.44580157133,-0.172103811256,1.94613431278,1.54931362856
+94273,MC MINNVILLE,OR,45.19472,-123.13389,53.6079779917,-13.2183015636,5.03125826557,5.08451186147,0.148143053645,0.165999536725,-0.687341448017,3.42629143392,1.51992408965
+14719,WESTHAMPTON BEACH,NY,40.84361,-72.63222,52.1244755245,-19.1860113624,7.52341278832,7.97564480467,0.152160839161,1.13935045336,-1.15661608063,3.59771398449,2.11408526599
+24232,SALEM,OR,44.905,-123.0011,53.7867036011,-13.7962639625,5.14061420783,5.05474537072,0.16163434903,0.282418961627,-0.58965857272,3.36787135643,1.68173003541
+24233,SEATTLE,WA,47.4444,-122.3138,53.3823933975,-12.5642628616,5.30007205025,4.2906764454,0.169250343879,0.630408529108,-0.926956729559,3.31721171486,2.16697296809
+12947,COTULLA,TX,28.45667,-99.21833,73.8824343015,-15.5560968701,4.15764046665,7.30376434869,0.083112033195,-1.39317915665,-0.918887980285,2.84612182245,2.57772329524
+24235,SEXTON SUMMIT,OR,42.6003,-123.3641,48.8294036061,-12.9519597958,7.60617132728,6.79546246142,0.169556171983,1.68394723561,-0.252371414701,3.51240548238,2.09868382464
+94274,TACOMA,WA,47.2675,-122.57611,52.2217630854,-11.7974549836,4.71958784093,4.14135849431,0.141136363636,0.627420801368,-0.906639755009,3.42515745439,1.57882187042
+94938,BRAINERD,MN,46.40472,-94.13083,43.5393103448,-27.8749677969,8.67368491967,9.02392910288,0.124572413793,0.79648223719,-0.497548120627,3.45944638681,2.11817826282
+94830,TOLEDO,OH,41.58861,-83.80139,51.5459533608,-22.4203285117,6.05334176926,8.05913380151,0.148683127572,1.73931027892,-1.57731257139,4.07408259549,1.88383444357
+24234,SEATTLE,WA,47.53028,-122.30083,53.9132231405,-12.8065210321,4.74613826341,4.99482014688,0.147665289256,0.405808948362,-0.803619389549,2.67989755225,1.80663540368
+04789,MONTGOMERY,NY,41.50917,-74.265,50.8918539326,-21.6109612429,4.89381161626,7.50577564358,0.150316011236,1.1249007523,-1.10973933928,3.1881254724,1.69145042329
+94789,NEW YORK,NY,40.63861,-73.76222,56.1304945055,-19.4778916055,8.01157320631,6.49860579627,0.157541208791,1.47379381872,-1.11017747262,4.33879421389,2.5361847034
+94276,FRIDAY HARBOR,WA,48.52222,-123.02306,49.8561549101,-9.41393629582,4.01977906483,4.24889856079,0.0377593360996,1.13092830613,-0.84719495985,3.22132238465,1.42339077116
+13810,LOUISVILLE,KY,38.22806,-85.66361,58.7020689655,-21.1860281959,3.96096732859,7.84040546732,0.214737931034,1.05916082277,-1.06801160748,2.89169094942,1.77402465347
+25713,ST PAUL ISLAND,AK,57.15528,-170.22222,33.4013986014,-10.482667559,10.2882913269,5.05002233659,0.13906993007,3.50391668427,0.269864483411,7.14416578873,1.99276497462
+26510,MC GRATH,AK,62.9574,-155.6103,26.8513323983,-34.2740061692,11.1629658855,8.94966520088,0.118758765778,-0.460630186533,0.462354829909,2.91236001682,1.2253717542
+03810,HICKORY,NC,35.7425,-81.3819,59.8547945205,-17.5370779455,4.43518474841,6.54073085298,0.225493150685,0.533423343323,-1.05223329622,2.39111943028,1.62794157851
+94182,MCCALL,ID,44.88889,-116.10167,41.7917241379,-21.5747866493,7.36843284312,6.37038750914,0.106427586207,-0.893716116587,-0.505207144312,2.53563807213,1.52480153618
+94185,BURNS,OR,43.595,-118.9564,45.6897506925,-20.6259368101,5.98629357015,6.84130526229,0.0356301939058,-1.2682785877,-1.09106189085,3.27052398647,1.95382382984
+12888,MIAMI,FL,25.6475,-80.43306,76.41184573,-6.21203382436,3.27964179719,3.73733135538,0.264628099174,0.694015681161,-0.802462234678,3.25307356662,2.24475144759
+53175,CORONA,CA,33.89765,-117.60243,65.3947368421,0.229454025621,-2.13364430535,4.57440174224,0.00332706766917,0.96023292903,-1.94744139557,2.90639661824,1.56706460832
+23054,LAS VEGAS,NM,35.65417,-105.14194,51.281512605,-18.6819203621,6.05138271885,7.61093322235,0.0491596638655,0.0448121869145,-1.43247799425,4.01660948693,2.7402321816
+12884,BOOTHVILLE,LA,29.333,-89.4075,71.1331444759,-11.5498381418,6.00517518473,5.29383931295,0.23802407932,0.613790622508,-0.462459355615,3.37454847381,2.13382865031
+12885,FORT LAUDERDALE,FL,26.19694,-80.17083,77.1648044693,-6.24676558806,3.36380273621,4.05463868553,0.268261173184,0.163059226502,-0.885298022134,3.36961677101,2.29296005247
+12882,MIAMI,FL,25.90694,-80.28028,77.3268965517,-6.51990335374,2.92815723186,4.40130654095,0.258889655172,0.568446359514,-0.911567655866,3.25618664503,2.43034445967
+23050,ALBUQUERQUE,NM,35.0419,-106.6155,59.0397805213,-21.9211557022,4.92422739252,5.46258299441,0.0331687242798,-0.877363984901,-1.26335820836,3.83160672644,2.02402849792
+23052,RATON,NM,36.74139,-104.50222,52.4299583911,-21.1953820718,5.35027592652,7.01049126144,0.0522191400832,-0.517386852635,-1.41855546505,3.46493251555,2.58720587441
+03104,PALM SPRINGS,CA,33.62667,-116.15944,73.4578146611,-18.909127504,5.76951499422,4.95912817039,0.00923236514523,-1.72180349241,-1.30510887559,2.85641806028,2.16086628514
+93967,COFFEYVILLE,KS,37.09111,-95.56639,60.7922437673,-21.9611054674,5.78751097153,8.36661161773,0.1391966759,0.882507542644,-1.04856860768,3.84275114801,2.20370308206
+03103,FLAGSTAFF,AZ,35.1441,-111.6663,47.1464088398,-18.5252424394,5.90744106828,4.8916334138,0.114074585635,0.204925010457,-1.71050374385,4.05400703779,1.6072359509
+03102,ONTARIO,CA,34.05611,-117.60028,67.3278008299,-11.2675397683,6.5871062284,4.60384144843,0.0246887966805,-1.40371384259,-0.534676160746,2.14150658162,2.47618489583
+14765,PROVIDENCE,RI,41.7219,-71.4325,53.2469135802,-20.1778628874,6.96662990988,7.13955439281,0.191687242798,0.588177848736,-1.06375816299,3.26464828501,2.46137636254
+14764,PORTLAND,ME,43.6497,-70.3002,48.4381868132,-20.9194568262,7.50935463823,7.42075326859,0.23470467033,0.964751574268,-1.53639028611,3.47964280227,2.08145496299
+14763,PITTSFIELD,MA,42.42722,-73.28917,47.5561643836,-21.505901865,6.7892682984,7.86095904542,0.155732876712,1.46524643372,-1.2386385698,3.63697769779,1.70188726512
+14762,PITTSBURGH,PA,40.35472,-79.92167,53.8628257888,-20.8260649063,5.75629081448,8.201575975,0.16316872428,1.43091373988,-1.14079698573,3.17869852235,2.27565075168
+03893,BLOOMINGTON,IN,39.13333,-86.61667,54.6712328767,-21.7511711655,4.69540000327,8.38790403049,0.162061643836,1.44616021032,-1.25892914516,3.2043841619,1.88359232842
+73805,PANAMA CITY,FL,30.349,-85.788,68.9542936288,-12.9288724244,4.14375466074,6.00126261304,0.216128808864,0.665286793759,-0.88546992997,2.73925891697,2.12939490779
+14768,ROCHESTER,NY,43.1167,-77.6767,50.8186813187,-21.270859766,6.82152107212,8.52308619591,0.180164835165,1.55742394967,-1.35848601871,3.85775025498,2.14877131204
+24243,YAKIMA,WA,46.5683,-120.5428,51.8043165468,-19.9089265561,6.92551737014,6.60040770289,0.0336258992806,-1.3839139804,-0.401850480708,2.69139456408,1.93780419752
+03894,CLARKSVILLE,TN,36.62389,-87.41944,59.4285714286,-19.3734067005,4.4931542949,7.85203750257,0.178701923077,1.68972579404,-1.1867016239,3.25918244938,1.8684740412
+94949,HASTINGS,NE,40.6005,-98.4258,52.6126373626,-24.8519116537,6.46707961156,8.79581096031,0.105267857143,0.301466486234,-1.30308572873,4.1243974724,2.36344878568
+94931,HIBBING,MN,47.38639,-92.83889,39.1616022099,-27.0865246715,8.19881165781,9.11201250217,0.103964088398,0.686315129712,-0.816581748716,3.40561004398,1.82806913514
+23023,MIDLAND,TX,31.9475,-102.2086,66.4375,-19.8905631048,3.62343591661,8.4868793441,0.0466458333333,-0.862868755156,-1.48848722203,3.73276068018,2.92563477279
+23051,CLAYTON,NM,36.4486,-103.1539,56.5799151344,-20.8383183113,6.18470518584,9.05146754618,0.0481824611033,-0.0555663621347,-1.30112997768,3.92634990539,3.18527555269
+94943,CHAMBERLAIN,SD,43.76667,-99.31833,49.70781893,-26.774381289,7.74090093507,9.37152503726,0.0831893004115,-0.0946003514917,-0.927044399726,4.06447615238,2.60516094658
+13971,HARRISON,AR,36.2668,-93.1566,59.7111416781,-19.7294747986,4.96979211102,8.01465088928,0.155880330124,1.06056470938,-1.41099212043,2.97788376219,2.28151460048
+13837,AUGUSTA,GA,33.46694,-82.03861,65.9848275862,-15.2963405352,4.136023736,6.38171504758,0.215337931034,0.364479659573,-0.787862548386,2.27748633366,2.32010173756
+13833,HATTIESBURG,MS,31.28194,-89.25306,67.5796703297,-15.0961466814,3.83371222643,6.68799657619,0.27426510989,0.719857931132,-1.11940530557,2.70503310944,1.62878102232
+93738,WASHINGTON,VA,38.9408,-77.4636,57.0467032967,-20.2856029279,5.22098952124,7.73834816054,0.171057692308,0.940972294388,-1.10071215171,3.40821319165,1.94101256095
+13838,MOBILE,AL,30.62639,-88.06806,68.7949790795,-14.6424339187,3.90083078901,6.08952436728,0.279246861925,0.89357588817,-0.651486997527,3.14525549547,2.10784374195
+13839,DOTHAN,AL,31.3167,-85.45,67.8349514563,-14.0503840736,3.68736954691,6.30818188047,0.214493758669,0.794512269628,-1.13992190202,2.81595962293,2.25522556554
+12833,CROSS CITY,FL,29.63333,-83.10528,70.1518987342,-12.2805264538,3.85652561192,5.88436646519,0.262067510549,0.525102003083,-0.776655072473,2.29979559998,1.90147149627
+12832,APALACHICOLA,FL,29.73333,-85.03333,70.0598052851,-12.2209252649,4.78740948895,5.78001560516,0.25297635605,0.183581250921,-0.788768289299,2.82933632225,2.50308114973
+93814,COVINGTON,KY,39.04306,-84.67167,55.8547945205,-21.5373957379,5.18689318379,7.92757652449,0.190191780822,1.43692790792,-1.18084731464,3.42712321101,2.24950041006
+93815,DAYTON,OH,39.90611,-84.21861,54.1342465753,-22.3065449571,5.52035157211,8.18931656739,0.153965753425,1.77765539294,-1.38232319494,3.95904023087,2.28441972338
+13939,GREENVILLE,MS,33.4825,-90.98528,64.6901798064,-18.1637729266,4.64004451482,7.33464120221,0.190124481328,1.51038447742,-1.23959535912,3.74427979786,1.93323939513
+12836,KEY WEST,FL,24.555,-81.75222,78.5520110957,-5.27957211578,2.37466323252,3.1780224022,0.194188626907,0.429659060907,-0.736797679847,3.41229318207,2.72698445332
+12835,FORT MYERS,FL,26.585,-81.8614,76.1595598349,-7.65331709987,2.98379516843,3.98565097596,0.213342503439,0.533924290068,-0.59250734616,2.56019486777,2.51345637115
+12834,DAYTONA BEACH,FL,29.1828,-81.0483,72.3141289438,-9.771532587,4.21443539056,5.48552558598,0.185884773663,0.409845612265,-0.337953024379,2.97303335527,2.05122283565
+13935,ALEXANDRIA,LA,31.3953,-92.2907,68.0421348315,-15.7109968802,4.10640191747,7.21728693585,0.230667134831,0.35334044841,-0.940354467749,2.14469321848,1.75138324816
+13975,GAGE,OK,36.2967,-99.7689,59.8058252427,-22.8766744088,5.99240676783,9.15399070296,0.0696324549237,-0.723709474848,-1.43890712517,5.31484420921,2.19146506737
+12839,MIAMI,FL,25.7905,-80.3163,77.8916323731,-5.91170010113,3.09891992879,3.71752150568,0.323580246914,0.115798798382,-0.908104038686,3.06332832439,2.41056829629
+12838,MELBOURNE,FL,28.1011,-80.6439,73.9396433471,-8.43945294107,4.13417244236,5.1369881705,0.167777777778,0.37252490672,-0.559742569728,3.0111676494,2.76410463009
+13932,WINFIELD/ARKANSAS CITY,KS,37.16806,-97.03694,59.7472375691,-22.59766701,6.4829308211,8.79434371609,0.12375,0.181325759794,-1.02290922696,4.3726293315,2.19455932521
+94053,TORRINGTON,WY,42.0613,-104.1584,50.866851595,-22.8322959137,7.18855934015,8.9670969126,0.0400485436893,0.0982743656004,-1.33833651554,3.88121846778,2.38854312752
+03966,ST LOUIS,MO,38.65722,-90.65583,56.8510344828,-22.2190326249,5.06844944638,8.92917878297,0.118013793103,1.11126239834,-1.24503645161,3.15740095709,1.79095360315
+03965,STILLWATER,OK,36.1624,-97.0894,61.8275862069,-21.5625410746,5.97439635661,8.81033919446,0.115882758621,0.00154459384478,-1.1596537014,3.85043259302,2.3830730307
+03195,GRAND CANYON,AZ,35.94611,-112.15472,46.5842541436,-19.3285416018,6.0957607331,5.69416305189,0.0436947513812,-0.230776265326,-1.15398047682,3.34359871811,1.67529653205
+03192,SCOTTSDALE,AZ,33.62278,-111.91056,73.8438356164,-19.6879493672,6.05177738136,4.40445183953,0.0302465753425,-1.2383639549,-0.265528496222,1.78929491161,1.78382043184
+03962,HOT SPRINGS,AR,34.29,-93.06,64.0892857143,-19.7103132369,5.24041994968,6.9884656192,0.165700549451,-0.0797704301496,-0.868520484815,2.22819137562,2.11827297873
+94055,BAKER,MT,46.3583,-104.25,45.3944444444,-24.5899157117,8.42825642206,9.3304108768,0.0676041666667,-0.423359891829,-1.19764976937,4.66555520618,2.27688157083
+03960,CAHOKIA/ST.LOUIS,IL,38.57139,-90.15722,57.4724517906,-22.1628357339,4.81190835086,8.58511729688,0.151095041322,1.48284039284,-1.42204402674,3.31739791099,1.92656556268
+25335,SKAGWAY,AK,59.4556,-135.3239,41.6132596685,-16.1490824995,4.12765850985,5.04367993096,0.0935428176796,2.90675003314,-0.566804103984,7.35488118118,1.44016809143
+53819,ATLANTA,GA,33.35528,-84.56694,62.564738292,-16.2877506378,3.70360504001,6.08043929119,0.185929752066,0.819431462436,-0.921403856423,2.6003805077,1.49591372957
+94129,PULLMAN/MOSCOW,WA,46.74389,-117.10861,48.0517241379,-17.3886457082,4.70893854627,6.35239831804,0.0765086206897,1.79817224302,-1.56333890013,4.29098058108,1.62352703697
+13978,GREENWOOD,MS,33.4963,-90.0866,64.1086657497,-17.5015887863,4.24780560786,7.60210891742,0.210041265475,1.23869142924,-1.18613327216,3.27701272533,1.74602103486
+03804,PARKERSBURG,WV,39.2,-81.27,55.2147937411,-19.5647514722,6.12200138888,8.11307279218,0.178335704125,0.84985680076,-0.625971925717,11.9971399817,0.437361232262
+53959,WEST MEMPHIS,AR,35.135,-90.23444,61.7496423462,-18.1033070683,7.0500328787,8.37637853458,0.182811158798,1.04198806523,-1.14175904864,3.59065324459,1.85981994684
+94128,LOGAN,UT,41.78722,-111.85333,47.3627586207,-24.1372135285,8.55141328065,6.85944285701,0.0445448275862,-0.889416593594,-0.588107556446,2.68639054217,1.53093513047
+23293,SAN JOSE,CA,37.3591,-121.924,60.3252496434,-9.50463646735,2.69941518171,4.62064570262,0.0315620542083,-1.79232763812,-0.838784335627,2.73006881154,2.26431668856
+23119,RIVERSIDE,CA,33.9,-117.25,63.7782485876,-12.7590170941,7.28932320938,4.46899320473,0.0211440677966,-0.960846546011,-0.369624214558,1.88178043492,2.72633679064
+03802,CLARKSBURG,WV,39.29556,-80.22889,54.1638888889,-19.7251353432,4.70638000492,8.33776458979,0.1678125,1.3535484912,-1.33275016933,3.05009638269,1.6029092738
+25339,YAKUTAT,AK,59.512,-139.6712,39.8954607978,-12.8533149821,5.57930895141,4.78128741725,0.587331499312,0.561920207708,-0.339657683303,2.99986576911,1.46581524202
+14848,SOUTH BEND,IN,41.7072,-86.3163,51.698630137,-22.7058304553,6.15708813467,8.3582629502,0.17897260274,1.67606049014,-1.27314727315,3.8607097691,2.21163818608
+41415,AGANA,GU,13.48333,144.8,82.7506887052,-1.28606034607,-0.249025327079,1.81169900092,0.412520661157,2.93880512741,-1.9998624884,3.74390295809,2.47333263149
+14845,SAGINAW,MI,43.53306,-84.07972,49.8691460055,-23.0479450975,6.38419037987,8.22372224786,0.154359504132,1.32263191946,-0.982181099686,3.83250613459,2.36817182781
+14847,SAULT STE MARIE,MI,46.4794,-84.3572,43.6972222222,-23.498009968,8.70789100243,7.89496444049,0.214479166667,0.784698139178,-0.623472011622,2.90114153778,2.50705911401
+14840,MUSKEGON,MI,43.17111,-86.23667,50.8255494505,-21.5732418592,6.90685955606,7.47076969528,0.195865384615,1.59897047932,-0.641684866814,3.99997078911,2.24029795368
+14841,PELLSTON,MI,45.5644,-84.7927,44.2205270458,-22.1425554029,7.90450007815,9.3520705642,0.120104022191,1.23247310071,-0.854185493527,3.91311204574,1.77517616779
+14842,PEORIA,IL,40.6675,-89.6839,53.7624309392,-24.1188674657,5.83973509441,8.42106054979,0.149171270718,1.17127613918,-1.40536841195,3.50150373014,2.17380953915
+23275,UKIAH,CA,39.12583,-123.20083,59.6308539945,-13.6617543155,4.97233762687,5.046977292,0.0956611570248,-1.41549135241,-0.688138714592,2.38211185515,1.42487636283
+13721,PATUXENT RIVER,MD,38.3,-76.41667,58.964137931,-19.5455490392,6.17588613767,7.83314707036,0.176420689655,0.921678513483,-0.932498208914,3.52013245886,2.28819759336
+13722,RALEIGH/DURHAM,NC,35.8923,-78.7819,61.4828532236,-17.7322433617,4.69657682542,7.46326032176,0.188765432099,-0.0867324243159,-0.92234004414,2.80347081197,1.93866096293
+13723,GREENSBORO,NC,36.0969,-79.9432,60.0633608815,-18.135293596,4.47977123116,7.06113822328,0.179194214876,0.420255259723,-1.27589074128,3.0495285972,2.20568796965
+23273,SANTA MARIA,CA,34.8994,-120.4486,58.9529085873,-5.43978540602,3.85048081169,4.48162241085,0.02891966759,-1.04861456664,-1.29293320008,2.94371352764,2.04619340356
+24057,RAWLINS,WY,41.8,-107.2,45.0879888268,-23.0817888878,7.46892917781,8.18385456697,0.0252444134078,2.29449582097,-1.60529282272,5.69671703947,2.14945420624
+13728,DANVILLE,VA,36.5728,-79.3361,59.2339832869,-18.681676718,4.32891822126,7.48326405322,0.167820334262,0.860723772338,-0.947756612529,2.67371598119,1.85015786725
+13729,ELKINS,WV,38.8853,-79.8528,51.9541029207,-19.4174012858,4.93087894194,8.28073492597,0.205910987483,1.22946452261,-1.35801227124,2.85676487948,1.37550185688
+14992,REDWOOD FALLS,MN,44.54833,-95.08028,46.907967033,-28.3786274525,8.10320484,9.02339195962,0.0961195054945,1.16659446684,-1.14517956414,4.22921237366,2.26677569655
+14990,CEDAR RAPIDS,IA,41.8833,-91.7166,49.8555708391,-25.6615334081,5.78775247568,8.96584911963,0.126396148556,1.68499889941,-1.79412362439,4.23959717849,2.24743004421
+14991,EAU CLAIRE,WI,44.8665,-91.4879,46.0482093664,-27.1440153378,7.32168253098,8.67966961842,0.147314049587,0.221642332953,-0.631217448455,3.11852906898,2.27198834811
+93225,SACRAMENTO,CA,38.69556,-121.58972,62.2272727273,-14.8776140971,4.59274846812,4.43365547064,0.0529132231405,-1.66743819771,-0.709871236922,4.11287578887,1.75636022843
+93227,NAPA,CA,38.2102,-122.2847,57.4177040111,-9.80285320941,3.44863542685,4.44333878433,0.0545643153527,-2.52297903803,-0.264097708678,3.26856375887,2.15807434595
+24110,MOSES LAKE,WA,47.20778,-119.31917,51.8459422283,-21.4296345899,5.51648475907,5.92473063065,0.0319601100413,-0.814499147225,-1.00465767027,3.35063158868,1.95549163676
+03947,KANSAS CITY,MO,39.2972,-94.7306,56.329218107,-23.1878080177,5.98115867068,8.84829921067,0.126131687243,0.642997759038,-1.09876546976,3.7738998439,2.65704847956
+94239,WENATCHEE,WA,47.3977,-120.2013,52.1726519337,-22.0458961767,6.96263369607,5.40181650143,0.0341229281768,-3.30716352037,-0.605549239986,3.95723471468,1.64151404249
+54704,NORWOOD,MA,42.19083,-71.17361,51.5969738652,-20.5020655321,6.10099650037,8.24216261459,0.154745529574,0.780308882371,-1.19191978062,3.105532401,1.82715139355
+12907,LAREDO,TX,27.53333,-99.46667,76.6795422031,-14.7677050851,3.76326675765,6.95067885756,0.0607510729614,-1.5709080451,-1.02705721005,4.04750808398,2.39095168672
+94236,KLAMATH FALLS,OR,42.14694,-121.72417,46.8298755187,-17.9042737679,6.07851062685,5.94311776335,0.0307053941909,-0.463124824139,-1.43876561073,3.87111918733,1.48291109368
+12904,HARLINGEN,TX,26.22806,-97.65417,75.9434482759,-11.9480915279,2.61808157315,6.66306828344,0.091924137931,0.139691614694,-1.78272268824,4.10331962939,2.66519279968
+53870,GASTONIA,NC,35.19667,-81.15583,61.3632596685,-16.7240042807,5.06065013882,6.58209802807,0.178798342541,0.418854802564,-0.607046556674,2.17302936436,1.65915233335
+22010,DEL RIO,TX,29.3784,-100.927,72.635862069,-17.3768630291,3.85001323082,6.47704528915,0.0607448275862,-1.43328745708,-0.900732028036,3.11307633252,2.75779982959
+14610,MILLINOCKET,ME,45.6477,-68.6925,44.9627071823,-24.6052733775,8.70751985155,8.25402052153,0.15203038674,1.22534216236,-0.900167105991,3.24381951785,1.50737143576
+24025,PIERRE,SD,44.3813,-100.2855,48.051175657,-27.0051729117,7.51962845855,9.46048285255,0.0923443983402,0.182881342278,-0.700757683863,4.84285448827,2.21832294165
+21504,HILO,HI,19.7191,-155.053,74.1696551724,-1.66980702064,2.15921424029,2.89371851794,0.38104137931,0.107238514711,-0.285247073251,1.28634130757,4.7877034294
+24027,ROCK SPRINGS,WY,41.5944,-109.0529,46.0957004161,-23.7036272123,6.88633080047,7.59415543899,0.0139805825243,1.59208244546,-2.12023943879,5.59026624541,2.04496523722
+93037,COLORADO SPRINGS,CO,38.81,-104.6884,51.4993084371,-21.0660862522,6.19275121294,8.74565679353,0.0650829875519,-0.384222573107,-1.32052892744,3.48214106847,2.63259914638
+24021,LANDER,WY,42.8154,-108.7261,47.2605042017,-25.0012417393,6.09679276282,7.96366524536,0.0861134453782,-1.37926276223,-0.801638137219,2.91199361337,2.06299318158
+13750,NORFOLK,VA,36.93746,-76.28926,62.9567642957,-17.2382982653,5.83547487958,7.47360445828,0.150794979079,0.936496342355,-0.477727314579,3.88360281127,2.08432750022
+24023,NORTH PLATTE,NE,41.1213,-100.6694,50.7341597796,-25.1915280868,5.9254228718,8.91590117139,0.0752892561983,-0.451077778205,-1.21178754846,3.79376936415,2.25300541485
+23160,TUCSON,AZ,32.1313,-110.9552,71.5076071923,-17.8615391627,5.79160207717,4.83428021291,0.0342946058091,-0.504716858322,-0.333516415658,2.41193251795,2.88927708533
+94741,TETERBORO,NJ,40.85,-74.06139,56.3324022346,-20.4659293351,7.6724921988,7.2835373869,0.159909217877,0.765362976171,-1.10189393649,3.14451886185,2.16591297084
+94740,SARANAC LAKE,NY,44.38528,-74.20667,41.1978021978,-23.1800277244,7.0951129981,10.0265807034,0.153090659341,0.620539672401,-0.579019247568,2.91203088984,1.80819578405
+24029,SHERIDAN,WY,44.7694,-106.9688,46.9223300971,-23.0641320719,7.33060845527,8.76619130672,0.0568169209431,-0.189168948884,-0.972781765994,4.12440253498,1.57517876463
+24028,SCOTTSBLUFF,NE,41.8705,-103.593,51.6244841816,-24.0552484145,6.24663302168,8.87936243118,0.056492434663,-0.0370945442829,-1.59302697961,3.75626330661,2.44656936545
+94745,WHITE PLAINS,NY,41.06694,-73.7075,53.5345303867,-20.276745544,6.75638577108,7.14123577087,0.161540055249,1.53306867568,-1.25995619425,3.82520140138,1.84260691186
+14927,ST PAUL,MN,44.93194,-93.05556,47.9152777778,-27.6772226848,7.42402664401,8.18441598074,0.102625,0.647366095525,-0.734963851967,3.6722703156,2.17860233019
+14926,ST CLOUD,MN,45.5433,-94.0513,44.4718019257,-28.1986597424,7.86642684321,8.81138749482,0.136258596974,0.752012391504,-0.668250542655,3.70691902196,2.08895953906
+14925,ROCHESTER,MN,43.9041,-92.4916,47.2702331962,-26.3735291735,7.54396551765,8.65453276945,0.157160493827,1.71307593079,-1.55246826791,4.43691989925,2.49032729167
+14923,MOLINE,IL,41.46528,-90.52333,51.728021978,-24.7544718155,6.06030082036,8.56789752836,0.149876373626,1.40167631278,-1.61883460246,3.92191089884,2.03267698518
+93138,PALM SPRINGS,CA,33.82806,-116.50528,75.724137931,-17.1734108408,5.92522245896,4.58125033457,0.0087724137931,-1.41418043575,-0.844842938589,2.28656848027,2.61370426675
+14921,LONE ROCK,WI,43.21194,-90.18139,48.5862068966,-25.9427931527,6.61585672967,8.76443032614,0.115634482759,0.957146079809,-1.48047361666,3.45298920357,1.86800667951
+14920,LA CROSSE,WI,43.8788,-91.2527,49.1291208791,-26.5164423141,7.85737957885,8.57368578933,0.147197802198,0.66963352208,-0.547592260932,3.52640656233,2.21651871833
+26492,PORTAGE GLACIER,AK,60.785,-148.83889,34.900990099,-17.6207591075,4.34354357893,7.1580846698,0.600169731259,0.364094517016,0.0954512679279,4.90486478356,1.63365793773
+93134,LOS ANGELES,CA,34.0236,-118.2911,65.727647868,-6.77135381833,5.0085287274,4.75916869501,0.0242434662999,-0.234860903777,-0.330229340125,0.801170082902,1.69593767222
+26491,ANCHORAGE,AK,61.17806,-149.96639,37.7275242047,-23.5169876626,6.29012014851,5.68868724165,0.0503734439834,0.0145655523089,0.196221665309,2.64836059667,1.79343184025
+13942,MONROE,LA,32.5155,-92.0405,66.7323162275,-17.0238617565,4.19333662299,7.53657811245,0.220755894591,0.760853126706,-1.20320188082,3.09448973139,1.74163094805
+14929,ABERDEEN,SD,45.4433,-98.413,44.041322314,-28.6802102795,7.48791930458,9.54613056683,0.0946074380165,0.437788376289,-1.06135146418,4.3557582752,2.24670138607
+03145,YUMA,AZ,32.65,-114.61667,76.5405777166,-18.0044013231,6.08359070139,4.67430488118,0.0131843191197,-0.961408285165,-0.35110095207,2.99374512471,2.2011964641
+03144,IMPERIAL,CA,32.83417,-115.57861,74.6277777778,-18.2400409525,6.75793635846,4.31628639631,0.00910416666667,-1.14377283821,-1.052939544,3.59776239777,1.76301711047
+94992,GRAND MARAIS,MN,47.74722,-90.34444,40.986013986,-20.3063440699,9.40613524332,7.47778830321,0.136426573427,1.61065489781,-0.902531862135,3.33755224755,1.71806325379
+94993,SISSETON,SD,45.66889,-96.99139,44.3722222222,-27.6223770889,9.50985301529,9.4453003736,0.112291666667,1.56404127379,-1.77592048092,5.04807566127,2.02081955274
+94990,WINNER,SD,43.39056,-99.84222,51.0388349515,-25.3578103828,7.5359979158,10.5556239433,0.0609778085992,0.628460572673,-0.677588588176,4.54336751336,2.53622968965
+94991,LAMONI,IA,40.6306,-93.9008,52.8257261411,-23.8836059928,6.12650831375,10.0971155879,0.14601659751,1.24628280074,-1.08365341669,4.93807890145,1.87511674013
+94994,BOSCOBEL,WI,43.15611,-90.6775,49.0594744122,-25.6776291567,6.99236416004,8.86883731377,0.131597510373,0.546374163438,-0.684813959593,2.57466273523,1.79926613083
+93719,NEW BERN,NC,35.0677,-77.048,64.1404958678,-16.2643213907,4.97186587193,7.67664819223,0.192789256198,0.143854178438,-0.928101595915,2.99531836576,2.02432525768
+03028,SPRINGFIELD,CO,37.28333,-102.61389,55.3093922652,-22.420211732,6.4330186277,9.27030018316,0.0467403314917,-0.534171881854,-1.40865803783,4.35073831354,2.63840403573
+03029,WINDOW ROCK,AZ,35.6575,-109.06139,48.0169731259,-20.3785900893,7.50075891525,5.54425413806,0.0413932107496,-0.813966094013,-1.51022382551,3.27348062679,1.58951702352
+04724,NIAGARA FALLS,NY,43.10833,-78.93806,49.8292011019,-21.8249481674,6.86001428072,8.27805287094,0.153780991736,1.8015856845,-1.11994285129,4.53660031066,2.03204920205
+04725,BINGHAMTON,NY,42.2068,-75.98,48.3779310345,-21.5227802197,6.49363074175,7.9650014529,0.197213793103,1.24566048456,-1.07823849882,2.92153284739,2.62446074591
+03024,BORGER,TX,35.695,-101.395,62.2965517241,-21.7890557451,5.92098441562,9.00380612263,0.0724137931034,-0.624774156035,-0.85539253153,3.6360734437,2.77047626468
+54791,ROCHESTER,NH,43.27806,-70.92222,49.4341192788,-21.6841327083,5.86701430282,7.86837656867,0.14527739251,1.00581621901,-1.04575225616,3.01921329163,1.59454972182
+27502,BARROW,AK,71.2834,-156.7815,14.126227209,-25.7334043118,18.645973242,6.71031250605,0.0556872370266,0.901669301751,0.23357616935,5.32298485254,2.24167429507
+94908,DUBUQUE,IA,42.39778,-90.70361,48.1813186813,-25.3437819505,6.55680595992,8.97199501781,0.149423076923,1.64362539662,-1.60568050651,4.25971831897,2.27043852368
+53910,HOUSTON,TX,30.0675,-95.55611,70.0892857143,-15.011594995,3.94101128668,6.96074459134,0.167657967033,0.517771397601,-1.1721495416,2.592740823,2.10414186297
+94860,GRAND RAPIDS,MI,42.8825,-85.52389,51.1289437586,-22.754947006,6.71169565483,7.90330392256,0.193868312757,1.24338313929,-1.00802280839,3.7096136864,2.35361471836
+13878,BRUNSWICK,GA,31.1522,-81.3908,69.5179558011,-13.1215375904,4.31445891826,6.08618503282,0.191167127072,-0.632863751937,-0.548431760723,2.8605572041,2.64683007525
+12876,WINTER HAVEN,FL,28.06222,-81.75417,74.3489655172,-9.35988338854,3.30994014658,4.89883364594,0.18064137931,0.112944337827,-0.402701170022,2.72255634926,2.63889918241
+13973,JUNCTION,TX,30.51083,-99.76639,68.2223756906,-17.9286263914,4.15210547459,7.84091402315,0.0818162983425,-0.76416458661,-1.39520118576,2.92310287947,2.20197593973
+13972,TYLER,TX,32.35417,-95.4025,67.8589211618,-17.5108462817,5.17653731436,7.32155287814,0.147738589212,0.393057927476,-1.35249182786,3.27688155785,2.35523993999
+12873,ST PETERSBURG/CLEARWATER,FL,27.91056,-82.6875,74.7862068966,-9.0921475899,3.66463785421,4.49110923433,0.233772413793,0.445161902756,-0.81715161563,3.18471027994,2.42027104239
+12871,SARASOTA/BRADENTON,FL,27.40139,-82.55861,74.5841313269,-8.87862555492,3.98589424223,4.26211976323,0.202038303694,0.0766577627918,-0.882192494066,2.90290343735,2.66787945599
+13976,LAFAYETTE,LA,30.205,-91.9875,69.8553719008,-14.2007278088,4.11883420828,6.65767015841,0.254566115702,1.23661219439,-1.20591271745,3.33033671055,1.64470170568
+13870,ALMA,GA,31.5358,-82.5067,68.0865384615,-13.7382475983,3.91845874685,6.30596512724,0.184326923077,0.347114468747,-1.05226185726,2.37706687706,1.87927835467
+13871,ANNISTON,AL,33.5872,-85.8556,63.5759668508,-16.3850633829,3.78658777826,6.45475274355,0.249696132597,0.753927813193,-0.903829458748,2.31336925268,1.87595603275
+13873,ATHENS,GA,33.948,-83.3275,63.0864197531,-16.4492924925,3.91754090149,6.20794783001,0.200102880658,0.990024805112,-1.01514493077,2.74258120941,1.6744511442
+13874,ATLANTA,GA,33.6301,-84.4418,64.2197802198,-16.3630859453,3.92523487652,6.08353458536,0.211050824176,0.943005664743,-1.04198603861,3.27233595259,2.30486961045
+13876,BIRMINGHAM,AL,33.56556,-86.745,64.3681318681,-16.7335729966,3.92740182566,6.80885279879,0.24084478022,0.76918338143,-1.26041575839,2.88850808774,1.85549606295
+13877,BRISTOL/JHNSN CTY/KNGSPRT,TN,36.4731,-82.4044,57.3131868132,-18.3487590718,4.53918509889,6.64579999704,0.216366758242,0.75895691404,-1.3065974043,2.93073119119,1.2644052376
+94017,WOLF POINT,MT,48.09444,-105.57444,43.0373443983,-27.8016320558,7.32794686069,9.18141542954,0.0495850622407,-0.614646234966,-0.90449121312,3.81361093729,2.0366012965
+94014,WILLISTON,ND,48.1738,-103.6366,42.4275862069,-27.3954931141,8.23526531593,9.46028558723,0.084124137931,-0.350526178482,-0.854511186982,4.02826405727,2.00503926043
+94012,HAVRE,MT,48.5428,-109.7633,45.1234396671,-24.2564539992,7.19834540117,9.43510807289,0.0843828016644,0.270147857127,-0.9937621187,4.30601904454,2.25137233475
+93915,ALEXANDRIA,LA,31.33472,-92.55861,67.8060522696,-15.9769095791,4.2528006397,6.84365978807,0.223782668501,1.0137866413,-1.2383818206,2.84146504919,1.89219861516
+93919,MCCOMB,MS,31.1827,-90.4708,67.0137362637,-14.9183401572,3.85706044565,6.88436906916,0.261407967033,1.10115054925,-1.19945263095,2.89858961772,1.63441556922
+23081,GALLUP,NM,35.5144,-108.794,50.2451523546,-20.5369330004,5.69134016697,6.07290614835,0.0331163434903,-1.11367955746,-1.57901452761,3.93590753958,1.67370156941
+54768,NORTH ADAMS,MA,42.7,-73.16667,48.679558011,-21.2313087817,6.40295542185,8.22072365083,0.153625690608,2.43971729474,-1.40871085604,3.62011062066,1.40547733442
+53917,NEW ORLEANS,LA,30.0494,-90.0288,72.5145228216,-13.6711360617,3.87520199335,5.85096788196,0.278257261411,1.72045497949,-0.941037659425,4.07856591593,2.48989152838
+53916,CHILLICOTHE,MO,39.82333,-93.57917,55.3898071625,-23.6737636747,6.09509429487,8.74592889834,0.141404958678,0.789827945635,-1.17329668362,2.69537400702,2.10415607947
+53915,NEW IBERIA,LA,30.0375,-91.8839,70.932320442,-13.9507854323,4.02391921975,6.83416751826,0.249281767956,1.7622014339,-1.51584199751,3.75340075289,1.86655773997
+53914,MC KINNEY,TX,33.19028,-96.59139,66.0781893004,-19.6062959859,5.34011543766,7.53308447535,0.125390946502,0.27382208395,-1.25655531138,4.0745327505,2.03472041755
+53913,GUTHRIE,OK,35.8517,-97.4142,63.1560773481,-21.4559463592,5.94032059972,8.78549393318,0.132223756906,-0.122450243255,-1.0529239536,3.9332495938,2.12861540844
+53912,CORSICANA,TX,32.03111,-96.39889,68.2168508287,-17.9307717339,4.98993294096,8.04227109245,0.151616022099,0.526083389007,-1.19867686244,3.40753073926,2.52086269629
+53911,TERRELL,TX,32.71,-96.26722,66.9298486933,-18.7732829632,5.4587596096,8.11151955093,0.135639614856,0.29907659084,-1.28067623854,3.38114524603,2.25243752568
+03847,CROSSVILLE,TN,35.9509,-85.0813,57.0801104972,-17.8412581477,4.64017790627,7.22716724791,0.219737569061,1.49709926782,-1.22935384993,2.70472069276,1.67274550913
+03849,LONDON,KY,37.08722,-84.07694,57.1141678129,-18.9818917473,4.31089437692,7.27298325004,0.211114167813,1.14855136509,-1.08220380405,2.71253069796,1.609474746
+92809,HOLLYWOOD,FL,25.99889,-80.24111,77.1177285319,-6.22541029778,3.29697703409,3.87085025906,0.246627423823,0.599195378235,-0.848893987467,3.29106813377,2.36277052468
+53919,MONTICELLO,AR,33.6361,-91.7556,65.1395027624,-18.1478420982,4.79258907634,7.48334086479,0.199640883978,0.560903824183,-0.938230205185,2.45280797843,1.99849875929
+53918,MOUNTAIN HOME,AR,36.36889,-92.47028,60.0538674033,-20.550770827,4.21110041398,7.66049203092,0.154185082873,0.753094341856,-1.19590253222,2.4037047812,1.9457188496
+23158,BLYTHE,CA,33.6186,-114.7142,74.8644536653,-19.4958838638,5.85337864703,5.21190325983,0.0150414937759,-1.40612303295,-1.11752832386,3.702347666,1.94396485623
+23159,BRYCE CANYON,UT,37.70639,-112.14556,41.5988857939,-21.7166445684,6.12116867175,6.2404030959,0.0539206128134,-0.298622484199,-1.16941261209,2.88543104644,2.79494599789
+11624,CHRISTIANSTED,VI,17.6997,-64.8125,80.487534626,-2.45215326888,2.71307912717,5.56627704384,0.151641274238,-0.873958147883,-0.95600534147,2.92529838586,3.25861116198
+23152,BURBANK,CA,34.20056,-118.3575,67.0151515152,-9.53927796027,6.07847147269,4.57503305642,0.0232644628099,-1.25327230469,-0.678759894415,1.96338529578,2.42125514514
+23153,TONOPAH,NV,38.0511,-117.0902,54.0247933884,-21.0501392769,5.97727361647,5.32600858239,0.0217561983471,-0.439424374309,-1.66545734896,3.74837468288,2.57356722073
+23154,ELY,NV,39.2952,-114.8466,46.7333333333,-21.4254163556,5.6193351086,7.3762682205,0.0698958333333,-0.338041506636,-0.533982086871,3.44365687401,2.68145988861
+23155,BAKERSFIELD,CA,35.4344,-119.0542,67.1556473829,-16.9698445592,5.60782528219,4.93753971672,0.0161983471074,-1.43931181845,-0.592825144282,2.07880272341,2.47632740004
+23157,BISHOP,CA,37.3711,-118.358,57.544077135,-19.4944245705,4.44290003161,5.21374977176,0.011632231405,-0.91018687826,-1.37853984802,3.5869708475,2.2480734992
+24090,RAPID CITY,SD,44.0433,-103.0536,48.53259362,-23.9503705185,7.1650967896,9.53053829437,0.09326629681,-0.258179639685,-1.16018963688,5.29933402703,1.9120242038
+24091,IMPERIAL,NE,40.51,-101.62,52.8407202216,-24.4205726585,6.00243730727,8.89649889089,0.0495498614958,0.0522663835376,-1.3824967767,4.03317488378,2.48245827522
+26523,KENAI,AK,60.5797,-151.2391,33.4930555556,-21.438831479,7.39317962143,7.21434302662,0.0895625,-0.015870418729,-0.230101649816,4.37106168418,1.69625710643
+93197,SANTA MONICA,CA,34.01583,-118.45139,63.3305898491,-5.21056645365,4.57438561499,3.82786959293,0.0240946502058,-0.536230475925,-0.508737113814,1.19262070871,3.43884232257
+13809,LAWRENCEVILLE,IL,38.76417,-87.60556,56.6349862259,-22.6579852605,4.67622098078,8.14625596982,0.172045454545,1.88061747091,-1.42802033824,3.95010530371,2.02996994379
+53842,INDIANAPOLIS,IN,39.825,-86.29583,53.8914835165,-22.7854990726,5.1575295197,8.20370833619,0.159230769231,1.44416089429,-1.11927707561,3.27480181144,1.94018116425
+04826,WISCONSIN RAPIDS,WI,44.35917,-89.83694,46.4125,-25.6732073434,8.26908021071,8.80616637842,0.139895833333,0.423436909513,-0.799930660082,2.94155014983,2.36194435719
+23233,SALINAS,CA,36.6636,-121.6081,58.6151724138,-5.30207223128,3.50484486408,4.54933619079,0.0351931034483,-1.11114890828,-0.622232348596,2.42211536363,3.06975896214
+23232,SACRAMENTO,CA,38.5069,-121.495,62.1101928375,-14.1821708261,4.47262034701,4.46441339039,0.0557024793388,-1.67705227741,-0.777780576687,3.36691390902,1.5715644822
+23234,SAN FRANCISCO,CA,37.6197,-122.3647,58.0691562932,-5.74171434005,3.38661373143,3.77444669238,0.0515352697095,-3.77955976021,-1.01146205556,4.83471166544,2.14307178591
+23237,STOCKTON,CA,37.8891,-121.2258,62.1786703601,-14.7721968861,4.51954182346,4.29797574059,0.0378324099723,-2.13352702538,-1.03181879122,3.57173393795,1.94277017614
+93167,KINGMAN,AZ,35.2577,-113.933,62.8383977901,-20.6308656786,5.51254529768,5.25334858045,0.03,-1.63856437104,-1.51267906134,3.77733622787,2.36025311898
+93778,YORK,PA,39.91806,-76.87417,53.6310013717,-20.6440267965,6.15507090616,7.67520400781,0.173065843621,1.00890417879,-1.24857396475,2.93538180218,1.54535740066
+14898,GREEN BAY,WI,44.4794,-88.1366,47.0785123967,-24.9432520835,7.29474716466,7.98524873652,0.164297520661,1.13844059279,-1.34339884648,3.64170933196,2.31640533666
+14897,WAUSAU,WI,44.9288,-89.6277,45.4820936639,-26.4430793174,6.9974520702,8.23359103934,0.167830578512,0.516225165509,-0.525421571566,3.11875031781,2.33842868567
+14895,AKRON,OH,40.91667,-81.43333,52.4640883978,-21.7863528434,5.53864761856,8.29734492685,0.183066298343,1.58729968713,-1.2921201028,3.56440289627,2.38658990113
+14894,WHEELING,WV,40.17639,-80.64722,53.0997229917,-20.4473273695,5.3356105107,8.51355353691,0.138490304709,2.00136766935,-1.44840056349,3.50165432535,2.09089932013
+14891,MANSFIELD,OH,40.82028,-82.51778,51.7213793103,-21.7265371666,5.88799359969,8.41946621025,0.187075862069,1.90265160398,-1.26592527228,3.84241267349,2.21523891166
+53863,ATLANTA,GA,33.875,-84.30222,62.5975274725,-16.9075509713,4.09268719454,6.09165480397,0.203777472527,0.914646968674,-1.26023106613,3.09480137587,1.6046050983
+53862,PERRY-FOLEY,FL,30.07194,-83.57361,69.7974683544,-12.5553477283,4.22660945013,5.85850420445,0.251202531646,0.417326853089,-0.992153066939,2.48570156279,2.02989383069
+53860,JACKSONVILLE,FL,30.3361,-81.5147,71.2167352538,-11.8716287751,4.43298155179,6.11478014324,0.244074074074,0.228722788194,-0.843258353491,2.91216660918,2.19409656707
+53867,COLUMBIA,SC,33.97056,-80.99583,66.0578512397,-15.9975372914,4.90936943963,6.40765510895,0.195929752066,0.27641824641,-0.844306805406,2.25769070413,1.36173664518
+53866,SHELBYVILLE,IN,39.57806,-85.80333,55.3375174338,-21.8675947918,5.18450680693,9.13517311526,0.129539748954,1.92220604721,-1.66213711079,3.83630261554,2.12696806892
+53865,SLIDELL,LA,30.34333,-89.82222,68.5947441217,-13.8987755655,4.29012835944,6.76890969663,0.280145228216,0.877556768953,-1.02837210441,2.69953347267,1.68114699536
+53864,ALABASTER,AL,33.17833,-86.78167,64.9006896552,-15.9268483622,4.32832243034,6.64833682068,0.248089655172,0.919598690056,-1.00748955445,2.33145123391,1.52067487356
+03935,CAPE GIRARDEAU,MO,37.2252,-89.5705,58.4393939394,-20.9258026395,4.91671755702,7.7375775935,0.139421487603,1.37693263558,-1.48238499003,3.7524300095,1.81311343583
+03936,MANHATTAN,KS,39.1346,-96.6788,56.2503457815,-24.1034997155,5.21039562676,9.04120418385,0.104460580913,-0.258668457375,-1.27392362734,3.66137329457,1.88272553527
+53868,OAK RIDGE,TN,36.0236,-84.2375,60.4683195592,-18.6231975791,4.159065542,6.3088145874,0.239173553719,0.467228820455,-0.620034449882,1.57157654874,1.48944151129
+03930,JACKSONVILLE,AR,34.91667,-92.15,62.808297568,-20.0431727844,5.25211652433,7.28250162142,0.148669527897,0.219630675976,-0.994207040881,2.6511077673,2.0141120274
+03932,CLINTON,OK,35.3568,-99.2042,61.9432132964,-22.599350291,6.60511657923,8.43562892802,0.0636772853186,0.279263910959,-0.825792816582,4.64522038993,2.81977502783
+14792,TRENTON,NJ,40.27694,-74.81583,55.7441540578,-20.2032395363,5.58171077235,7.38643688117,0.162792297111,0.94186505276,-0.996722677823,2.8798264531,2.24647688123
+26415,DELTA JUNCTION/FT GREELY,AK,63.9944,-145.7214,28.123783032,-34.3409272455,6.86799785153,8.86982652898,0.0337969401947,1.63092660579,0.388867499722,7.0920614071,1.31173719307
+14794,WESTERLY,RI,41.34972,-71.79889,52.2949245542,-18.9093972147,7.28817586959,6.95653612762,0.11462962963,0.690340585451,-0.970033959245,2.72949323443,2.32324790463
+14972,SPENCER,IA,43.16444,-95.20167,48.0732044199,-26.9117397143,7.38003505078,9.49630393509,0.106761049724,1.16457699476,-1.61300761615,4.6371535154,2.33541893678
+94705,BARRE/MONTPELIER,VT,44.2035,-72.5623,44.7729805014,-22.8553880818,7.60008144839,8.56611254932,0.152632311978,0.663266792998,-0.992656237084,3.05477421274,1.68305889223
+24242,PORTLAND,OR,45.55111,-122.40889,54.3475274725,-13.5526380889,5.58970847162,5.00021225915,0.159869505495,2.88125944482,-0.543408672757,5.12242613288,1.06630877057
+94702,BRIDGEPORT,CT,41.15833,-73.12889,54.6611796982,-20.1849187793,7.4380934901,6.80354396396,0.173683127572,0.874778572555,-0.640508446685,3.38632400983,2.40643576036
+22521,HONOLULU,HI,21.32389,-157.92944,77.1383125864,-3.17144046866,2.50673590655,3.60703951628,0.0506846473029,-1.69530162295,-0.373200217525,3.79917126248,2.63943418827
+13896,MUSCLE SHOALS,AL,34.7441,-87.5997,63.1801925722,-17.9110675293,4.15684569117,6.96490603148,0.202324621733,1.2805885262,-1.34553062334,3.0742837009,1.66648452641
+13897,NASHVILLE,TN,36.11889,-86.68917,61.2297111417,-19.257326964,4.39466733035,7.54785609036,0.204986244842,1.16484315543,-1.02880490677,3.07457165895,2.00839866397
+24144,HELENA,MT,46.6056,-111.9636,47.0567081604,-21.9942778402,6.43480889907,7.81050021021,0.0521991701245,-0.672313303735,-1.18553927393,3.48129493426,1.84574646786
+13895,MONTGOMERY,AL,32.2997,-86.4075,67.1291208791,-15.5927839565,4.15641400851,6.44381907959,0.204581043956,0.848334081408,-0.963241287756,2.79713287953,1.87623439755
+13893,MEMPHIS,TN,35.0564,-89.9865,64.4380165289,-19.2768504972,4.79150944896,7.35162911564,0.188533057851,0.655464914123,-0.895473447614,3.26796031736,2.32649476237
+13891,KNOXVILLE,TN,35.8181,-83.9858,60.4869684499,-18.3073083229,4.42753053307,6.57364810057,0.253991769547,0.680732864539,-1.22432087325,3.12330324401,1.70381673998
+24061,RIVERTON,WY,43.06417,-108.45889,47.2817679558,-25.7946141155,6.27907762191,7.73556535057,0.0428867403315,-0.978153712891,-1.16255416138,3.80071243998,2.16163311118
+93073,ASPEN,CO,39.23,-106.87056,42.3333333333,-22.223774671,6.58161811694,6.70397574137,0.060987654321,-0.940527926129,-0.363953044465,1.75220963797,3.27370302473
+93075,MOAB,UT,38.75,-109.76278,54.150997151,-28.3482373807,5.64601862791,6.32740839894,0.0219230769231,-2.08382905476,-1.2223084778,3.67387580554,1.59596856936
+13899,PENSACOLA,FL,30.47806,-87.18694,70.0864197531,-13.2648279577,3.99797504356,6.0556400862,0.263600823045,-0.0481832939692,-1.43902266069,12.1259735639,0.634593312268
+93773,WAKEFIELD,VA,36.98389,-77.00722,60.0,-18.1332567014,6.06117749116,7.99916676914,0.200283149171,0.435689915646,-0.608751782345,2.11855817093,1.54208130562
+23277,WATSONVILLE,CA,36.93583,-121.78861,57.4727272727,-5.96053126439,2.28947481273,4.74000831864,0.0553006993007,-0.751346586672,-0.425954759364,1.28230787345,2.92272413312
+54743,CALDWELL,NJ,40.87639,-74.28306,54.4596100279,-21.2750303278,5.69475899919,7.46383116238,0.148015320334,0.849857137525,-1.31550834325,2.75782255227,1.53384907306
+14820,CLEVELAND,OH,41.405,-81.85278,53.0082987552,-21.3998810916,6.60889336189,8.40800026703,0.199004149378,1.50408215068,-1.08098432548,3.86875367061,2.39912003096
+94266,PORT ANGELES,WA,48.12028,-123.49833,49.2122052705,-10.353211611,3.94919785388,3.81625458654,0.0707558945908,-0.838511621152,-0.408246623827,2.67997403815,2.02783134843
+12957,PORT ISABEL,TX,26.16583,-97.34583,76.1167582418,-10.6975490801,2.92504285608,6.22581332347,0.0691071428571,-0.437678292741,-1.7875456804,3.82042465542,2.98496821228
+94261,PORTLAND,OR,45.54056,-122.94861,52.1811894882,-13.5815288668,4.99052680835,5.10917850404,0.139170124481,-0.310170676253,-0.538827153092,2.85137073319,1.53855777708
+14750,GLENS FALLS,NY,43.35,-73.6167,47.7032967033,-22.8463501709,6.80078250947,7.8856764263,0.143489010989,0.272709783858,-0.868698818967,2.66896225107,1.7690128699
+23213,SANTA ROSA,CA,38.5038,-122.8102,58.391966759,-9.86718911909,3.77588606926,4.70755361375,0.103317174515,-1.1769946858,-0.671710807908,2.45616122361,1.81645072888
+12959,MC ALLEN,TX,26.18389,-98.25389,77.2027586207,-12.4613650584,2.89233549878,6.42713444651,0.0708413793103,-1.23705920017,-1.45395244707,4.00487349724,2.56707923316
+25367,KLAWOCK,AK,55.58,-133.075,45.3614627286,-10.2911528398,5.47997836131,4.02292546288,0.3355907173,1.00052123109,-0.199520951473,2.3804966932,1.60386814393
+94790,WATERTOWN,NY,43.9922,-76.0217,48.102351314,-22.3814916787,7.10403430013,9.83282949129,0.142531120332,1.25300088509,-0.698360044261,3.63180511041,1.98507492465
+94823,PITTSBURGH,PA,40.4846,-80.2144,53.2696011004,-21.1009617548,5.35403125654,8.38698068835,0.183425034388,1.17295895537,-1.37248435938,3.33560669885,2.00879504428
+94946,BROKEN BOW,NE,41.43333,-99.63333,49.9930747922,-24.332919395,6.48265553984,9.3671076872,0.0670013850416,0.366779142415,-1.5429507248,4.67211306083,2.06716599433
+93009,LEADVILLE,CO,39.22917,-106.31694,35.2948539638,-19.6347523391,7.61364198312,6.73711090926,0.060083449235,0.891700582896,-0.809271031025,2.54825000426,2.78497050948
+54740,SPRINGFIELD,VT,43.34361,-72.51778,47.9107142857,-22.8162608485,7.03514101192,7.603572333,0.147960164835,0.428341791985,-0.839007137707,2.45890238176,1.38557980983
+93005,DURANGO,CO,37.14306,-107.76028,47.2880886427,-22.6265645844,6.96194598802,5.29573538064,0.0491135734072,-1.02131082441,-0.843810865003,2.52806182676,2.23222914751
+93953,MUSKOGEE,OK,35.65667,-95.36139,61.8425414365,-20.7813390217,5.30014216889,7.5382140049,0.155117403315,1.01860782827,-1.07109794016,3.37409773118,2.45033790267
+94197,OMAK,WA,48.464444,-119.516944,49.4701803051,-22.9145047148,6.1112252394,5.75297426054,0.0577531206657,-1.51268739543,0.0423054570206,3.16491723536,1.88864101836
+23048,TUCUMCARI,NM,35.18222,-103.60306,61.687150838,-21.785257027,5.30765157919,8.61012832345,0.0332053072626,-0.262843063141,-1.45973990563,4.37894062723,2.45914175845
+23049,SANTA FE,NM,35.61694,-106.08889,52.9930747922,-21.7810720274,5.13464981079,5.62495077266,0.0389750692521,-0.154066619981,-0.959497270081,2.64035587301,3.3436376672
+23047,AMARILLO,TX,35.2295,-101.7042,60.1829436039,-20.9703431026,5.36594914388,8.90058012178,0.0614649243466,-0.292280612205,-1.31982468496,4.28088761387,3.04089836694
+23044,EL PASO,TX,31.81111,-106.37583,66.6313617607,-19.9378314424,3.92972721607,5.92235772261,0.032764786795,-0.558459346502,-1.56104312729,3.84259727653,2.14088202934
+23042,LUBBOCK,TX,33.6656,-101.8231,62.6533149171,-20.5318618178,4.4280150803,8.70443563012,0.0507596685083,-0.092146549183,-1.88212829652,3.99258780243,2.93081077137
+40308,YAP ISLAND,FM,9.48333,138.08333,83.5333333333,0.253838249605,-0.105207381487,2.38825778917,1.2195,-1.19473344902,0.473413680538,2.67678081948,3.13311669212
+23040,WINK,TX,31.7801,-103.2018,66.5048543689,-20.0314102091,4.49480064049,7.90171265981,0.0319140083218,-1.1489794338,-1.1588247724,3.27748555824,2.79251487819
+24227,OLYMPIA,WA,46.9733,-122.9033,50.7531380753,-11.8421469053,5.78452822918,4.91859234515,0.213661087866,0.457708766271,-0.873372437077,3.02972990846,1.69201875663
+03887,DECATUR,IL,39.83444,-88.86556,54.467032967,-22.6637520963,5.73839744893,9.07704897451,0.123214285714,1.94550315217,-1.58446440839,4.0508363307,2.26649031685
+23230,OAKLAND,CA,37.72139,-122.22083,57.9696132597,-6.76233638145,2.77742545904,3.83913050528,0.0561464088398,-2.29646634726,-0.636489820066,3.50435647888,2.2330531759
+25501,KODIAK,AK,57.75111,-152.48556,40.8781163435,-12.597196346,6.12789841411,5.53574767827,0.283462603878,2.25134109934,-0.430370230883,4.96321454414,1.93470471309
+25503,KING SALMON,AK,58.6829,-156.6563,33.9818688982,-20.5711648496,8.51040222248,9.14393695223,0.132259414226,0.789593757184,0.219732931303,4.65277908179,2.00342165796
+03888,ATLANTA,GA,33.77917,-84.52139,62.9010989011,-16.6394069539,3.9886906099,6.11929483646,0.206909340659,0.453425040154,-1.05549242771,2.60781585806,1.67043286635
+03889,JACKSON,KY,37.59139,-83.31444,57.4450549451,-18.6951788964,4.2813293703,7.8240684605,0.231325549451,1.65134248229,-0.912619216285,2.11731968276,1.27305623941
+25507,HOMER,AK,59.642,-151.4908,38.1329639889,-15.3170035242,6.83322834882,5.46658967094,0.103234072022,0.256958294692,-0.482659799937,3.05245405721,1.84420888091
+25506,ILIAMNA,AK,59.7494,-154.9089,35.1420612813,-20.5269813475,6.54703708614,7.91780240891,0.111831476323,1.6824930052,0.65674203354,4.64793315793,2.01958757991
+94299,ALTURAS,CA,41.49139,-120.56444,47.125,-18.4950152101,6.18867010775,6.25417082829,0.034375,-0.9483970375,-0.930880040397,3.31123694473,1.50032049943
+14777,WILKES-BARRE/SCRANTON,PA,41.3336,-75.7269,52.060857538,-21.3592954225,6.36767120482,7.86265262237,0.142053941909,1.1231074882,-1.2380205207,3.02561904746,1.96359116762
+14775,WESTFIELD/SPRINGFIELD,MA,42.15778,-72.71611,51.5130674003,-22.2318935441,5.96460195318,7.69495142157,0.17356258597,0.956352698998,-1.2938910365,3.37353271627,1.83987472514
+14770,SELINSGROVE,PA,40.82056,-76.86417,52.9156293223,-21.6637977196,5.7333835513,7.10412088771,0.160165975104,0.905610960834,-1.33369933635,2.71484136019,1.40419678421
+14771,SYRACUSE,NY,43.1111,-76.1038,51.0563186813,-22.1074902488,7.55698163666,8.25559266995,0.196236263736,1.53917033003,-1.04854449551,3.84521980171,2.01852591644
+24257,REDDING,CA,40.5175,-122.2986,63.3282548476,-17.2514355288,5.85061375709,5.49436936993,0.103358725762,-0.56205417627,-1.08135597924,4.13148523197,1.29151437718
+24255,WHIDBEY ISLAND,WA,48.35,-122.66667,49.3221757322,-8.30717267045,4.2711446792,4.22270818436,0.0862761506276,2.09467573041,-1.5892107081,5.12991051219,1.56282547087
+14778,WILLIAMSPORT,PA,41.2433,-76.9217,52.6246575342,-21.822871683,6.0013026868,7.01239973207,0.153924657534,0.983749912626,-1.23124987924,3.1929733471,1.68095993625
+94895,MUNCIE,IN,40.23417,-85.39361,53.5006915629,-22.3397319117,4.72147550961,8.76478339463,0.148381742739,2.01228342648,-1.57108139984,3.84044257298,2.0669946557
+94893,IRON MOUNTAIN/KINGSFORD,MI,45.81833,-88.11444,43.4148351648,-25.0098945081,7.65800425851,8.65039488923,0.0563736263736,0.791583000006,-0.792993015084,3.2641665458,2.03878845076
+94892,CHICAGO/WEST CHICAGO,IL,41.91444,-88.24639,50.2780082988,-23.9729651121,6.10913272425,8.60482998015,0.107738589212,1.46060343111,-1.49727774158,3.81589910675,2.25717175815
+94958,ORD,NE,41.62333,-98.94833,50.5607734807,-24.9590372379,6.7565228029,9.20978792577,0.0714571823204,0.270459777497,-1.30284046734,4.44764324131,2.01192902756
+94957,FALLS CITY,NE,40.08028,-95.59194,54.6916666667,-23.6586941144,5.03454842445,8.88530379572,0.129854166667,0.792641062628,-1.69501770687,3.72277114526,2.24250511449
+24220,ELLENSBURG,WA,47.03389,-120.53028,51.4416666667,-20.1017833959,6.53405452372,5.87688199363,0.0390416666667,-3.86477261828,-1.27038140987,6.29116056187,1.3491813765
+94899,COPPER HARBOR,MI,47.46667,-87.88333,43.4893009986,-20.7957431716,8.67893812429,7.24169893353,0.12532810271,2.85172118485,-0.342160113517,5.26061570798,1.79909295552
+94898,HARBOR BEACH,MI,44.02194,-82.79306,48.4909090909,-20.3956869705,8.57171653702,9.61274435832,0.116874125874,1.62349281048,-0.884259242092,3.57100643623,1.91746300365
+13841,WILMINGTON,OH,39.42028,-83.82167,53.8299039781,-21.4562280357,4.96394736096,8.11808247786,0.157304526749,1.98924645079,-1.41388946957,3.913905081,2.0265405212
+25331,PALMER,AK,61.5961,-149.0916,35.8587257618,-23.1352304958,5.65832685838,6.73238180355,0.0669182825485,0.504893996717,-0.379015533062,5.75511938717,1.11455627601
+40710,MAJURO,MH,7.06497,171.27203,82.7333333333,0.108309059384,0.361472393262,2.13959890448,0.485,-0.50045991648,0.448565209259,1.72271104174,3.22747104145
+93822,SPRINGFIELD,IL,39.8447,-89.6839,55.0220689655,-22.8976055052,5.46630175992,8.7230304584,0.149606896552,1.96937887162,-1.69993540012,4.04702018005,2.12594050812
+93821,LOUISVILLE,KY,38.1811,-85.7391,59.4869684499,-21.0995936177,4.95417746561,7.8893515074,0.206563786008,1.05551175193,-1.05251917985,3.32582912861,2.1523764262
+93820,LEXINGTON,KY,38.0408,-84.6058,56.8741355463,-20.3388529822,5.19628585677,8.07720713053,0.212178423237,1.63651945253,-1.0298006303,3.35686210511,2.24588982982
+93817,EVANSVILLE,IN,38.0441,-87.5205,58.1862068966,-21.7827695622,4.9197197597,8.03279723237,0.176648275862,1.04715193739,-1.03986402699,3.16141000166,1.94020804016
+93739,WALLOPS ISLAND,VA,37.9372,-75.4708,59.6873278237,-18.4176739729,6.74508016585,7.49825584159,0.18708677686,-0.0491442181004,-0.915826423384,3.3419827108,2.68361503258
+93824,ZANESVILLE,OH,39.94444,-81.89222,53.1980609418,-21.0904774944,4.92510252309,8.20731391284,0.154736842105,1.46919028165,-1.29024007036,3.12580203564,1.70704110988
+93736,CHARLOTTESVILLE,VA,38.13861,-78.45306,58.1109570042,-19.4192415628,4.34339891527,7.77656841261,0.168890429958,0.714756798044,-0.8157954643,2.41714118683,1.85011259616
+13920,TOPEKA,KS,38.95028,-95.66389,56.7367688022,-23.3694857125,5.78640180314,9.10671776292,0.101866295265,0.780369007728,-1.1845215858,4.05869344368,2.21276116185
+93730,ATLANTIC CITY,NJ,39.4494,-74.5672,55.8786610879,-19.6595483245,5.52939299142,7.92634218885,0.196129707113,0.805940024745,-1.30316186442,3.56573483147,2.26180392196
+03971,DALLAS,TX,32.68083,-96.86806,68.367768595,-18.8070433055,5.45746515656,7.67803939439,0.136859504132,0.606613336412,-1.38136332296,3.05608464407,2.55773892973
+03974,WICHITA,KS,37.74611,-97.22111,58.4979367263,-22.6573054967,6.24081817439,8.62576447925,0.130295735901,0.594286396576,-1.14443401034,4.35600611062,2.43872675932
+03975,POPLAR BLUFF,MO,36.7725,-90.32472,60.5524861878,-20.5548331678,5.03744213747,7.28641958958,0.196408839779,0.909236727545,-1.61636921436,3.29321240021,1.85032349778
+53820,EVERGREEN,AL,31.41556,-87.04417,67.2606896552,-14.797102343,3.48416289725,6.66598272087,0.236731034483,0.887075231374,-0.900104509035,2.37592445141,1.66544248277
+94040,MC COOK,NE,40.20639,-100.59139,53.8514442916,-25.1312418408,7.02685009023,8.93172246806,0.0454951856946,-0.470227937354,-1.25005345944,4.05394059701,2.47196097323
+94041,GARRISON,ND,47.64583,-101.43944,41.9019337017,-27.5016966458,8.99359582028,9.51017596028,0.0958011049724,0.57001143841,-0.895608848275,4.47584677179,2.12333660341
+23161,DAGGETT,CA,34.8536,-116.7858,69.305785124,-20.5609985118,5.79646810492,5.15639012259,0.0105371900826,-2.66334432027,-2.19040776317,5.57686527396,1.89562143337
+03878,TROY,AL,31.86056,-86.01222,65.6685159501,-15.1891575807,3.96775060118,6.72915502092,0.226310679612,0.89542704661,-0.866531412945,2.52413591105,1.72410383308
+23169,LAS VEGAS,NV,36.0719,-115.1634,70.8982118294,-22.0060699663,5.39195234774,5.13358642137,0.0166093535076,-1.59895198937,-1.09577188257,3.86005196507,2.23643032648
+93812,CINCINNATI,OH,39.10333,-84.41889,55.18395574,-21.0116489641,4.23174908649,7.51422479026,0.130809128631,1.40849673,-1.12062276268,3.37146572618,1.55794518155
+03872,BECKLEY,WV,37.7836,-81.123,53.520718232,-18.4504940794,4.60005438364,8.15723946383,0.198397790055,1.47057258439,-1.47203900182,3.05724032919,2.14769576233
+23285,LIVERMORE,CA,37.6927,-121.8144,61.2258953168,-11.883398031,5.23654044102,4.87030056426,0.0410123966942,-2.36642340424,-0.232593985801,2.95719674013,1.9834881659
+14839,MILWAUKEE,WI,42.955,-87.9044,49.8082758621,-23.1240922862,8.07358358187,8.53361415626,0.160117241379,0.922403546578,-0.964518872556,3.48248874612,2.64269982898
+93193,FRESNO,CA,36.78,-119.7194,67.1914600551,-17.2970760426,6.02533715554,4.66207151602,0.0268181818182,-2.65107039236,-0.719660236795,3.22279127691,1.66030809523
+93810,CARBONDALE/MURPHYBORO,IL,37.77972,-89.24972,57.6620879121,-20.9888665182,4.528916135,8.1396598924,0.156222527473,1.51723554528,-1.31844073358,3.82283993409,1.76947588535
+12919,BROWNSVILLE,TX,25.9141,-97.423,76.2786206897,-11.0831065354,3.31743281151,6.07230964236,0.0981310344828,-0.322282945523,-1.9367051235,4.11132550208,2.4188859727
+92806,ST PETERSBURG,FL,27.76472,-82.6275,76.0137362637,-8.98683894504,3.86602704697,3.97209890099,0.174519230769,-0.188645134025,-0.105311660629,3.44309651074,2.58081322532
+14833,JACKSON,MI,42.2667,-84.4667,49.9067215364,-22.5047120446,6.2038986625,8.30738789642,0.119609053498,1.80107409258,-1.2635580432,3.39465648882,2.02238280874
+14835,LAFAYETTE,IN,40.41222,-86.93694,52.9361111111,-22.4436328747,5.69304746461,8.69859530967,0.139,1.35885251241,-1.69097670275,3.41203741268,1.99025758278
+14837,MADISON,WI,43.1405,-89.3452,49.044077135,-25.0466049215,7.43162008022,8.70761588015,0.17347107438,0.65997348276,-1.09613291889,3.14643731387,2.17054271316
+14836,LANSING,MI,42.78028,-84.57889,50.0164835165,-22.9076873615,6.5454097328,8.18424651465,0.157932692308,1.48448877938,-1.18815038,3.86530423739,2.09549488922
+26412,NORTHWAY,AK,62.9617,-141.9378,23.4937586685,-39.3063710516,5.39748161402,7.54354562101,0.0384049930652,-1.2394970083,-0.284043604968,2.54480493023,1.16006918915
+26410,CORDOVA,AK,60.4888,-145.4511,38.5941828255,-14.3246316357,4.97943021393,6.00956245363,0.469716066482,0.371635849774,-0.431819816323,3.24622015943,1.19256533746
+26411,FAIRBANKS,AK,64.8039,-147.8761,26.8597222222,-39.0387692972,7.40066547623,8.85812145101,0.0718541666667,-1.19151682876,-0.550072072681,2.70741342996,1.38688131985
+93775,RICHMOND/ASHLAND,VA,37.70806,-77.43444,58.6413793103,-18.9198377792,5.0653792776,8.09477776416,0.196944827586,0.557168054184,-1.06998172319,2.70251936891,1.58574894621
+03967,OLATHE,KS,38.85,-94.73917,56.6068965517,-22.7890221577,6.12639073008,8.47854446377,0.126103448276,0.757466047483,-0.971282356723,3.28840162338,2.55019609098
+25325,KETCHIKAN,AK,55.35667,-131.71167,45.9337016575,-11.2035375896,5.21222223717,3.95311702737,0.607976519337,-0.0613660301003,0.00641707005456,4.03055578421,1.90523194754
+13993,ST JOSEPH,MO,39.7736,-94.9233,54.8606896552,-23.8579292274,5.53055711711,8.9711566256,0.109448275862,0.715973386803,-1.84549472526,4.14324406954,1.98864661062
+93230,SOUTH LAKE TAHOE,CA,38.8983,-119.9947,45.7261410788,-15.3039922706,5.76544295952,5.65903787399,0.0619294605809,-0.135884999159,-0.620091028195,3.29992573564,1.47641530381
+13997,ROLLA/VICHY,MO,38.13111,-91.76833,56.4102209945,-21.5735079299,4.91536014102,8.96663414035,0.154288674033,1.8076109227,-1.21024889469,3.68991117877,2.31009168953
+13996,TOPEKA,KS,39.0725,-95.6261,57.643741403,-23.3366091903,5.59557655506,8.78693841339,0.124436038514,0.353880190248,-1.40254014527,3.65726854645,2.08734336671
+13995,SPRINGFIELD,MO,37.2397,-93.3897,57.8707015131,-21.2345739004,5.57945329733,8.23490845187,0.175646492435,1.02064232565,-1.04509355364,3.8762234134,2.42816358486
+13994,ST LOUIS,MO,38.7525,-90.3736,59.1991758242,-22.7218519498,5.45525320058,8.69799755936,0.16157967033,1.10262457217,-1.26372223259,3.43659095905,2.40235357998
+03026,BURLINGTON,CO,39.24472,-102.28417,52.608815427,-22.9932988871,6.86576203234,9.31901639592,0.0579752066116,-0.20830741822,-1.14763214386,4.06061787464,2.93862781392
+03904,COLLEGE STATION,TX,30.58917,-96.36472,70.7231404959,-16.5038980288,4.411315002,6.87790712506,0.165785123967,0.245570035029,-1.41016304692,3.44171241765,2.26787452106
+03901,LONGVIEW,TX,32.38472,-94.71167,67.5546334716,-17.7838931142,4.55501088973,7.68777525153,0.157676348548,0.24695090078,-1.31054777986,3.17842712467,2.10883118877
+94052,MOBRIDGE,SD,45.54639,-100.40778,45.8436213992,-27.4313060231,8.06257379261,9.38476313575,0.0907407407407,-0.448846703482,-0.521800642699,4.44961254331,2.26594535525
+93819,INDIANAPOLIS,IN,39.7318,-86.2788,55.0315934066,-23.0350631964,5.47075687954,8.00291812267,0.181504120879,1.3662785975,-1.373800722,3.78642710876,2.40288572499
+12918,HOUSTON,TX,29.63806,-95.28194,71.8443526171,-14.0584062328,4.08624620402,6.23371838845,0.191384297521,1.02013200959,-1.23750840166,3.19636273604,2.26522972069
+14944,SIOUX FALLS,SD,43.5778,-96.7539,47.8514442916,-27.3975062912,7.72385548818,9.35024729513,0.104339752407,0.190364971915,-1.05642676068,4.29442087305,2.22754709938
+25323,HAINES,AK,59.2433,-135.5094,40.6680440771,-17.8475902014,4.0088579777,5.20795262184,0.174152892562,2.19732338573,-0.71303165482,3.47583438762,2.56560867392
+14946,WATERTOWN,SD,44.9047,-97.1494,44.2140883978,-28.5017535149,8.62602328467,9.02429145894,0.0983494475138,0.951662317986,-0.741596615421,4.46969757235,2.23342511323
+14941,NORFOLK,NE,41.9855,-97.4352,51.1950549451,-25.5557513115,6.69622853149,9.48632215381,0.0889491758242,0.426709497908,-1.06255558772,4.55871746704,2.28462777147
+14940,MASON CITY,IA,43.1544,-93.3269,47.5468319559,-26.4806325552,6.92648554407,9.08032165616,0.137458677686,1.71465672675,-1.73834437227,4.68190592354,2.30722360363
+14943,SIOUX CITY,IA,42.3913,-96.3791,50.3502747253,-26.3534790271,6.14454270811,9.08234805814,0.117815934066,0.874019477545,-1.46037958358,4.39969211544,2.19427192308
+14942,OMAHA,NE,41.3102,-95.8991,53.6497252747,-25.8726582843,6.15189023777,8.83540578995,0.117053571429,0.279219888576,-1.07501404604,4.24630637673,2.34677128921
+12912,VICTORIA,TX,28.8614,-96.9303,72.090784044,-14.2594264116,4.25856580754,6.79491505747,0.11007565337,0.248813288802,-1.74688195525,3.63650116182,2.428192211
+94224,ASTORIA,OR,46.1569,-123.8825,51.0137931034,-8.78875256598,4.05557761527,4.29684670875,0.311027586207,-0.0473002617222,-0.594466861986,3.3198879227,2.11386446376
+94051,JORDAN,MT,47.32583,-106.9475,45.68,-25.3172124637,5.99963140739,9.69646830297,0.0530068965517,-0.65739670418,-1.14493560482,3.75373184109,2.17457159068
+12916,NEW ORLEANS,LA,29.9933,-90.2511,71.0702479339,-13.496791048,3.6405449252,6.24355648824,0.276115702479,1.40166345336,-0.9649705464,3.46033415335,2.22219338933
+94227,SHELTON,WA,47.238,-123.1408,49.9684065934,-12.4777945874,4.66805839509,4.90450238765,0.264024725275,-1.41025551083,-0.904305804236,3.8038126191,1.47289323927
+94119,DEER PARK,WA,47.97417,-117.42833,46.1625,-19.3856560863,5.15917335778,6.46802136967,0.0939166666667,-0.584831982875,-0.780662743467,3.25252451512,1.52774491158
+94248,RENTON,WA,47.49333,-122.21444,53.4331034483,-12.7241418047,5.23062458695,4.284519756,0.144020689655,-0.499619286684,-0.744638103035,2.28427799837,1.93955497614
+14609,HOULTON,ME,46.1236,-67.7928,42.1569444444,-24.4762656131,8.51531823841,9.57903224069,0.181645833333,0.670027502298,-0.754808737894,2.93303475635,2.0517713449
+14606,BANGOR,ME,44.7978,-68.8185,45.8689655172,-23.1091671991,7.77269053024,7.96658005274,0.194379310345,0.45538426589,-1.08698831717,3.31008666809,2.04520116307
+03963,JEFFERSON CITY,MO,38.59111,-92.15583,57.7898351648,-22.1937426271,4.68939092198,8.67362799886,0.145673076923,0.929736056044,-1.58497389385,3.15005493679,1.96538522432
+12917,BEAUMONT/PORT ARTHUR,TX,29.95056,-94.02056,70.3933975241,-14.0025766166,3.91173088829,6.50788388738,0.245467675378,1.49305859245,-1.43048022004,3.62714762147,2.15098102872
+53869,BLYTHEVILLE,AR,35.94028,-89.83083,61.6019417476,-20.3114458521,3.20839532174,7.71208910474,0.165145631068,1.67386280034,-1.64916645084,3.90272235543,2.02245111704
+94056,FAITH,SD,45.03194,-102.01917,47.2743732591,-26.3918405697,6.17502460642,9.65617565753,0.0639275766017,0.410555096243,-0.951351816591,4.60999563227,2.73699798286
+24036,LEWISTOWN,MT,47.0492,-109.4578,44.2420470263,-20.2522915009,8.00307893478,9.29529690791,0.077489626556,1.13781939255,-0.986244143174,3.86768985445,2.30229533661
+24037,MILES CITY,MT,46.4266,-105.8825,48.6298342541,-26.3364969863,6.4761607506,9.1583444381,0.0470511049724,-0.537206590802,-0.887680384696,3.43974520429,2.71079599215
+13744,FLORENCE,SC,34.1852,-79.7238,65.1444291609,-16.192702102,4.11184283262,7.25653531362,0.19803301238,0.344022085228,-0.899347378496,2.83621197304,2.1152067432
+93042,DALHART,TX,36.0167,-102.55,57.9403606103,-21.9596120927,5.48880994408,8.29273512769,0.03520110957,-0.3792859319,-1.54173606946,4.23922353458,2.77603633344
+24032,VALENTINE,NE,42.8783,-100.55,50.0877914952,-25.5559190137,7.01396881625,9.9219976816,0.0880658436214,-0.429678628272,-0.721811415639,4.01160199925,2.50559261141
+13743,WASHINGTON,VA,38.8483,-77.0341,60.5274725275,-20.3195975139,5.92183481839,6.98219521958,0.158200549451,0.460512502201,-1.0590263387,3.26311622008,2.49386603983
+13740,RICHMOND,VA,37.505,-77.3202,60.5991735537,-18.737982362,5.80892142826,7.73175155861,0.186384297521,0.487509917228,-1.11041380438,3.1642074145,2.1977050109
+13741,ROANOKE,VA,37.3169,-79.9741,58.5179063361,-18.3912880118,4.44845664389,7.41881025105,0.182561983471,1.04855503632,-1.37865793365,3.3929151593,1.7576732938
+94054,BUFFALO,WY,44.38139,-106.72111,48.3633802817,-22.3986871793,7.83811920924,9.23411882033,0.0390633802817,-0.419273949669,-1.18175167426,4.49983770344,2.02013545582
+26528,TALKEETNA,AK,62.32,-150.095,34.8354080221,-23.9081416545,6.42753622841,7.26045862226,0.133609958506,0.905349056151,-0.296460431916,2.67061896125,1.35986212747
+93112,SAN DIEGO,CA,32.7,-117.2,66.3889674682,-5.98145690251,5.32157874405,3.3185460484,0.025756718529,-1.05850140375,-0.36833759581,2.34802391626,2.57329147605
+13748,WILMINGTON,NC,34.2675,-77.8997,64.6652949246,-15.5894776871,4.72100508393,7.33008512813,0.209485596708,0.0793714090248,-1.08055241562,3.30635884642,2.09356738622
+94050,MEEKER,CO,40.04417,-107.88861,44.4387895461,-24.4204279185,6.8852801429,7.45336424166,0.0558321870702,-1.36817687855,-0.678732678167,2.78144718531,1.76226629248
+54789,MOUNT POCONO,PA,41.13889,-75.37944,48.472299169,-20.681049438,6.12753201671,7.90202020674,0.187603878116,1.83962033584,-1.26760496488,3.70036607377,2.24556655123
+54788,MERIDEN,CT,41.50972,-72.82778,52.2513812155,-21.0453963599,6.43764766165,7.39122665322,0.141733425414,0.794773996638,-1.30391223728,2.85616840344,1.74953315776
+14935,GRAND ISLAND,NE,40.9611,-98.3136,53.4855172414,-25.1881572995,6.24727659146,9.36935770302,0.0841655172414,0.422587493849,-1.34244588855,4.37032682926,2.50472863616
+14936,HURON,SD,44.3981,-98.2231,47.2166666667,-28.0780233058,8.11492594847,9.70442726693,0.1065625,0.791251093596,-1.13532598684,4.29571095849,2.17794759092
+14937,IOWA CITY,IA,41.63278,-91.54306,51.6148555708,-25.4579491127,6.53254745331,8.46262600421,0.124209078404,0.981275759161,-1.52648328131,3.6433129636,2.11776505544
+14938,KIRKSVILLE,MO,40.09722,-92.54333,52.8510344828,-23.4458734932,6.1464260765,8.9910934197,0.137606896552,1.16691689799,-1.07999783476,3.12405830758,2.55083763895
+54782,POTTSTOWN,PA,40.23833,-75.55722,54.4733893557,-20.6437095898,5.17983177099,7.67671940579,0.17756302521,1.02889660094,-1.11129315516,2.81758723259,1.52836528758
+54781,BENNINGTON,VT,42.89139,-73.24694,48.4252077562,-21.1020775274,6.6644299767,8.52186138561,0.160304709141,1.12964106028,-1.11371493195,2.94839692133,1.51413328907
+54780,MONTAUK,NY,41.07306,-71.92333,54.5895627645,-17.6677886407,7.95936336903,6.45435289197,0.15577574048,2.29439071309,-0.80721462415,3.54337373457,2.01858732516
+13970,BATON ROUGE,LA,30.5372,-91.1469,68.9751037344,-14.6967102032,3.27209682459,6.68526680251,0.258755186722,0.646590705587,-1.12362525994,2.92706591935,1.89990055449
+54786,DOYLESTOWN,PA,40.33,-75.1225,53.952045134,-20.7595311441,6.46878145712,7.54848262709,0.169717912553,1.17883806791,-1.13083687273,2.88055327629,1.59657269032
+54785,SOMERVILLE,NJ,40.62389,-74.66944,54.1730496454,-20.4945911527,6.61514348716,7.50393325613,0.160021276596,0.869522862613,-1.17104248947,2.57134912959,1.34885175817
+93993,FAYETTEVILLE,AR,36.0097,-94.1694,58.7314049587,-20.2532178374,4.79356216111,7.83366276367,0.158760330579,0.813992199985,-1.31789960366,3.54440959566,1.7012395561
+93992,EL DORADO,AR,33.22083,-92.81417,64.1909340659,-17.9026205719,4.75045639443,7.1632875232,0.18717032967,0.438962884123,-0.935137196667,2.68630391362,1.89749667616
+26529,TANANA,AK,65.175,-152.1067,24.2458333333,-37.9337721587,9.176477223,8.6387467738,0.0317708333333,0.101585001591,-0.318697259129,2.59895917854,1.77774157283
+03159,LANCASTER,CA,34.7411,-118.2116,63.3901408451,-20.1128330742,4.74513806587,5.55298427233,0.00942253521127,-3.05740223957,-2.44000194225,6.07075907698,1.75159662769
+93997,RUSSELL,KS,38.87611,-98.80917,56.3447802198,-24.6417881564,6.37028026377,9.16977912361,0.0749175824176,-0.682193182031,-0.999159813386,4.79661950752,2.56364730204
+94057,DOUGLAS,WY,42.79611,-105.38028,48.4756606398,-23.7117173467,6.38471312334,9.12479456766,0.0311057023644,0.0184135506738,-1.09378887871,4.32371131162,2.27001320691
+24213,EUREKA,CA,40.8097,-124.1602,52.0382352941,-6.47922458651,1.30504913274,3.69092410354,0.131051470588,-0.162774440657,-1.11579635212,2.59349498997,1.92449821183
+24216,RED BLUFF,CA,40.1519,-122.2536,64.2627235213,-16.7332105336,5.52449175385,5.25212053858,0.063878954608,-0.270617399094,-1.34985564293,4.17065523358,1.79000040398
+24217,BELLINGHAM,WA,48.79389,-122.53722,50.9640883978,-11.6568458421,4.12346348137,4.34706167044,0.132327348066,0.483267965148,-0.534032546545,3.64785578399,1.56733260674
+14607,CARIBOU,ME,46.8705,-68.0173,42.0798898072,-25.4916767871,8.36650020449,8.72667334018,0.233161157025,0.796699342327,-0.966176089477,3.30136118413,2.10819627638
+04751,BRADFORD,PA,41.8,-78.6333,47.3152022315,-20.3537231498,6.02105486072,8.62382103471,0.154811715481,1.71426420132,-1.29259566671,3.16960573054,2.09737070789
+24219,THE DALLES,WA,45.6194,-121.1661,54.9737206086,-18.6729653937,5.71529539989,5.38891444761,0.0502074688797,-3.91903279724,-0.805982175034,5.08045031095,1.50744633946
+23091,FORT STOCKTON,TX,30.91194,-102.91667,67.8732590529,-17.181224418,3.73056296861,8.67370165763,0.0455640668524,-0.672873422631,-1.14601891544,3.2151203974,3.27292291578
+03016,RIFLE,CO,39.52778,-107.71972,49.4368131868,-25.0616127438,6.40132413368,5.97953196162,0.0390041208791,-1.70289411268,-1.2648710567,3.09045471545,1.70211269284
+12962,HONDO,TX,29.3601,-99.1742,70.8895027624,-16.1392411078,4.55365902019,7.02829771996,0.0843024861878,-0.570649535873,-0.981572140458,3.03582162393,2.72696890192
+94910,WATERLOO,IA,42.5544,-92.4011,49.1060606061,-26.3361536803,7.01581950262,9.1569424875,0.152954545455,0.94754649094,-1.71044452316,4.14228827621,2.20430191856
+14605,AUGUSTA,ME,44.3155,-69.7972,47.0728021978,-22.925969192,7.31788457585,7.54633923608,0.17489010989,0.911203536372,-0.952335101787,3.14029417657,1.98772236487
+14732,NEW YORK,NY,40.77944,-73.88028,57.5837912088,-20.5676851579,7.45034189001,6.88698677411,0.161414835165,1.47722290812,-0.813615920229,3.85088645007,2.6828773525
+27515,NUIQSUT,AK,70.21167,-151.00167,12.3244005642,-33.5978718472,19.2831317114,8.13638552767,0.0193582510578,1.11944308487,-0.267639928211,5.19675716382,1.94009998409
+14736,ALTOONA,PA,40.29639,-78.32028,52.4856733524,-20.4668525118,6.56618384468,7.90762677016,0.141404011461,1.8104006687,-1.51565372928,3.9473827985,1.70106543747
+14737,ALLENTOWN,PA,40.65083,-75.4492,53.5793103448,-21.4037044475,5.59688861505,7.31242781472,0.183806896552,0.859806801504,-1.35670796279,3.24265878196,1.91532906738
+14734,NEWARK,NJ,40.6825,-74.16944,56.9504814305,-20.965539844,6.61429283911,7.2238090189,0.172242090784,0.998618171547,-1.05678612966,3.68865290175,2.45102768197
+14735,ALBANY,NY,42.7431,-73.8092,50.5624142661,-22.5357673919,6.97921108118,7.79803239412,0.184938271605,1.006474145,-1.39386158812,3.72086927483,1.84212894391
+13957,SHREVEPORT,LA,32.4472,-93.8244,67.6717032967,-17.2308758579,4.50885936021,7.03152036983,0.213832417582,0.445113115382,-1.06491675303,3.129889726,2.16241863473
+94225,HOQUIAM,WA,46.9727,-123.9302,51.0476858345,-8.49823757773,5.68291582981,4.24102654787,0.28832398317,0.969657864948,-1.16219546818,3.69772284845,2.19812322989
+23090,FARMINGTON,NM,36.74361,-108.22917,53.6685006878,-23.6245564505,5.8601763725,5.74041519147,0.029030261348,-0.657250782079,-0.774349172014,2.56188179052,2.91572338725
+94855,OSHKOSH,WI,43.98444,-88.55694,47.5576923077,-25.3099786126,7.73755891716,8.33239604886,0.144745879121,0.772570674281,-0.885095535106,3.31536071229,2.46057458468
+13962,ABILENE,TX,32.4105,-99.6822,66.7565337001,-19.3384112998,4.37697695038,8.80895472658,0.0956327372765,0.0181338289779,-1.721940639,4.18598263861,2.52812049507
+13963,LITTLE ROCK,AR,34.7273,-92.2389,64.2448418157,-19.6768720754,5.0754713679,7.01786662898,0.197744154058,0.373639619973,-1.20016248797,3.03621963441,2.25326354806
+13960,DALLAS,TX,32.8519,-96.8555,69.3159340659,-19.2929289753,5.20937523956,7.4174283975,0.134567307692,-0.322737440088,-1.46400685444,3.90195377377,2.33772715557
+13966,WICHITA FALLS,TX,33.9786,-98.4928,65.1218836565,-21.2807099508,5.24780056157,8.22779843615,0.086135734072,-0.252712915792,-1.35219430659,4.06658222004,2.73181277868
+13967,OKLAHOMA CITY,OK,35.3889,-97.6006,62.4620689655,-20.983082026,6.12870874735,7.94205256851,0.168,0.812312326846,-1.38911511875,4.30527891214,2.56583160234
+13964,FORT SMITH,AR,35.333,-94.3625,64.4325068871,-20.7811500356,5.37483455036,6.7078684696,0.16923553719,0.561242675287,-0.955202067256,2.67208673276,2.30677835796
+23136,CAMARILLO,CA,34.21667,-119.08333,61.8942857143,-4.99767287381,4.55526274406,4.74180412238,0.0243428571429,0.859432762164,-0.741634044469,3.11707986057,1.72148300333
+13968,TULSA,OK,36.1994,-95.8872,62.475862069,-21.4589806192,6.2713635718,8.23409418536,0.125793103448,0.196795735171,-1.11236779838,3.95666948428,2.34303641648
+13969,PONCA CITY,OK,36.73667,-97.10194,61.0986111111,-22.205106495,7.11667163573,9.05500808338,0.107333333333,-0.0103627971861,-1.04101537127,3.71637368053,2.34457944285
+23130,VAN NUYS,CA,34.20972,-118.48917,67.0345781466,-10.5167937601,5.90997257235,4.93179005851,0.02877593361,0.215921861447,-0.833564899963,2.92042738001,1.63507018429
+93909,OLATHE,KS,38.83167,-94.88972,56.5055401662,-23.0657961518,6.51597293943,8.78509473422,0.125900277008,0.812931157084,-1.06260516961,3.67043799635,2.57179448277
+94008,GLASGOW,MT,48.2138,-106.6214,44.2713498623,-27.4782867541,7.7763545394,8.96490382517,0.0786570247934,-1.2553410256,-0.689787624638,4.69243522183,2.16707744331
+40505,WENO ISLAND,FM,7.45,151.83333,82.3,0.427654904688,-0.104754717564,2.08862783441,0.8245,1.76659859769,-0.495643733476,2.43197222206,2.9824902059
+24033,BILLINGS,MT,45.8069,-108.5422,50.1184573003,-22.6304270179,6.70591277358,9.01994520022,0.0704958677686,1.98878615858,-0.853657572256,4.15566691635,2.55931843076
+53901,WEST PLAINS,MO,36.87806,-91.9025,57.5758865248,-19.3455217162,7.25547696005,8.40850303151,0.185106382979,0.897448671063,-1.31682476534,2.95457940148,2.15225459468
+53902,CONROE,TX,30.35667,-95.41389,68.3868312757,-15.4684841212,4.11182095304,7.20586982042,0.186440329218,0.43691054013,-1.23605661465,3.15277208382,1.65686925654
+53903,HUNTSVILLE,TX,30.74389,-95.58611,69.3764044944,-16.4163395845,3.32666373845,7.11918260431,0.163525280899,0.621463469604,-0.87809575526,2.7993164232,1.68771138664
+53904,ST CHARLES,MO,38.92861,-90.42806,56.5598885794,-22.5084356731,6.1809495526,8.49072931081,0.1425,1.27405200207,-1.63202542402,3.59688258667,2.0795630965
+24030,SIDNEY,NE,41.0993,-102.9863,51.1949509116,-22.293734432,9.54147713533,9.57625736163,0.0487868162693,0.569186437205,-1.08846011303,4.04353141829,2.9020776995
+53907,ARLINGTON,TX,32.66361,-97.09389,66.8951724138,-19.0387538865,4.6270537776,7.93277807065,0.135186206897,0.164462515852,-1.78322983287,3.88800237323,2.19841642452
+53908,TULSA,OK,36.03944,-95.98444,62.325997249,-21.4042233976,6.11616619863,7.97803779971,0.123321870702,0.0780682420294,-0.992890938273,3.06001053471,1.9888272011
+53909,FORT WORTH,TX,32.97333,-97.31806,66.3598901099,-20.2218670313,5.46463657085,8.17682440062,0.11760989011,-0.0130283768293,-1.33742763278,3.67268379781,2.15314742724
+53123,LAS VEGAS,NV,36.21167,-115.19583,69.4883081155,-21.7067899261,5.15342131699,5.02232832157,0.0190027510316,-0.883283181319,-1.55105726234,4.01467206243,1.76755372428
+53120,RAMONA,CA,33.0375,-116.91583,61.1349862259,-10.7670074783,6.66970234922,4.5662666069,0.0367768595041,-0.353160392904,-0.204009590979,1.86259147845,2.4713042856
+53121,OCEANSIDE,CA,33.21944,-117.34944,61.4931318681,-8.03024590319,4.76520218821,3.80574895553,0.0293818681319,-0.621167652029,-0.377242314692,1.23441160863,2.90579781036
+23007,CHILDRESS,TX,34.4272,-100.2831,64.2438016529,-21.1586509137,4.81385958756,8.48528137424,0.0710330578512,-0.0286870292053,-1.75960460999,4.13829383571,2.5199695985
+26615,BETHEL,AK,60.785,-161.8293,28.6880222841,-25.345168964,11.6020321357,7.96762356746,0.108071030641,1.91719459111,0.277943551503,5.33013275392,2.11129486144
+23009,ROSWELL,NM,33.3075,-104.5083,63.1625,-21.269569337,3.64641668571,7.19929067625,0.0341666666667,-0.866539573888,-1.66764692578,3.39797424844,2.39713902199
+26616,KOTZEBUE,AK,66.86667,-162.63333,22.0371900826,-27.7010281467,15.6780775861,7.12844113452,0.0686776859504,0.331133251968,1.98305378533,6.38466319707,1.6058627128
+03013,LAMAR,CO,38.07,-102.68806,55.3259668508,-24.713909237,6.7994755073,8.50699922814,0.0341850828729,-1.66558609481,-0.981053940003,4.00648013709,2.3410623711
+93045,TRUTH OR CONSEQUENCES,NM,33.23667,-107.26806,62.1991758242,-20.3202025704,3.94732343961,5.5473287378,0.0316483516484,-0.633105394422,-1.52344421347,3.03578135958,2.56197959236
+12815,ORLANDO,FL,28.4339,-81.325,73.9519230769,-9.30039224141,3.64956353712,5.00601308346,0.172293956044,0.552798477805,-0.561141097764,2.87981350392,2.44363923745
+93765,BEAUFORT,NC,34.73361,-76.66056,64.2097222222,-15.7835564899,4.50206469882,6.53005214665,0.191333333333,-0.463865952368,-0.854986189411,4.02140971449,2.23246063601
+13977,TEXARKANA,AR,33.4536,-94.0074,65.7596685083,-18.5559910214,4.92947698333,7.15775819973,0.159095303867,0.317354402632,-1.05678585093,2.87293764275,2.21032925569
+12816,GAINESVILLE,FL,29.6919,-82.2755,70.7677329624,-11.4786896469,4.08361764885,5.86505432625,0.213734353268,0.278544727756,-0.770642546252,2.55131478945,2.07746930564
+23185,RENO,NV,39.4838,-119.7711,55.6694214876,-20.5903501014,6.2670701542,5.83667573118,0.0242768595041,-1.66121057448,-1.3164365166,4.03015642004,1.43289559674
+12812,PUNTA GORDA,FL,26.91722,-81.99139,75.0742778542,-8.38242716583,3.91375930058,4.33558953627,0.207235213205,0.586885020212,-0.801901111634,2.7181296443,2.56548285243
+23188,SAN DIEGO,CA,32.7336,-117.1831,64.4104683196,-5.52755932261,5.09467360437,3.131456944,0.0247520661157,-1.29504707977,-0.544176002938,2.11088441886,2.5347436915
+12819,LEESBURG,FL,28.82083,-81.80972,73.6726027397,-10.1638536446,3.16785715268,5.17918771624,0.155773972603,-0.0854334829032,-0.607729632816,2.58453316326,2.44425583845
+12818,BROOKSVILLE,FL,28.47361,-82.45444,71.847107438,-10.3525238431,3.85505529296,5.55322960954,0.227603305785,0.337182658964,-0.694788832993,2.66182864866,2.18133353215
+04836,FRENCHVILLE,ME,47.28556,-68.31333,40.3081155433,-25.3197419818,9.0419053816,8.43819717018,0.136403026135,1.20856229981,-0.860617499319,3.69778729631,2.40665877428
+23225,EMIGRANT GAP,CA,39.2774,-120.7102,53.6926345609,-13.3958366808,8.43930611452,6.60430981278,0.202372521246,0.423972113081,-0.688017595052,2.82567588756,2.0055869943
+24215,MOUNT SHASTA,CA,41.3325,-122.33278,51.675862069,-16.340232104,5.96935873831,5.00021551219,0.11404137931,0.39424928974,-1.04108751164,2.04652706025,1.29268617687
+94704,DANSVILLE,NY,42.57083,-77.71333,51.3319502075,-20.901227535,6.71329601122,8.91177460997,0.111784232365,0.602549054136,-0.870272492772,2.58841952455,2.32507026173
+94178,TWIN FALLS,ID,42.48194,-114.48694,52.2554945055,-22.2226805309,7.0842144731,6.94902964423,0.0302472527473,-0.399500005717,-1.11813304249,3.86371991136,2.61608757939
+14931,BURLINGTON,IA,40.78333,-91.12528,53.0359116022,-23.7128913051,5.97742281337,9.5676603847,0.114716850829,1.2949508883,-1.19764860894,3.31631428602,2.42776841986
+14880,CHICAGO/WAUKEGAN,IL,42.41667,-87.86667,49.2566248257,-22.983978971,6.81491805482,9.21672373011,0.12510460251,1.04442396103,-1.0551370137,3.31434496391,2.22392383634
+94176,SPOKANE,WA,47.68306,-117.32139,50.3994490358,-19.4474869676,6.06989874286,5.32863899876,0.0715082644628,-0.576088881163,-0.947010396332,3.19978276826,1.31146988302
+14933,DES MOINES,IA,41.5338,-93.653,54.0580110497,-25.4883920829,7.07163384207,8.68198596384,0.137879834254,0.89370268201,-1.24468700767,3.75540302186,2.59048492545
+03822,SAVANNAH,GA,32.13,-81.21,68.1703296703,-14.1406262061,3.99381110003,6.61193522655,0.192568681319,0.184276221998,-1.14745821267,2.86584916108,2.36989382902
+53879,LEE'S SUMMIT,MO,38.95972,-94.37139,57.3767313019,-22.3842440103,6.82179438441,8.9279977732,0.128601108033,1.04013762538,-0.953811090714,3.32427055482,2.59165847639
+03820,AUGUSTA,GA,33.3644,-81.9633,64.6002747253,-15.863097807,3.83111257163,6.72777533608,0.188736263736,0.60860119708,-1.14457314367,2.89904401657,1.63686016604
+53874,GREENWOOD,SC,34.24861,-82.15917,62.7925311203,-16.6530296187,3.75670141829,6.7747046113,0.162406639004,0.515972650844,-0.887465130528,2.66493402559,1.75850771874
+03940,JACKSON,MS,32.3205,-90.0777,66.1298342541,-16.3947138184,4.65254554094,7.13112722102,0.276919889503,0.946832373917,-1.25448961451,3.22122235578,1.79078239568
+94700,BERLIN,NH,44.57611,-71.17861,43.2092050209,-23.0701213411,8.62330775487,9.53572255891,0.149874476987,0.479547227305,-0.902351543705,2.29985379752,1.4671965327
+03945,COLUMBIA,MO,38.8169,-92.2183,57.0716253444,-22.650365828,5.45000238416,8.87447575113,0.150330578512,1.23025393191,-1.15308691154,3.23382521817,2.75888846289
+53871,ROCK HILL,SC,34.98694,-81.0575,61.5020862309,-17.4048987616,4.60674615212,6.72901268684,0.164853963839,0.339740070507,-0.751249614456,2.40592060244,1.98588679438
+53872,MONROE,NC,35.01694,-80.62056,61.9752066116,-17.2096876062,4.32139561303,6.97562129913,0.116859504132,0.710196926075,-0.698600434828,2.90351651579,1.81412964013
+53873,CARTERSVILLE,GA,34.12306,-84.84861,61.5722145805,-17.0364357372,3.83167629765,6.40758082119,0.204408528198,0.379022559227,-0.600053652262,1.75666051876,1.44085133722
+24146,KALISPELL,MT,48.3042,-114.2636,44.7911479945,-19.4991633306,5.91010917334,6.43037634179,0.0926556016598,-0.535705294405,-0.997978053897,3.21634973241,1.49061189946
+14860,ERIE,PA,42.08,-80.1825,51.7980769231,-20.4454270345,7.32555768169,8.33349868843,0.235796703297,1.89322832196,-0.617383200259,3.89895827887,2.34258824867
+93129,CEDAR CITY,UT,37.7086,-113.0944,50.0775623269,-22.4223869107,6.03587596977,6.85791405571,0.0572368421053,-1.18281919209,-1.08625664397,3.82601691295,1.74751216015
+13894,MOBILE,AL,30.68833,-88.24556,68.4148351648,-13.985135849,3.75992433492,6.48585291152,0.283598901099,1.30884187752,-1.11105431336,3.13540132301,2.08922200883
+24145,IDAHO FALLS,ID,43.51639,-112.06722,46.3154269972,-23.5628210973,6.5959178004,6.65886756449,0.027541322314,-0.29368235539,-1.42231101591,4.58752595452,1.84573459766
+93950,MC ALESTER,OK,34.8822,-95.783,63.1035911602,-20.1086026986,4.99041048754,8.2123170998,0.170096685083,0.922867133018,-0.958868220707,3.2073723628,2.04100739725
+14939,LINCOLN,NE,40.8508,-96.7475,52.8200549451,-25.7917035412,6.12199536723,8.91593647512,0.104031593407,-0.295936725873,-0.969162214485,4.38917923266,2.19595988852
+93841,MILTON,FL,30.71667,-87.01667,69.2044817927,-13.6329923439,3.85518921395,6.37284508831,0.22262605042,0.946599248256,-1.18561327812,2.74022748974,2.1303614725
+53920,RUSSELLVILLE,AR,35.25778,-93.09472,63.1318681319,-20.7412974834,5.47626282981,6.92563549255,0.15717032967,0.449411551552,-0.802668444557,2.31132151422,1.44041329658
+24143,GREAT FALLS,MT,47.4733,-111.3822,46.9596662031,-20.4580856679,6.49667554673,9.81682806331,0.0764186369958,2.59101383693,-0.87498356754,5.15531814103,2.17111096285
+24172,LOVELOCK,NV,40.0681,-118.5692,51.8635097493,-23.4456589694,5.92577800637,6.45041275541,0.00956824512535,-1.84670631901,-1.21633724383,3.3959472711,1.85749018318
+04849,LORAIN/ELYRIA,OH,41.34611,-82.17944,52.2486187845,-20.8934477983,5.96144479234,8.37241614288,0.16226519337,2.13389278261,-1.64480655637,4.20710803524,1.97633167828
+04848,TOLEDO,OH,41.56306,-83.47639,52.4853963839,-22.2627519592,6.34945157501,7.8991381007,0.12909596662,1.71442282873,-1.5102553074,4.14133854512,2.05949551269
+04845,KENOSHA,WI,42.595,-87.93806,49.3507565337,-23.217799838,7.00233100957,9.32047292577,0.121918844567,1.46088255151,-1.24894024675,3.59840452216,2.44782181677
+54787,FARMINGDALE,NY,40.73417,-73.41694,54.6864640884,-19.7403251739,7.24149385125,6.80309370981,0.13054558011,0.728792888741,-0.896515318552,3.29544577211,2.4692540495
+04847,ADRIAN,MI,41.86778,-84.07944,50.8168044077,-22.7562501687,5.94209908052,7.70963462894,0.101033057851,1.33279564201,-1.3370528925,3.47342121897,2.13070226147
+04846,VALPARAISO,IN,41.4525,-87.00583,51.364265928,-22.8432576014,6.2540836882,8.45999869361,0.129286703601,1.84214363128,-1.50022666486,3.78517953593,2.0371037228
+04841,SHEBOYGAN,WI,43.76944,-87.85056,46.9266943292,-23.5927212055,8.28007245519,8.47378495965,0.123049792531,1.69712595562,-1.21007417868,3.70453641415,2.23892815297
+04840,FOND DU LAC,WI,43.76944,-88.49083,47.4655647383,-25.356915887,6.80718062547,8.67788509115,0.114421487603,0.904536636747,-0.924432086166,4.94600714567,1.76236434965
+04843,MEADVILLE,PA,41.62639,-80.215,50.2627939142,-20.7301518001,6.93483938515,8.27790624405,0.175539419087,1.41839795937,-0.97574755729,2.79212003658,2.0940675509
+04842,WOOSTER,OH,40.87306,-81.88667,50.4230769231,-21.5790472375,5.16175538509,8.41652434927,0.15646978022,1.9773194907,-1.81414556473,3.94375475988,1.84322586262
+24225,MEDFORD,OR,42.3811,-122.8722,55.8695054945,-17.9136508228,5.96290527493,5.18361281499,0.0755151098901,-1.34313775076,-0.604634710626,2.12583992152,1.51885667456
+93242,MADERA,CA,36.98778,-120.11056,63.0512465374,-16.1166299473,5.37048272488,4.41929478939,0.0320152354571,-1.4831667515,-0.495029216915,3.22160777064,1.53710178604
+93241,VACAVILLE,CA,38.3775,-121.9575,61.8475274725,-14.5468632943,4.39105446022,4.84255808989,0.0704052197802,-1.88140158253,-0.761275776304,3.37969859877,1.56083070975
+24286,CRESCENT CITY,CA,41.78028,-124.23667,51.2882758621,-4.75574375662,3.26243934387,4.12332291483,0.215172413793,0.781991778349,-1.51668448213,5.71356892824,1.35669776706
+93228,HAYWARD,CA,37.6542,-122.115,58.3059490085,-7.61347031501,3.26525836469,5.11156528797,0.0378399433428,-1.87937807415,-0.461397867103,2.67609312093,2.3788960328
+12921,SAN ANTONIO,TX,29.5443,-98.4839,71.4711538462,-16.0443029733,4.648901865,6.77932393967,0.146353021978,-0.945231486045,-1.06344516778,3.22256142071,2.48633356865
+12923,GALVESTON,TX,29.2733,-94.8592,72.7083333333,-13.6701814949,4.39023511195,5.43277524212,0.175854166667,0.466831841452,-1.01756188232,3.77770333873,2.87307131819
+24062,WORLAND,WY,43.96583,-107.95083,47.3988842399,-27.6107809908,6.23466578871,7.59023603572,0.0222594142259,-1.24289674298,-0.865508858414,3.01760095963,1.85850574872
+12970,SAN ANTONIO,TX,29.3389,-98.472,71.682320442,-15.6633680467,5.22142377535,6.74986899997,0.0919475138122,-0.661066211791,-1.05873364988,2.8881294967,2.27464701483
+12924,CORPUS CHRISTI,TX,27.7742,-97.5122,75.1586206897,-13.0949375114,3.76217039414,6.73605341654,0.0871448275862,0.30539638289,-1.98204655616,4.37649010466,2.64690143335
+03056,SEMINOLE,TX,32.67528,-102.65444,63.8937677054,-19.7936425063,2.84934282876,7.95362759323,0.0321671388102,-0.134298751536,-1.48259011752,3.13184211364,2.61256879422
+54728,WHITEFIELD,NH,44.3675,-71.545,44.1781767956,-23.4477118771,7.78096503275,9.09782086177,0.143287292818,0.497496808001,-0.863500006247,2.65893824529,1.3282105519
+03050,SNYDER,TX,32.69333,-100.95056,65.6709770115,-19.5199056691,3.94526422952,8.85814464878,0.0517456896552,0.00376184180426,-1.61111243419,3.32451017176,2.94123356956
+26409,ANCHORAGE,AK,61.21694,-149.855,36.9459084605,-24.2660382488,6.13973358542,6.17829136898,0.0757073509015,-0.682827251809,0.00762159246163,2.02227728985,1.75033718014
+24149,LEWISTON,ID,46.3747,-117.0156,54.6852367688,-20.016982223,5.40414637815,5.79910842141,0.0549651810585,-0.0829246772323,-0.71523744125,2.84654806586,1.65772792844
+14919,JAMESTOWN,ND,46.9258,-98.6691,42.2561983471,-28.9613443501,8.93500181558,9.03272785009,0.0594421487603,1.16403320147,-1.15532351251,4.6720875638,2.20069038549
+94818,RACINE,WI,42.76111,-87.81361,49.5027932961,-23.687358434,6.62277805607,8.7856296934,0.11687849162,1.19541288662,-0.973610388867,3.28842790039,2.61748242484
+94765,LEBANON,NH,43.62639,-72.30472,47.6363636364,-23.2910740576,7.04008364711,7.963480483,0.157871900826,0.393328147092,-0.83187745497,2.70805744402,1.47798908317
+94815,KALAMAZOO,MI,42.23472,-85.55194,51.0068681319,-22.7568584507,6.43802164886,8.02195051224,0.136730769231,1.49943790382,-0.912082762851,3.61609816266,2.01404019066
+94814,HOUGHTON LAKE,MI,44.3591,-84.6738,45.7842323651,-23.0688564796,6.679837417,8.59228338014,0.164294605809,1.07672737144,-0.589870167209,3.312819888,2.21942605739
+54756,ORANGE,MA,42.57,-72.29111,48.7969821674,-22.544927539,6.30599422442,7.73141622583,0.156234567901,0.581654447384,-1.09631529935,3.13380051476,1.62036955705
+54757,WELLSVILLE,NY,42.10944,-77.99194,48.0926694329,-20.4669235008,7.3303116309,8.51526879892,0.13265560166,1.79578995627,-1.51061286375,3.77178368966,2.11620859198
+24024,PHILIP,SD,44.05111,-101.60111,49.5365517241,-25.7556066286,7.56678409227,9.92851604075,0.046075862069,-0.301055511744,-0.986448694794,4.23719365993,2.253964186
+93013,MONTROSE,CO,38.50583,-107.89889,51.1304945055,-24.386747527,5.52309268646,6.25240456158,0.0351304945055,-1.39365168581,-0.820908455853,2.53050236458,2.64943265742
+93010,LIMON,CO,39.18944,-103.71583,47.4709141274,-23.2850348903,6.64481180847,8.57814088706,0.0560526315789,-0.785920074425,-1.25260703,4.03106309964,2.22266312122
+40504,POHNPEI,FM,6.9667,158.2167,82.4,0.0434957905861,0.00151664532545,3.03259639644,0.76,-0.165424495092,-0.017721643405,0.585149553533,8.271389717
+23078,DEMING,NM,32.26222,-107.72056,61.6947513812,-19.8006475891,5.23865905448,5.5717632566,0.0282389502762,-0.350107878087,-1.34087715268,3.38194150871,2.47279418711
+23070,TRINIDAD,CO,37.26222,-104.33778,54.2843273232,-21.390536354,5.79610563994,9.20276391718,0.0307489597781,-0.332617619135,-0.874531700846,3.1689240684,3.0567303773
+94023,GILLETTE,WY,44.33944,-105.54194,47.3772538141,-22.8187688868,8.09750874407,10.0017900537,0.0579403606103,0.937898182093,-0.926291082216,4.57029308205,2.27113451159
+25516,SELDOVIA,AK,59.44333,-151.70167,38.8979020979,-14.780665959,6.32223778408,4.76722083392,0.162629370629,0.231160819553,-0.0282960222337,2.58489692863,1.38691602181
+22516,KAHULUI,HI,20.89972,-156.42861,76.265560166,-3.03180014004,2.34480257699,2.56028651358,0.0428423236515,-2.47320630156,-0.271650621382,4.35819763018,2.79932234269
+14742,BURLINGTON,VT,44.4683,-73.1499,48.9407713499,-23.7520121237,7.44288614454,8.60972129818,0.193119834711,1.00853604605,-0.738391131752,3.56911940818,1.96956546451
+14740,WINDSOR LOCKS,CT,41.9381,-72.6825,52.614640884,-22.1169646324,5.78143108736,7.56116545533,0.20270718232,0.806028573822,-1.27316183719,3.25998088212,2.15470876863
+14747,DUNKIRK,NY,42.49333,-79.27222,50.6058495822,-20.263117968,6.4959331855,8.79569801958,0.140974930362,1.39530246779,-0.233705798417,4.10464873419,2.28452161966
+14745,CONCORD,NH,43.1952,-71.5011,48.1318681319,-22.8404026931,6.30965707977,8.04448350472,0.188880494505,0.904786557096,-1.24561916997,3.41168615249,1.50291448225
+24121,ELKO,NV,40.8288,-115.7886,48.7524071527,-23.1836264726,7.38427474089,6.80744016394,0.0454126547455,-0.755068278137,-0.6906585874,2.91079731736,1.95931322747
+14748,ELMIRA/CORNING,NY,42.15944,-76.89194,49.2433936022,-21.1616575763,6.62332895689,8.35604977636,0.116662030598,0.7848572238,-1.16928881792,3.00954173636,1.78246240224
+26533,BETTLES,AK,66.54,-151.31,22.1142454161,-38.8618647844,8.4988074723,8.91226062268,0.0899576868829,-0.260949743607,-0.765904185108,2.20739596249,1.78883179625
+03870,GREER,SC,34.8842,-82.2209,62.1426611797,-16.7571696881,4.28630149846,6.28901150505,0.223518518519,0.509603826421,-0.975712122977,2.5925340062,2.03978154392
+93141,PRICE,UT,39.60917,-110.75472,50.6834030683,-25.1574383485,6.54872765925,5.629846301,0.0282635983264,-1.37397154134,-1.11114416773,2.96894025298,2.20925135807
+94963,MINNEAPOLIS FLYING CLOUD,MN,44.8321,-93.4705,48.2837465565,-27.6872677914,8.59718081577,8.64288969105,0.123078512397,0.418138417008,-0.644960165458,3.35957166363,2.40290372732
+94889,ANN ARBOR,MI,42.22278,-83.74444,49.296961326,-22.2843646707,5.27281798089,8.48535141956,0.109578729282,1.35225661917,-1.09705373281,3.54262643663,1.98607212137
+94961,BAUDETTE,MN,48.71667,-94.6,39.2551724138,-29.4911940974,8.74386985997,8.72518647051,0.0859862068966,0.433581062198,-0.557327010507,3.24578176743,2.06897713926
+94960,MINNEAPOLIS,MN,45.06194,-93.35083,46.8875171468,-27.7251842358,7.75093468552,8.77943587885,0.109897119342,0.4006285796,-0.650774493132,3.40531930634,2.22604208471
+94967,PARK RAPIDS,MN,46.90056,-95.06778,40.8126721763,-29.2848886692,8.8146421768,9.53201065414,0.0897727272727,0.37836871003,-0.372645918726,3.70381610805,2.22107308813
+94281,AURORA,OR,45.24861,-122.76861,53.4049586777,-13.7998304213,4.86565267771,5.1257881271,0.164917355372,0.268433456095,-0.496660927471,3.0829956693,1.4983101639
+24127,SALT LAKE CITY,UT,40.7781,-111.9694,55.4107883817,-24.9999456607,8.85145345951,7.00526270058,0.0709128630705,-1.26977810498,-0.413347826709,3.41806535109,2.24266050488
+24128,WINNEMUCCA,NV,40.9017,-117.808,49.3806179775,-22.5688026543,6.78216357894,7.24483823326,0.0349297752809,-0.803542063003,-0.843754421881,3.0332132315,2.24643108622
+93720,SALISBURY,MD,38.34056,-75.51028,59.6987620358,-19.1419653089,6.70957823333,8.01504165917,0.190275103164,0.709518151767,-1.25536114436,3.24635580102,2.07453015363
+93721,BALTIMORE,MD,39.1666,-76.6833,57.5934065934,-20.4145189085,6.00702612862,7.46349760687,0.165927197802,0.731060852606,-1.27853428844,3.11407010225,1.91271181629
+93837,JACKSONVILLE,FL,30.23333,-81.66667,72.5475862069,-12.0396715595,3.80684965485,5.73141882156,0.230731034483,-0.192510244563,-0.335842364916,3.10696096684,2.72664713117
+93831,BEAUFORT,SC,32.48333,-80.71667,67.7038567493,-14.5932808094,4.65250789943,6.54657556324,0.153533057851,0.43807794828,-0.684145327294,2.86501324433,2.14096193435
+93727,NEW RIVER,NC,34.70842,-77.43966,63.6865464632,-15.8022646722,4.87904429522,7.25406225992,0.213578363384,0.339302328915,-0.897014733327,3.09139631765,2.20714575988
+94039,PINE RIDGE,SD,43.02056,-102.51833,49.0611111111,-24.2933441951,7.90655818396,10.2724667487,0.0646041666667,-1.08846286522,-0.912136528911,3.59789031762,2.16415404626
+94038,HETTINGER,ND,46.01389,-102.65472,43.9357541899,-25.4766581411,5.85245017131,10.0814895168,0.0813687150838,-0.0164347008094,-1.03103288358,4.61999851246,2.10960429723
+53838,GAINESVILLE,GA,34.27194,-83.83028,61.7530864198,-16.5809927953,4.10024214154,6.02333892232,0.26537037037,0.878189703642,-1.11366063157,3.00483350741,1.99249163369
+03017,DENVER,CO,39.8328,-104.6575,52.562764457,-22.5161384762,7.3118966323,9.74975913797,0.0815585331453,-0.380674422667,-1.11978407696,3.10086160486,3.2243643056
+94032,CUSTER,SD,43.73306,-103.61139,43.8893499308,-20.8437544928,7.38429725544,9.18693477535,0.0707261410788,0.242062370978,-0.744749679049,2.53831861576,2.63256785317
+03981,FREDERICK,OK,34.21,-98.59,65.0153417015,-21.8071089429,5.02583110956,8.30982901755,0.0650836820084,0.0828765566321,-0.746646365905,3.59780120069,3.0932421421
+94037,BUFFALO,SD,45.60444,-103.54639,46.8834019204,-24.8104346235,6.64824444697,9.53559402216,0.0449382716049,0.0668843124659,-1.16472661272,5.30417263117,2.31541187689
+12960,HOUSTON,TX,29.98,-95.36,71.1898211829,-14.8845542031,3.77308821283,6.62390544137,0.166258596974,0.488071018285,-1.2612640627,3.1691843621,2.26957757718
+03868,TERRE HAUTE,IN,39.45194,-87.30889,55.1565096953,-22.7627138569,5.49609715876,8.74711763445,0.143850415512,1.45974574163,-1.51403556997,3.4633048044,1.95288468241
+23176,MILFORD,UT,38.41667,-113.01667,50.8376891334,-24.7984300748,6.82775930662,7.30299670065,0.03484869326,-1.49564800787,-0.642396679103,4.44052153544,2.29132781538
+23174,LOS ANGELES,CA,33.938,-118.3888,63.8928571429,-5.08402403706,4.65021793877,3.71513826609,0.0258379120879,-0.980598455045,-0.478392896647,2.06383601015,3.27739750433
+03860,HUNTINGTON,WV,38.365,-82.555,57.2664796634,-19.6634386435,4.96973637625,7.84558921053,0.182314165498,1.04446179669,-1.1364107785,2.51699554784,1.81280936452
+23179,NEEDLES,CA,34.7675,-114.6188,76.2689655172,-21.4040419389,5.16861345626,4.9146421475,0.0187034482759,-0.0462940409834,-1.20642513691,3.70503562206,2.12411750851
+03866,MERIDIAN,MS,32.55,-88.56667,64.7912552891,-16.1689270621,4.16951890123,7.35075781515,0.250049365303,0.678159540118,-0.829627300179,2.5470199685,1.74965942338
+14829,GOSHEN,IN,41.5333,-85.7833,51.8236914601,-22.6886574276,6.23796433077,8.49597652554,0.120991735537,1.86125901737,-1.51492176888,4.03460473278,2.10875402777
+14822,DETROIT,MI,42.40917,-83.01,52.139275766,-22.675392608,6.70297843669,7.96836280929,0.106775766017,1.11813336427,-0.975063597389,3.34759147524,2.28688927167
+04201,SCAPPOOSE,OR,45.77278,-122.86111,52.2151724138,-13.9464588506,5.18349898433,5.33595905491,0.170875862069,-1.34519401319,0.0428315882896,2.23236078043,1.62833647439
+14821,COLUMBUS,OH,39.99139,-82.88083,55.2984869326,-22.13194223,5.45972448887,7.97906849217,0.175770288858,1.30316521529,-1.45992052419,3.73802954961,2.02046147684
+14826,FLINT,MI,42.9666,-83.7494,50.3494475138,-22.6948232489,6.53921196175,8.66752131067,0.147389502762,1.35276762249,-1.18055070596,3.69413996077,2.20589774999
+14827,FORT WAYNE,IN,40.9705,-85.2063,52.1349862259,-23.0488420742,5.34065061259,7.9936943788,0.160351239669,1.86693277629,-1.78921803423,4.21729033151,2.03448823148
+22551,KAPOLEI,HI,21.31667,-158.06667,75.4930362117,-2.46515422548,2.1690168287,2.16103290324,0.0472562674095,-0.239648513477,-0.576671541674,1.81450536031,2.80231684774
+14825,FINDLAY,OH,41.01361,-83.66861,52.160887656,-22.5394288683,4.68158193839,7.99893219026,0.151539528433,2.03244518718,-1.5793519172,4.38371980323,2.09690249886
+24137,CUT BANK,MT,48.6033,-112.3752,43.6519886364,-21.143370563,6.51213153788,9.77463540423,0.0472372159091,2.3238872453,-1.30604219026,6.17720559763,2.0032410485
+04803,RHINELANDER,WI,45.6314,-89.4823,41.9460580913,-25.2741226035,7.72318650593,9.0161951428,0.172821576763,0.933675948394,-0.67819953656,3.03811045017,2.13748458218
+14739,BOSTON,MA,42.3606,-71.0106,53.4753424658,-20.0367332688,7.39943998577,7.45802622283,0.175376712329,1.06394695663,-1.01993704539,3.7759139377,2.73267779262
+23257,MERCED,CA,37.28472,-120.51278,63.7757909216,-16.5565360989,5.00821531039,4.26754463104,0.0291540577717,-1.59415790866,-0.768314616844,3.24193953797,1.75680660638
+04804,COLUMBUS,OH,40.07806,-83.07806,53.5089163237,-22.0728680427,5.26061633959,8.24821962265,0.135082304527,1.44788970677,-1.23482865303,3.53104525326,2.12098681109
+24131,BOISE,ID,43.5666,-116.2405,53.9176954733,-23.0751151014,6.6862521892,6.338980622,0.0495679012346,-0.608581837882,-1.19585655545,3.31452790025,2.07586765569
+23254,CONCORD,CA,37.9917,-122.055,60.467032967,-11.7092807282,4.01248483224,4.46814498446,0.0491208791209,-3.047915289,-0.220954639893,3.56279988653,1.86677942918
+04808,CHICAGO/AURORA,IL,41.77,-88.48139,50.1881051176,-23.7707304292,6.10950670744,8.81132901877,0.120497925311,1.85180902671,-2.08935058742,4.26053963082,2.06572576794
+23259,MONTEREY,CA,36.58806,-121.84528,56.3953168044,-4.67709888981,3.0112134799,3.98838086525,0.0410123966942,-0.87362190831,-0.707632861183,2.071064143,2.59119397328
+23258,MODESTO,CA,37.6241,-120.9505,63.4171270718,-15.6681204613,4.75175518615,4.90707090737,0.036111878453,-2.63335296682,-0.646353820736,3.37486526733,1.85401303556
+26422,EAGLE,AK,64.77667,-141.14833,25.5536723164,-35.9842738294,3.47371971508,10.2310171274,0.0400423728814,0.279815701527,0.0737499767366,2.74271230243,1.17852121417
+93985,MINERAL WELLS,TX,32.7816,-98.0602,65.9237170596,-18.7320847786,4.98858971532,8.59370422968,0.110034674064,0.232596397633,-1.43865882543,3.45726120265,2.47094967544
+24138,DILLON,MT,45.2575,-112.5544,44.7855153203,-20.3585573152,6.93986471297,7.64015468173,0.0333217270195,1.45581968924,-1.22410139291,3.92053173326,2.26523334698
+93759,ROCKY MOUNT,NC,35.855,-77.89306,61.5137741047,-17.8143008796,4.48184684222,7.71263074497,0.178285123967,0.478017947521,-0.77459572054,2.99767651298,1.76417626424
+13989,EMPORIA,KS,38.32917,-96.19472,56.9203296703,-23.024321813,5.71241104571,9.00576702003,0.113221153846,0.658782978652,-1.11076633479,4.24376859779,2.4137523895
+93209,PASO ROBLES,CA,35.6697,-120.6283,61.3969571231,-13.5083822637,4.59596864668,4.94384538251,0.0228215767635,-2.36287056931,-0.723769843748,2.94608166927,1.98641602714
+13984,CONCORDIA,KS,39.5514,-97.6508,55.4537931034,-23.6446533978,6.40441560021,9.00717112766,0.111848275862,0.161376933401,-0.983783649888,4.44258235152,2.35051238251
+13985,DODGE CITY,KS,37.7686,-99.9678,56.7867950481,-23.7698150525,6.08108130487,9.084985992,0.0852338376891,-0.492223017333,-1.04679697134,4.56377011156,2.72310996482
+94626,GREENVILLE,ME,45.46222,-69.59528,42.257221458,-24.4444996893,8.57095434487,7.98097291653,0.197393397524,1.49013359974,-1.07768473798,3.16212589348,1.73272423178
+13987,JOPLIN,MO,37.1466,-94.5022,59.32,-21.4166324435,5.49493312416,8.79403603071,0.169655172414,0.58258733542,-0.736651455837,4.29858114246,1.90324228116
+13981,CHANUTE,KS,37.67028,-95.48417,58.6963788301,-22.1425852273,6.03023678008,8.63214256379,0.164665738162,0.809710024994,-1.10708962188,3.87979389215,2.34835723612
+94623,WISCASSET,ME,43.96361,-69.71167,47.1280991736,-21.5759201287,6.96312765916,7.55889204773,0.192623966942,0.231836162686,-0.708469520503,1.99765963687,1.59132494904
+04839,HOLLAND,MI,42.74611,-86.09667,52.0,-21.9083087441,6.55322241492,8.15018175088,0.152299723757,1.76237476247,-1.1622405841,4.00192419608,2.00331807376
+53844,LANCASTER,OH,39.75556,-82.65722,53.1611570248,-21.2408038008,4.64058877279,8.4697169862,0.141260330579,1.46908808587,-1.39118894879,3.36391930185,1.7172183705
+53847,MILTON,FL,30.70444,-87.02306,68.1965566714,-12.9726116566,5.28896049105,6.38339624922,0.219705882353,1.12865839961,-0.930252034072,2.97425831492,2.00279003717
+53841,FRANKFORT,KY,38.18472,-84.90333,56.195890411,-20.4990268434,4.76582795498,7.99352923798,0.187664383562,1.19981891653,-1.05112748962,2.90071428557,1.8790836997
+13988,KANSAS CITY,MO,39.1208,-94.5969,58.8321870702,-23.1062046231,6.35669920619,8.58787950146,0.10409215956,0.0185270860944,-0.959865893759,3.31302401465,2.28089842341
+14733,BUFFALO,NY,42.9408,-78.7358,50.853021978,-21.5212552743,6.79261249144,8.03436143187,0.188695054945,1.42687143172,-1.03572649494,4.18508133833,2.2546071445
+93990,HILL CITY,KS,39.37556,-99.82972,55.4684065934,-24.9447250829,6.08678103139,9.09375688294,0.0578777472527,-0.565165863487,-1.28053996023,3.98653902004,2.3503545739
+03919,SALINA,KS,38.8,-97.65,57.6253443526,-24.6275976974,6.28056743781,8.82723699471,0.0977892561983,-0.161343547762,-1.178430709,4.51551461293,2.27580844309
+54769,PLYMOUTH,MA,41.90972,-70.72944,51.8834951456,-19.5056314323,6.81142095811,7.72583859884,0.168120665742,1.0919376396,-1.0669066993,3.5955895403,2.01028378206
+25333,SITKA,AK,57.0481,-135.3647,45.3903448276,-9.86629777907,5.79561056591,3.74798160721,0.355179310345,2.04039113427,-0.335252486805,4.11065388794,1.78090636058
+04114,CHALLIS,ID,44.52278,-114.215,44.8925619835,-23.6649470021,6.04729773008,6.77642228096,0.022479338843,-1.39968324846,-1.0241499655,2.69472149856,1.51403022885
+04113,HERMISTON,OR,45.82583,-119.26111,52.9137691238,-19.3802422491,5.54082568668,6.42883927729,0.039826147427,-1.04444560674,-1.38499112686,4.25417911347,1.56769677233
+04112,STANLEY,ID,44.17083,-114.92722,36.5185694635,-21.3969844067,7.27117178205,7.88262497859,0.0782187070151,-0.56263730227,-0.360018317571,1.86127596538,1.7406083071
+04111,EVANSTON,WY,41.27306,-111.03056,44.2417127072,-22.6817100753,8.07460684495,7.30585956302,0.022479281768,0.3055107306,-1.06972667067,3.69152440015,2.65993064942
+04110,JEROME,ID,42.72667,-114.45639,50.1155433287,-22.3740459067,6.90907685088,6.85940732559,0.0289889958735,0.970432274482,-1.65268721165,4.11234493572,2.30222366428
+93184,SANTA ANA,CA,33.68,-117.86639,65.7715877437,-6.42524385069,6.3939181126,3.52594601256,0.0201183844011,-1.32872640832,-0.555326192916,1.76401873857,2.50559494517
+03937,LAKE CHARLES,LA,30.12472,-93.22833,70.2137931034,-14.2444640845,3.61535841275,6.39434984565,0.26644137931,1.30802336618,-1.1609487113,3.22825295206,2.02906802065
+54767,WILLIMANTIC,CT,41.74194,-72.18361,52.0553250346,-20.761033956,6.97534215622,7.62355606863,0.158526970954,0.613970474011,-1.18513506281,2.89715425723,1.69909660119
+94720,HYANNIS,MA,41.66861,-70.28,52.1152777778,-18.2016012751,7.51348674906,7.31600175213,0.1729375,0.443380438354,-0.958269317977,3.57445790373,2.30827542401
+94723,LAWRENCE,MA,42.71722,-71.12389,52.5254470426,-21.2986725449,6.47216722536,8.0033861956,0.136609353508,0.914389115397,-1.06684588236,3.23180473867,1.95005618684
+94725,MASSENA,NY,44.93583,-74.84583,46.0937062937,-25.3313893457,5.03431470716,9.17787436106,0.136699300699,1.27519518452,-0.804109576413,3.78096420925,1.87338900641
+94724,VINEYARD HAVEN,MA,41.39306,-70.615,52.4958563536,-17.5399850021,7.65624264224,7.87397357159,0.167133977901,1.29873595838,-1.13315078694,3.89978981586,2.37316232185
+13927,JACKSON,MS,32.33667,-90.22139,66.7955801105,-16.459682911,3.95018232107,7.05771271558,0.246422651934,0.699094545718,-1.18975516704,2.96700652325,1.82201797811
+94726,NEW BEDFORD,MA,41.67639,-70.95833,52.0729023384,-19.2863235507,6.87130710361,7.52999183417,0.170385144429,0.529550098603,-1.19965912553,3.50233859298,1.97502147896
+94728,NEW YORK,NY,40.77889,-73.96917,56.8110344828,-19.9151250158,7.24904806814,7.14204602789,0.183310344828,1.36345556225,-0.829495559473,2.37111060438,2.235297637
+54790,SHIRLEY,NY,40.82167,-72.86889,53.9132867133,-19.5314018976,6.3698880483,7.19982296078,0.17506993007,0.986348460681,-1.26173236151,3.59798067153,1.97216295572
+13776,LUMBERTON,NC,34.608,-79.0591,63.4875690608,-17.0513586864,4.46839599645,7.28956620803,0.179647790055,0.404628027673,-0.685954800988,2.97411813004,1.77665367329
+54792,CLEARFIELD,PA,41.04667,-78.41167,49.6928374656,-20.9874505439,5.71581705803,7.6340672877,0.137975206612,1.23154731373,-0.942995518548,2.81965670214,2.07154538619
+54793,SUSSEX,NJ,41.20028,-74.62306,51.299719888,-21.143740508,5.60893770949,7.43374393775,0.159831932773,0.805606777065,-1.08315286761,2.2321337079,1.57641430464
+93058,PUEBLO,CO,38.2901,-104.4983,54.0096418733,-23.4169228178,5.99519796121,8.24266041118,0.0387809917355,-0.95080741647,-1.1697840017,3.72260113155,2.15998734909
+93033,CARLSBAD,NM,32.3335,-104.258,64.5991735537,-19.9896298897,3.59754147935,7.23929033908,0.0463636363636,0.0667192293084,-1.7151068738,3.40513721538,2.54230197046
+93808,BOWLING GREEN,KY,36.9647,-86.4238,59.8817056396,-19.9967238703,4.18155541733,7.72958437019,0.206781292985,0.970628272651,-1.11094818928,3.14932662999,1.71718548983
+26435,NENANA,AK,64.55,-149.07167,27.1007092199,-35.6731931389,6.0140249554,9.53728379811,0.0534255319149,0.620373941249,-0.0417479109959,3.26250913822,1.40782736563
+53852,DECATUR,AL,34.6525,-86.94528,61.7454545455,-18.3040949804,2.91382770348,8.203015779,0.199321678322,1.30597728911,-1.37155233482,3.36535676748,1.67215929134
+93110,OXNARD,CA,34.20083,-119.20694,60.3765690377,-4.77026179626,3.36148289549,3.82058993528,0.0269665271967,0.150087636624,-0.464335965219,2.67934610696,2.34195029197
+94822,ROCKFORD,IL,42.1927,-89.093,50.90260631,-25.0082574458,6.73616021188,8.24072437998,0.148148148148,1.10995191451,-1.36254496719,3.74812084775,2.26015407025
+03167,HAWTHORNE,CA,33.92278,-118.33417,64.9821428571,-5.5458878405,4.55342147228,3.70326581531,0.0236126373626,-1.45519918699,-0.485974012712,1.77147002153,2.40200644994
+03166,FULLERTON,CA,33.87194,-117.97889,68.4038727524,-8.65576474355,4.90649355577,3.86311155426,0.0230705394191,-0.783848212604,-0.524221654302,1.31029013844,2.41085624409
+03164,CAMPO,CA,32.6233,-116.4728,59.0703448276,-11.9907901462,7.4318724913,5.1580261475,0.0393103448276,0.670836094094,-0.646768639448,2.76564606803,2.90579980063
+03162,PAGE,AZ,36.92611,-111.44778,61.6151724138,-24.4078046667,4.82304688115,5.08473985351,0.0281793103448,-1.31691875741,-0.83207047291,2.42479374658,1.76629313638
+03160,MERCURY,NV,36.6206,-116.0278,64.4398340249,-20.6426122172,5.38413444745,5.0632149427,0.0151244813278,-0.767764886478,-1.07542462206,3.94680785074,2.16355667286
+14707,GROTON NEW LONDON,CT,41.3275,-72.04944,52.6721763085,-18.6096478217,7.92034575297,6.83575051744,0.109111570248,1.61462095947,-0.84083714467,3.66162797768,2.27615566423
+14702,BEDFORD,MA,42.47,-71.28944,50.5459533608,-21.1183105272,6.4314702748,8.02243942457,0.141728395062,0.683568491524,-1.348246764,3.3554483581,1.93457247197
+24229,PORTLAND,OR,45.5958,-122.6093,54.706043956,-14.05762978,5.3580322857,4.79304292229,0.159065934066,0.628018043283,-0.428309986317,3.24904823539,1.90228996935
+12976,ANGLETON/LAKE JACKSON,TX,29.10972,-95.46194,70.0993103448,-13.5562804161,3.85256349658,6.67651858659,0.138786206897,0.899782949044,-1.53905076115,3.53946461351,1.99289832607
+12977,HOUSTON,TX,29.62194,-95.65667,71.3699015471,-14.5413430073,3.19141791709,6.77994855001,0.178924050633,0.754733962121,-1.25984833719,3.35922335944,2.15545267502
+40309,KOROR,PW,7.33333,134.48333,82.1666666667,0.608861312505,-0.456976625778,1.67383515853,0.3765,-0.550872516366,0.497104522501,3.07741594343,2.31146307944
+12975,HOUSTON,TX,29.51889,-95.24167,71.2046703297,-14.0071467121,4.5281833363,6.32276937307,0.19073489011,1.03894479114,-1.41859972781,2.98551648859,2.06408594992
+12972,ROCKPORT,TX,28.08361,-97.04639,73.4571823204,-13.1535846385,3.63759797715,6.57859439982,0.0917196132597,-0.523626914712,-1.19330557173,3.02232594763,3.23362419133
+24222,EVERETT,WA,47.90778,-122.28028,51.4875690608,-11.6949150704,4.64143085602,4.13846753224,0.146912983425,0.939891755557,-1.00362921223,3.77266030523,1.66130553227
+94240,QUILLAYUTE,WA,47.9375,-124.555,50.5804676754,-9.10914394431,4.570592128,4.3637887544,0.427984869326,0.504096380772,-0.812031322742,2.62945412106,1.81621475414
+12971,NEW BRAUNFELS,TX,29.7089,-98.0458,69.5468319559,-15.6245272891,4.40157929779,7.10995266319,0.113347107438,0.421333376645,-1.39015311842,3.33588196855,2.4365667761
+94846,CHICAGO,IL,41.995,-87.9336,52.2682255846,-23.5573034155,7.06941908443,8.35655687006,0.155013755158,1.15167244266,-1.02740179474,3.61447045824,2.65857851616
+94847,DETROIT,MI,42.2313,-83.3308,52.3269230769,-22.7912195348,6.75994980879,7.67861724057,0.154759615385,1.44297451752,-0.955563152357,3.93321977507,2.12025352099
+94929,ASHLAND,WI,46.54861,-90.91889,42.8537931034,-24.3959425183,8.21018973083,8.82688815344,0.122875862069,0.744452034396,-0.669712175561,3.23901432138,2.09944670085
+93729,CAPE HATTERAS,NC,35.2326,-75.6219,64.8174273859,-15.2034664238,6.31316899909,6.31149891509,0.228236514523,-0.191507657462,-0.927719895568,3.34492797031,2.48868776897
+94849,ALPENA,MI,45.0716,-83.5644,45.3181189488,-22.1750225531,7.833007059,8.76718036729,0.146825726141,0.872710986232,-0.74111643197,3.08909291238,2.23272514985
+24154,MULLAN PASS,ID,47.45694,-115.645,39.2552891396,-18.6196000824,7.70985270512,6.78874996742,0.198427362482,0.937767630684,-0.37893757611,2.08257403027,2.50584982606
+24132,BOZEMAN,MT,45.788,-111.1608,44.4204702628,-21.7103464136,6.59524377886,8.44102860829,0.0516390041494,-0.610553171692,-0.739301504649,2.59772432934,2.11468204451
+93842,COLUMBUS,GA,32.5161,-84.9422,67.1865569273,-15.4061237194,3.99157704828,6.37879018272,0.201358024691,0.227520503412,-0.823977186092,2.71297371961,1.95453655584
+93102,FALLON,NV,39.41667,-118.71667,54.4879432624,-21.8282437544,6.92756227641,6.6394930975,0.0119574468085,-1.05059588934,-0.936317411648,2.98778852289,2.00993081704
+93874,GULFPORT,MS,30.4119,-89.0808,69.3375,-14.711576007,4.01781692817,6.28478566356,0.266416666667,0.657636591065,-1.12955754042,3.41204789152,1.8713508989
+13959,WACO,TX,31.61889,-97.22833,68.0331034483,-18.7403322454,4.70249955217,7.79335816205,0.142344827586,-0.0781463004112,-1.42415477837,3.91874367987,2.36539566442
+13958,AUSTIN/CITY,TX,30.3208,-97.7604,71.1666666667,-16.2835502157,4.64976107923,7.19837270222,0.152417355372,-0.277663927034,-1.01880735242,2.2297265735,2.26997900418
+12895,FORT PIERCE,FL,27.49806,-80.37667,73.604109589,-7.67166491007,3.75436445102,4.955001264,0.194095890411,0.0210577907951,-1.04172651113,3.00007625161,2.2198979143
+12894,FORT MYERS,FL,26.53611,-81.755,75.0739726027,-7.29446338184,3.56583704621,3.96583921238,0.178479452055,0.448368177812,-0.565971988564,2.79132955069,2.34100647354
+12897,NAPLES,FL,26.1522,-81.7752,75.9779310345,-7.03689563825,3.7222313497,3.79661052613,0.180082758621,0.289144723706,-0.697341636245,2.67693681225,2.66300258659
+12896,MARATHON,FL,24.72583,-81.05167,79.908839779,-5.87147659146,2.5691535497,3.63469533119,0.199848066298,1.16507033603,-0.231395466895,3.21343820512,2.36455225102
+94817,PONTIAC,MI,42.665,-83.41806,49.7334254144,-22.855389889,6.93492675754,8.30097473488,0.110034530387,1.3532586143,-1.1550364651,3.68690375342,2.11357332809
+26425,GULKANA,AK,62.1591,-145.4588,27.5493741307,-32.0535972693,5.61553973184,8.54973702501,0.053949930459,-2.32262537076,0.700354744353,5.03549139984,1.17060587173
+26642,KIVALINA,AK,67.73167,-164.54833,19.7701949861,-24.911495428,15.8437971146,7.76473546927,0.0593314763231,1.17719290051,0.443707685196,6.20068397192,1.93520299165
+04838,CHICAGO/PROSPECT HGTS/WHEELI,IL,42.12083,-87.90472,51.657967033,-23.3361855226,6.90324571515,8.59419625005,0.111098901099,1.25895187482,-1.1290965636,3.46041325413,2.17169799546
+93862,TUPELO,MS,34.2622,-88.7713,63.3823933975,-18.2999286157,4.39507727273,7.11334015388,0.211423658872,1.01243579066,-0.791349683097,2.95548584675,1.95202709294
+03813,MACON,GA,32.6847,-83.6527,65.002739726,-15.7180639691,4.18214163301,6.4630838245,0.216308219178,0.527929657593,-1.02691714461,2.65653329547,1.86482609165
+13986,HUTCHINSON,KS,38.06528,-97.86056,57.7623626374,-23.9001106382,6.30991833018,8.76116623825,0.0862706043956,-0.262663070479,-1.2424239401,4.52371946326,2.22144098585
+12854,ORLANDO,FL,28.77972,-81.24361,73.5812672176,-9.62255650796,3.90422264427,5.22819746676,0.191880165289,0.157289104317,-0.649915397722,2.64572255533,2.57872448414
+54772,FRYEBURG,ME,43.99056,-70.9475,46.0972222222,-23.7479286305,6.90295258838,8.6249629926,0.180333333333,0.38544087679,-0.966666588101,2.52180672973,1.41113554388
+93986,HOBART,OK,34.9894,-99.0525,62.8484005563,-22.8295032281,5.7935410888,8.35743669812,0.0893532684284,0.183566318421,-0.658252406866,4.49163696069,2.75405972205
+93987,LUFKIN,TX,31.23611,-94.75444,69.0412654746,-16.1690530943,3.74228734958,7.10351959169,0.172180192572,0.398496146044,-1.10768350436,2.63583655049,2.02431497897
+53119,HANFORD,CA,36.31889,-119.62889,64.0523415978,-17.4764629017,5.50314168827,4.61280980192,0.0177066115702,-2.34214517772,-0.586063857107,2.99450416071,1.63361712514
+11641,SAN JUAN,PR,18.4325,-66.01083,81.6982167353,-2.29295667477,2.1173348221,1.83741381774,0.289465020576,-0.606997308901,-1.17871310103,3.0246338003,2.58154572362
+11640,CHARLOTTE AMALIE,VI,18.3363,-64.98,81.2584269663,-2.43149155273,2.34664250861,2.18526349492,0.189585674157,-0.402529676746,-0.66500544324,2.67928513158,3.59777545829
+23034,SAN ANGELO,TX,31.35167,-100.495,67.9600550964,-19.0705952022,3.38739625518,8.32139878654,0.0877066115702,0.0901754477162,-1.67164572817,3.48724886298,2.57249682819
+93988,PINE BLUFF,AR,34.175,-91.93472,64.0265734266,-18.6129825687,5.08533961899,7.32888576263,0.195272727273,0.82737233817,-1.22623473851,3.19601379552,2.030282597
+93989,QUINCY,IL,39.93694,-91.19194,54.7831491713,-23.7846869051,5.96854936277,8.67845110785,0.12395718232,1.48281608487,-1.22238738466,3.3708602983,2.61573141961
+13781,WILMINGTON,DE,39.6728,-75.6008,56.6387362637,-20.4005760194,6.41794243268,7.30162363555,0.178949175824,0.768744622688,-1.17033802424,3.45171440567,2.26615370372
+13786,ELIZABETH CITY,NC,36.26056,-76.175,63.0151515152,-17.114491626,5.56510414603,7.54054163394,0.191136363636,0.368880805924,-0.993247431802,3.63030109662,2.36955658162
+93069,CORTEZ,CO,37.30694,-108.62639,49.9917582418,-22.8811416752,6.30374544666,5.77809207312,0.0433104395604,-0.644348972706,-0.897012341183,2.45959677393,2.57747957176
+13754,CHERRY POINT,NC,34.9,-76.88333,63.6648044693,-15.7197882527,4.85100972645,7.19680440153,0.217541899441,0.459778559578,-0.944613342244,3.7377577575,2.10202053883
+93805,TALLAHASSEE,FL,30.39306,-84.35333,69.9116022099,-13.2792108505,4.51135144595,6.14923754094,0.251395027624,0.203505931222,-0.810658399375,2.62813801485,1.94721183117
+23183,PHOENIX,AZ,33.4277,-112.0038,76.7125171939,-19.6474269202,5.73319807998,4.47241276313,0.0256258596974,-1.46465496845,-0.226068839246,2.29651166301,2.65410613532
+93806,TUSCALOOSA,AL,33.2119,-87.6161,65.4629120879,-16.8260229368,4.01855238821,6.68494982952,0.202994505495,0.676278793005,-1.06465888676,2.57625890229,1.76148812005
+93801,ROME,GA,34.34778,-85.16111,61.9671232877,-17.4421793966,3.9008430447,6.2413809183,0.21848630137,0.676583819706,-0.816362141728,2.31354387667,1.56256750935
+23199,EL CENTRO,CA,32.81667,-115.68333,74.1894150418,-18.0401372216,6.69190478583,4.4450904888,0.019721448468,-1.26986318081,-1.34577352686,4.40737760171,1.66203343022
+23129,LONG BEACH,CA,33.8116,-118.1463,65.7555555556,-7.58733313071,5.10283559561,4.18515685758,0.0258125,-1.03881396396,-0.54239317091,1.7823569281,2.54827996169
+03196,NOGALES,AZ,31.42083,-110.84583,65.3240223464,-16.0673059322,5.08530328038,4.50012904548,0.061906424581,-0.436299369786,-1.10172291908,2.69468818786,2.1140804844
+23194,WINSLOW,AZ,35.0281,-110.7208,56.9805013928,-22.114182461,6.05913805701,5.79422430204,0.0312325905292,-1.54554962458,-1.57793975675,4.0048253613,1.86502034573
+93718,NORTH MYRTLE BEACH,SC,33.81167,-78.72389,64.5602739726,-15.4347738595,4.68161339401,6.88259302208,0.18051369863,-0.911468040378,-0.791932891307,3.07845828369,2.30318988247
+23190,SANTA BARBARA,CA,34.4258,-119.8425,59.7642163662,-6.21018371418,3.77001733913,3.83185955717,0.0363661581137,-1.10905875489,-0.838944681145,2.170640599,2.09567617052
+23191,AVALON,CA,33.405,-118.41583,62.3812849162,-5.74162040882,6.22864175315,6.27039681199,0.0321787709497,1.26690494451,-0.718720744538,3.06428022317,2.08575597421
+94107,ROME,OR,42.59056,-117.86444,49.8571428571,-21.7454244847,6.21629798276,7.64504902771,0.0224257425743,0.0734930323992,-0.845513279286,3.53930228315,2.14971368768
+03184,PHOENIX,AZ,33.68833,-112.08167,72.9144827586,-19.2035231713,5.86234293531,4.62273674429,0.0333517241379,-1.21002132379,-0.5416299714,2.16680238607,2.37152253602
+53802,MATTOON/CHARLESTON,IL,39.47806,-88.28028,53.9661971831,-22.0136310368,6.0022303422,9.61275547263,0.162528169014,1.94215618384,-1.42491971012,3.78022786007,2.25353432512
+24150,LIVINGSTON,MT,45.6983,-110.4408,47.8047419805,-19.8718243487,6.36613118074,9.34629730539,0.0439330543933,5.76823046433,-1.16852519566,7.67710283062,1.89738082816
+24022,LARAMIE,WY,41.3167,-105.6833,43.155027933,-21.8923290604,7.22036442224,8.92798876144,0.0350488826816,1.56405933341,-1.23499582695,4.97972445623,2.44757882962
+93706,HAGERSTOWN,MD,39.70778,-77.72972,55.4584487535,-20.9692452879,5.2948594502,7.63740865761,0.14472299169,1.1709152699,-1.1897015677,3.52216432758,1.89087495067
+23182,PALMDALE,CA,34.62944,-118.08361,63.8968363136,-18.7101032473,6.18674155243,4.97778026057,0.0100068775791,-2.18717634842,-1.73143978183,4.96733073704,1.94625159669
+03812,ASHEVILLE,NC,35.43194,-82.5375,57.4429160935,-16.8868879784,4.03962943677,6.30139509325,0.247489683631,1.72164334559,-1.1917129711,3.64934699923,1.57635934787
+03811,JACKSON,TN,35.593,-88.9167,60.8125,-18.9681473418,4.31045764866,8.19515397169,0.20275,1.4991690337,-1.30018268862,3.28550543869,1.76346957782
+03959,BARTLESVILLE,OK,36.7683,-96.0261,59.4778393352,-21.9841629387,5.08314534828,8.55069619472,0.151932132964,0.435306442719,-1.05723666432,3.04981935305,1.77931613961
+03816,PADUCAH,KY,37.0563,-88.7744,59.258953168,-20.5758820187,5.07817030098,8.25295752847,0.184421487603,1.20681516809,-1.17358809307,3.10830180636,2.01229524232
+94030,VERNAL,UT,40.44278,-109.51278,47.5041208791,-28.1950511678,6.61586878664,5.76502170447,0.0280837912088,-1.64198985903,-0.980986314762,2.71918530512,1.67188085255
+03952,NORTH LITTLE ROCK,AR,34.8353,-92.2596,64.9683453237,-19.4080822654,-0.407258801865,6.87885108549,0.201237410072,-0.804103998132,0.695912650794,3.32915375391,1.14570995702
+03953,JONESBORO,AR,35.83111,-90.64639,62.0405027933,-20.0960793602,6.62301354424,7.56967852745,0.177946927374,0.615772281686,-1.48042997368,3.49667335731,2.01488396013
+03950,LAWTON,OK,34.5584,-98.4172,63.7048275862,-21.8125270176,5.9782457478,8.31013681482,0.0799034482759,-0.294078260623,-1.14200414308,3.98317210811,2.29628108211
+03818,MARIANNA,FL,30.83556,-85.18389,68.9125,-13.7109399751,3.38571878624,6.17244016773,0.255875,0.435239416935,-0.847161871567,2.61388971543,1.91094519807
+03957,MEDICINE LODGE,KS,37.2839,-98.5528,58.8670360111,-23.5939195722,6.00821243024,8.45346528695,0.0974376731302,-0.288013855039,-0.887270957658,3.66879946175,2.52329933017
+03954,OKLAHOMA CITY,OK,35.53417,-97.64694,62.2375690608,-21.4063348214,5.9621307814,8.48950153465,0.155863259669,0.276189940326,-1.16845561656,4.83290016358,2.41430477099
diff --git a/bigtop-data-generators/build.gradle b/bigtop-data-generators/build.gradle
new file mode 100644
index 00000000..17baffb1
--- /dev/null
+++ b/bigtop-data-generators/build.gradle
@@ -0,0 +1,44 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+subprojects {
+ apply plugin: 'eclipse'
+ apply plugin: 'java'
+
+ Node xml = new XmlParser().parse("../pom.xml")
+ group = xml.groupId.first().value().first()
+ version = xml.version.first().value().first()
+
+ repositories {
+ mavenLocal()
+ mavenCentral()
+ }
+
+ test {
+ // show standard out and error on console
+ testLogging.showStandardStreams = true
+
+ // listen to events in the test execution lifecycle
+ beforeTest { descriptor ->
+ logger.lifecycle("Running test: " + descriptor)
+ }
+
+ // listen to standard out and standard error of the test JVM(s)
+ onOutput { descriptor, event ->
+ logger.lifecycle("Test: " + descriptor + " produced standard out/err: " + event.message )
+ }
+ }
+}
diff --git a/bigtop-data-generators/settings.gradle b/bigtop-data-generators/settings.gradle
index a0e23a3d..69b9bec8 100644
--- a/bigtop-data-generators/settings.gradle
+++ b/bigtop-data-generators/settings.gradle
@@ -13,4 +13,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-include ":bigpetstore-data-generator", ":bigtop-name-generator", ":bigtop-samplers", ":bigtop-location-data"
+include ":bigpetstore-data-generator", ":bigtop-name-generator", ":bigtop-samplers", ":bigtop-location-data", ":bigtop-weatherman"