mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 00:10:06 +00:00 
			
		
		
		
	Merge pull request #233 from AdenKoperczak/update_station_locations
Updated radar locations and added elevation data in radar_sites.json using NOAA's HOMR
This commit is contained in:
		
						commit
						a0b04b0e64
					
				
					 3 changed files with 525 additions and 205 deletions
				
			
		|  | @ -1,208 +1,208 @@ | ||||||
| [ | [ | ||||||
| 	{ "type": "wsr88d", "id": "RODN", "lat": 26.307796,  "lon": 127.903422,   "country": "JPN", "state": "OKI", "place": "Kadena Air Base",         "tz": "Asia/Tokyo" }, | 	{ "type": "wsr88d", "id": "RODN", "lat": 26.3078,    "lon": 127.903469,   "country": "JPN", "state": "OKI", "place": "Kadena Air Base",         "tz": "Asia/Tokyo",                   "elevation": 412.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "RKSG", "lat": 37.207652,  "lon": 127.285614,   "country": "KOR", "state": "41",  "place": "Camp Humphreys",          "tz": "Asia/Seoul" }, | 	{ "type": "wsr88d", "id": "RKSG", "lat": 37.207569,  "lon": 127.285561,   "country": "KOR", "state": "41",  "place": "Camp Humphreys",          "tz": "Asia/Seoul",                   "elevation": 1521.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "RKJK", "lat": 35.92417,   "lon": 126.62222,    "country": "KOR", "state": "45",  "place": "Kunsan Air Base",         "tz": "Asia/Seoul" }, | 	{ "type": "wsr88d", "id": "RKJK", "lat": 35.924167,  "lon": 126.622222,   "country": "KOR", "state": "45",  "place": "Kunsan Air Base",         "tz": "Asia/Seoul",                   "elevation": 192.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PABC", "lat": 60.791987,  "lon": -161.876539,  "country": "USA", "state": "AK",  "place": "Bethel",                  "tz": "America/Anchorage" }, | 	{ "type": "wsr88d", "id": "PABC", "lat": 60.791944,  "lon": -161.876389,  "country": "USA", "state": "AK",  "place": "Bethel",                  "tz": "America/Anchorage",            "elevation": 193.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PAPD", "lat": 65.0351238, "lon": -147.5014222, "country": "USA", "state": "AK",  "place": "Fairbanks/Pedro Dome",    "tz": "America/Anchorage" }, | 	{ "type": "wsr88d", "id": "PAPD", "lat": 65.035114,  "lon": -147.501431,  "country": "USA", "state": "AK",  "place": "Fairbanks/Pedro Dome",    "tz": "America/Anchorage",            "elevation": 2707.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PAHG", "lat": 60.6156335, "lon": -151.2832296, "country": "USA", "state": "AK",  "place": "Kenai",                   "tz": "America/Anchorage" }, | 	{ "type": "wsr88d", "id": "PAHG", "lat": 60.725914,  "lon": -151.351467,  "country": "USA", "state": "AK",  "place": "Kenai",                   "tz": "America/Anchorage",            "elevation": 356.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PAKC", "lat": 58.6794558, "lon": -156.6293335, "country": "USA", "state": "AK",  "place": "King Salmon",             "tz": "America/Anchorage" }, | 	{ "type": "wsr88d", "id": "PAKC", "lat": 58.679444,  "lon": -156.629444,  "country": "USA", "state": "AK",  "place": "King Salmon",             "tz": "America/Anchorage",            "elevation": 144.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PAIH", "lat": 59.46194,   "lon": -146.30111,   "country": "USA", "state": "AK",  "place": "Middleton Island",        "tz": "America/Anchorage" }, | 	{ "type": "wsr88d", "id": "PAIH", "lat": 59.460767,  "lon": -146.303447,  "country": "USA", "state": "AK",  "place": "Middleton Island",        "tz": "America/Anchorage",            "elevation": 132.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PAEC", "lat": 64.5114973, "lon": -165.2949071, "country": "USA", "state": "AK",  "place": "Nome",                    "tz": "America/Nome" }, | 	{ "type": "wsr88d", "id": "PAEC", "lat": 64.511389,  "lon": -165.295,     "country": "USA", "state": "AK",  "place": "Nome",                    "tz": "America/Nome",                 "elevation": 90.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PACG", "lat": 56.85214,   "lon": -135.552417,  "country": "USA", "state": "AK",  "place": "Sitka/Biorka Island",     "tz": "America/Sitka" }, | 	{ "type": "wsr88d", "id": "PACG", "lat": 56.852778,  "lon": -135.529167,  "country": "USA", "state": "AK",  "place": "Sitka/Biorka Island",     "tz": "America/Sitka",                "elevation": 272.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBMX", "lat": 33.1722806, "lon": -86.7698425,  "country": "USA", "state": "AL",  "place": "Birmingham",              "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KBMX", "lat": 33.1722806, "lon": -86.7698425,  "country": "USA", "state": "AL",  "place": "Birmingham",              "tz": "America/Chicago",              "elevation": 759.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KEOX", "lat": 31.4605622, "lon": -85.4592401,  "country": "USA", "state": "AL",  "place": "Fort Rucker",             "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KEOX", "lat": 31.460556,  "lon": -85.459389,   "country": "USA", "state": "AL",  "place": "Fort Rucker",             "tz": "America/Chicago",              "elevation": 537.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KHTX", "lat": 34.930508,  "lon": -86.0837388,  "country": "USA", "state": "AL",  "place": "Huntsville",              "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KHTX", "lat": 34.930556,  "lon": -86.083611,   "country": "USA", "state": "AL",  "place": "Huntsville",              "tz": "America/Chicago",              "elevation": 1859.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMXX", "lat": 32.5366608, "lon": -85.7897848,  "country": "USA", "state": "AL",  "place": "Maxwell AFB",             "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KMXX", "lat": 32.53665,   "lon": -85.78975,    "country": "USA", "state": "AL",  "place": "Maxwell AFB",             "tz": "America/Chicago",              "elevation": 560.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMOB", "lat": 30.6795378, "lon": -88.2397816,  "country": "USA", "state": "AL",  "place": "Mobile",                  "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KMOB", "lat": 30.6795378, "lon": -88.2397816,  "country": "USA", "state": "AL",  "place": "Mobile",                  "tz": "America/Chicago",              "elevation": 289.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KSRX", "lat": 35.2904423, "lon": -94.3619075,  "country": "USA", "state": "AR",  "place": "Fort Smith",              "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KSRX", "lat": 35.290417,  "lon": -94.361889,   "country": "USA", "state": "AR",  "place": "Fort Smith",              "tz": "America/Chicago",              "elevation": 737.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLZK", "lat": 34.8365261, "lon": -92.2621697,  "country": "USA", "state": "AR",  "place": "Little Rock",             "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KLZK", "lat": 34.8365,    "lon": -92.262194,   "country": "USA", "state": "AR",  "place": "Little Rock",             "tz": "America/Chicago",              "elevation": 649.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFSX", "lat": 34.574449,  "lon": -111.198367,  "country": "USA", "state": "AZ",  "place": "Flagstaff",               "tz": "America/Phoenix" }, | 	{ "type": "wsr88d", "id": "KFSX", "lat": 34.574333,  "lon": -111.198444,  "country": "USA", "state": "AZ",  "place": "Flagstaff",               "tz": "America/Phoenix",              "elevation": 7514.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KIWA", "lat": 33.289111,  "lon": -111.6700092, "country": "USA", "state": "AZ",  "place": "Phoenix",                 "tz": "America/Phoenix" }, | 	{ "type": "wsr88d", "id": "KIWA", "lat": 33.289233,  "lon": -111.669917,  "country": "USA", "state": "AZ",  "place": "Phoenix",                 "tz": "America/Phoenix",              "elevation": 1426.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KEMX", "lat": 31.8937186, "lon": -110.6304306, "country": "USA", "state": "AZ",  "place": "Tucson",                  "tz": "America/Phoenix" }, | 	{ "type": "wsr88d", "id": "KEMX", "lat": 31.89365,   "lon": -110.63025,   "country": "USA", "state": "AZ",  "place": "Tucson",                  "tz": "America/Phoenix",              "elevation": 5319.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KYUX", "lat": 32.4953477, "lon": -114.6567214, "country": "USA", "state": "AZ",  "place": "Yuma",                    "tz": "America/Phoenix" }, | 	{ "type": "wsr88d", "id": "KYUX", "lat": 32.495281,  "lon": -114.656711,  "country": "USA", "state": "AZ",  "place": "Yuma",                    "tz": "America/Phoenix",              "elevation": 239.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBBX", "lat": 39.4956958, "lon": -121.6316557, "country": "USA", "state": "CA",  "place": "Beale AFB",               "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KBBX", "lat": 39.495639,  "lon": -121.631611,  "country": "USA", "state": "CA",  "place": "Beale AFB",               "tz": "America/Los_Angeles",          "elevation": 221.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KEYX", "lat": 35.0979358, "lon": -117.5608832, "country": "USA", "state": "CA",  "place": "Edwards AFB",             "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KEYX", "lat": 35.09785,   "lon": -117.56075,   "country": "USA", "state": "CA",  "place": "Edwards AFB",             "tz": "America/Los_Angeles",          "elevation": 2873.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBHX", "lat": 40.4986955, "lon": -124.2918867, "country": "USA", "state": "CA",  "place": "Eureka",                  "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KBHX", "lat": 40.498583,  "lon": -124.292167,  "country": "USA", "state": "CA",  "place": "Eureka",                  "tz": "America/Los_Angeles",          "elevation": 2516.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KVTX", "lat": 34.4116386, "lon": -119.1795641, "country": "USA", "state": "CA",  "place": "Los Angeles",             "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KVTX", "lat": 34.4116386, "lon": -119.1795641, "country": "USA", "state": "CA",  "place": "Los Angeles",             "tz": "America/Los_Angeles",          "elevation": 2807.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDAX", "lat": 38.5011529, "lon": -121.6778487, "country": "USA", "state": "CA",  "place": "Sacramento",              "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KDAX", "lat": 38.5011529, "lon": -121.6778487, "country": "USA", "state": "CA",  "place": "Sacramento",              "tz": "America/Los_Angeles",          "elevation": 144.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KNKX", "lat": 32.9189891, "lon": -117.041814,  "country": "USA", "state": "CA",  "place": "San Diego",               "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KNKX", "lat": 32.919017,  "lon": -117.0418,    "country": "USA", "state": "CA",  "place": "San Diego",               "tz": "America/Los_Angeles",          "elevation": 1052.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMUX", "lat": 37.155152,  "lon": -121.8984577, "country": "USA", "state": "CA",  "place": "San Francisco",           "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KMUX", "lat": 37.155222,  "lon": -121.898444,  "country": "USA", "state": "CA",  "place": "San Francisco",           "tz": "America/Los_Angeles",          "elevation": 3550.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KHNX", "lat": 36.3142088, "lon": -119.6320903, "country": "USA", "state": "CA",  "place": "San Joaquin Valley",      "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KHNX", "lat": 36.314181,  "lon": -119.632139,  "country": "USA", "state": "CA",  "place": "San Joaquin Valley",      "tz": "America/Los_Angeles",          "elevation": 340.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KSOX", "lat": 33.8176452, "lon": -117.6359743, "country": "USA", "state": "CA",  "place": "Santa Ana Mountains",     "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KSOX", "lat": 33.817733,  "lon": -117.636,     "country": "USA", "state": "CA",  "place": "Santa Ana Mountains",     "tz": "America/Los_Angeles",          "elevation": 3106.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KVBG", "lat": 34.8383137, "lon": -120.3977805, "country": "USA", "state": "CA",  "place": "Vandenberg AFB",          "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KVBX", "lat": 34.83855,   "lon": -120.397917,  "country": "USA", "state": "CA",  "place": "Vandenberg AFB",          "tz": "America/Los_Angeles",          "elevation": 1354.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFTG", "lat": 39.7866156, "lon": -104.5458126, "country": "USA", "state": "CO",  "place": "Denver",                  "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KFTG", "lat": 39.786639,  "lon": -104.545806,  "country": "USA", "state": "CO",  "place": "Denver",                  "tz": "America/Denver",               "elevation": 5611.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGJX", "lat": 39.0619824, "lon": -108.2137012, "country": "USA", "state": "CO",  "place": "Grand Junction",          "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KGJX", "lat": 39.062169,  "lon": -108.213761,  "country": "USA", "state": "CO",  "place": "Grand Junction",          "tz": "America/Denver",               "elevation": 10101.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KPUX", "lat": 38.4595034, "lon": -104.1816223, "country": "USA", "state": "CO",  "place": "Pueblo",                  "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KPUX", "lat": 38.45955,   "lon": -104.18135,   "country": "USA", "state": "CO",  "place": "Pueblo",                  "tz": "America/Denver",               "elevation": 5363.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDOX", "lat": 38.8257651, "lon": -75.4400763,  "country": "USA", "state": "DE",  "place": "Dover AFB",               "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KDOX", "lat": 38.825767,  "lon": -75.440117,   "country": "USA", "state": "DE",  "place": "Dover AFB",               "tz": "America/New_York",             "elevation": 164.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KEVX", "lat": 30.5649908, "lon": -85.921559,   "country": "USA", "state": "FL",  "place": "Eglin AFB",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KEVX", "lat": 30.565033,  "lon": -85.921667,   "country": "USA", "state": "FL",  "place": "Eglin AFB",               "tz": "America/Chicago",              "elevation": 221.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KJAX", "lat": 30.4846878, "lon": -81.7018917,  "country": "USA", "state": "FL",  "place": "Jacksonville",            "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KJAX", "lat": 30.484633,  "lon": -81.7019,     "country": "USA", "state": "FL",  "place": "Jacksonville",            "tz": "America/New_York",             "elevation": 160.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBYX", "lat": 24.5974996, "lon": -81.7032355,  "country": "USA", "state": "FL",  "place": "Key West",                "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KBYX", "lat": 24.5975,    "lon": -81.703167,   "country": "USA", "state": "FL",  "place": "Key West",                "tz": "America/New_York",             "elevation": 89.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMLB", "lat": 28.1131808, "lon": -80.6540988,  "country": "USA", "state": "FL",  "place": "Melbourne",               "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KMLB", "lat": 28.113194,  "lon": -80.654083,   "country": "USA", "state": "FL",  "place": "Melbourne",               "tz": "America/New_York",             "elevation": 149.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KAMX", "lat": 25.6111275, "lon": -80.412747,   "country": "USA", "state": "FL",  "place": "Miami",                   "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KAMX", "lat": 25.611083,  "lon": -80.412667,   "country": "USA", "state": "FL",  "place": "Miami",                   "tz": "America/New_York",             "elevation": 111.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KTLH", "lat": 30.397568,  "lon": -84.3289116,  "country": "USA", "state": "FL",  "place": "Tallahassee",             "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KTLH", "lat": 30.397583,  "lon": -84.328944,   "country": "USA", "state": "FL",  "place": "Tallahassee",             "tz": "America/New_York",             "elevation": 177.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KTBW", "lat": 27.7054701, "lon": -82.40179,    "country": "USA", "state": "FL",  "place": "Tampa",                   "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KTBW", "lat": 27.7055,    "lon": -82.401778,   "country": "USA", "state": "FL",  "place": "Tampa",                   "tz": "America/New_York",             "elevation": 122.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFFC", "lat": 33.3635771, "lon": -84.565866,   "country": "USA", "state": "GA",  "place": "Atlanta",                 "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KFFC", "lat": 33.36355,   "lon": -84.56595,    "country": "USA", "state": "GA",  "place": "Atlanta",                 "tz": "America/New_York",             "elevation": 972.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KVAX", "lat": 30.8903853, "lon": -83.0019021,  "country": "USA", "state": "GA",  "place": "Moody AFB",               "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KVAX", "lat": 30.890278,  "lon": -83.001806,   "country": "USA", "state": "GA",  "place": "Moody AFB",               "tz": "America/New_York",             "elevation": 330.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KJGX", "lat": 32.6755239, "lon": -83.3508575,  "country": "USA", "state": "GA",  "place": "Robins AFB",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KJGX", "lat": 32.675683,  "lon": -83.350833,   "country": "USA", "state": "GA",  "place": "Robins AFB",              "tz": "America/New_York",             "elevation": 618.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PGUA", "lat": 13.455965,  "lon": 144.8111022,  "country": "USA", "state": "GU",  "place": "Andersen AFB",            "tz": "Pacific/Guam" }, | 	{ "type": "wsr88d", "id": "PGUA", "lat": 13.455833,  "lon": 144.811111,   "country": "USA", "state": "GU",  "place": "Andersen AFB",            "tz": "Pacific/Guam",                 "elevation": 386.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PHKI", "lat": 21.8938762, "lon": -159.5524585, "country": "USA", "state": "HI",  "place": "Kauai",                   "tz": "Pacific/Honolulu" }, | 	{ "type": "wsr88d", "id": "PHKI", "lat": 21.893889,  "lon": -159.5525,    "country": "USA", "state": "HI",  "place": "Kauai",                   "tz": "Pacific/Honolulu",             "elevation": 340.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PHKM", "lat": 20.1254606, "lon": -155.778054,  "country": "USA", "state": "HI",  "place": "Kohala",                  "tz": "Pacific/Honolulu" }, | 	{ "type": "wsr88d", "id": "PHKM", "lat": 20.125278,  "lon": -155.777778,  "country": "USA", "state": "HI",  "place": "Kohala",                  "tz": "Pacific/Honolulu",             "elevation": 3966.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PHMO", "lat": 21.1327531, "lon": -157.1802807, "country": "USA", "state": "HI",  "place": "Molokai",                 "tz": "Pacific/Honolulu" }, | 	{ "type": "wsr88d", "id": "PHMO", "lat": 21.132778,  "lon": -157.180278,  "country": "USA", "state": "HI",  "place": "Molokai",                 "tz": "Pacific/Honolulu",             "elevation": 1444.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "PHWA", "lat": 19.0950155, "lon": -155.5688846, "country": "USA", "state": "HI",  "place": "South Shore",             "tz": "Pacific/Honolulu" }, | 	{ "type": "wsr88d", "id": "PHWA", "lat": 19.095,     "lon": -155.568889,  "country": "USA", "state": "HI",  "place": "South Shore",             "tz": "Pacific/Honolulu",             "elevation": 1461.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDVN", "lat": 41.611556,  "lon": -90.5809987,  "country": "USA", "state": "IA",  "place": "Davenport",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KDVN", "lat": 41.611556,  "lon": -90.5809987,  "country": "USA", "state": "IA",  "place": "Davenport",               "tz": "America/Chicago",              "elevation": 851.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDMX", "lat": 41.7311788, "lon": -93.7229235,  "country": "USA", "state": "IA",  "place": "Des Moines",              "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KDMX", "lat": 41.7312,    "lon": -93.722869,   "country": "USA", "state": "IA",  "place": "Des Moines",              "tz": "America/Chicago",              "elevation": 1095.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCBX", "lat": 43.4902104, "lon": -116.2360436, "country": "USA", "state": "ID",  "place": "Boise",                   "tz": "America/Boise" }, | 	{ "type": "wsr88d", "id": "KCBX", "lat": 43.490217,  "lon": -116.236033,  "country": "USA", "state": "ID",  "place": "Boise",                   "tz": "America/Boise",                "elevation": 3172.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KSFX", "lat": 43.1055967, "lon": -112.6860487, "country": "USA", "state": "ID",  "place": "Pocatello/Idaho Falls",   "tz": "America/Boise" }, | 	{ "type": "wsr88d", "id": "KSFX", "lat": 43.1056,    "lon": -112.686133,  "country": "USA", "state": "ID",  "place": "Pocatello/Idaho Falls",   "tz": "America/Boise",                "elevation": 4539.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLOT", "lat": 41.6044264, "lon": -88.084361,   "country": "USA", "state": "IL",  "place": "Chicago",                 "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KLOT", "lat": 41.604444,  "lon": -88.084444,   "country": "USA", "state": "IL",  "place": "Chicago",                 "tz": "America/Chicago",              "elevation": 760.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KILX", "lat": 40.150544,  "lon": -89.336842,   "country": "USA", "state": "IL",  "place": "Lincoln",                 "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KILX", "lat": 40.150544,  "lon": -89.336842,   "country": "USA", "state": "IL",  "place": "Lincoln",                 "tz": "America/Chicago",              "elevation": 731.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KIND", "lat": 39.7074962, "lon": -86.2803675,  "country": "USA", "state": "IN",  "place": "Indianapolis",            "tz": "America/Indiana/Indianapolis" }, | 	{ "type": "wsr88d", "id": "KIND", "lat": 39.7074962, "lon": -86.2803675,  "country": "USA", "state": "IN",  "place": "Indianapolis",            "tz": "America/Indiana/Indianapolis", "elevation": 887.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KIWX", "lat": 41.3586356, "lon": -85.7000488,  "country": "USA", "state": "IN",  "place": "North Webster",           "tz": "America/Indiana/Indianapolis" }, | 	{ "type": "wsr88d", "id": "KIWX", "lat": 41.358611,  "lon": -85.7,        "country": "USA", "state": "IN",  "place": "North Webster",           "tz": "America/Indiana/Indianapolis", "elevation": 1056.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KVWX", "lat": 38.2603901, "lon": -87.7246553,  "country": "USA", "state": "IN",  "place": "Owensville (Evansville)", "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KVWX", "lat": 38.2603901, "lon": -87.7246553,  "country": "USA", "state": "IN",  "place": "Owensville (Evansville)", "tz": "America/Chicago",              "elevation": 625.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDDC", "lat": 37.7608043, "lon": -99.9688053,  "country": "USA", "state": "KS",  "place": "Dodge City",              "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KDDC", "lat": 37.7608043, "lon": -99.9688053,  "country": "USA", "state": "KS",  "place": "Dodge City",              "tz": "America/Chicago",              "elevation": 2671.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGLD", "lat": 39.3667737, "lon": -101.7004341, "country": "USA", "state": "KS",  "place": "Goodland",                "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KGLD", "lat": 39.3667737, "lon": -101.7004341, "country": "USA", "state": "KS",  "place": "Goodland",                "tz": "America/Denver",               "elevation": 3716.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KTWX", "lat": 38.996998,  "lon": -96.232618,   "country": "USA", "state": "KS",  "place": "Topeka",                  "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KTWX", "lat": 38.99695,   "lon": -96.23255,    "country": "USA", "state": "KS",  "place": "Topeka",                  "tz": "America/Chicago",              "elevation": 1415.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KICT", "lat": 37.6545724, "lon": -97.4431461,  "country": "USA", "state": "KS",  "place": "Wichita",                 "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KICT", "lat": 37.6545724, "lon": -97.4431461,  "country": "USA", "state": "KS",  "place": "Wichita",                 "tz": "America/Chicago",              "elevation": 1400.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KHPX", "lat": 36.7368894, "lon": -87.2854328,  "country": "USA", "state": "KY",  "place": "Fort Campbell",           "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KHPX", "lat": 36.736972,  "lon": -87.285583,   "country": "USA", "state": "KY",  "place": "Fort Campbell",           "tz": "America/Chicago",              "elevation": 613.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KJKL", "lat": 37.590762,  "lon": -83.313039,   "country": "USA", "state": "KY",  "place": "Jackson",                 "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KJKL", "lat": 37.590833,  "lon": -83.313056,   "country": "USA", "state": "KY",  "place": "Jackson",                 "tz": "America/New_York",             "elevation": 1461.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLVX", "lat": 37.9753058, "lon": -85.9438455,  "country": "USA", "state": "KY",  "place": "Louisville",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KLVX", "lat": 37.9753058, "lon": -85.9438455,  "country": "USA", "state": "KY",  "place": "Louisville",              "tz": "America/New_York",             "elevation": 833.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KPAH", "lat": 37.0683618, "lon": -88.7720257,  "country": "USA", "state": "KY",  "place": "Paducah",                 "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KPAH", "lat": 37.068333,  "lon": -88.771944,   "country": "USA", "state": "KY",  "place": "Paducah",                 "tz": "America/Chicago",              "elevation": 506.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KPOE", "lat": 31.1556923, "lon": -92.9762596,  "country": "USA", "state": "LA",  "place": "Fort Polk",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KPOE", "lat": 31.1556923, "lon": -92.9762596,  "country": "USA", "state": "LA",  "place": "Fort Polk",               "tz": "America/Chicago",              "elevation": 473.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KHDC", "lat": 30.521667,  "lon": -90.418333,   "country": "USA", "state": "LA",  "place": "New Orleans (Hammond)",   "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KHDC", "lat": 30.519306,  "lon": -90.424028,   "country": "USA", "state": "LA",  "place": "New Orleans (Hammond)",   "tz": "America/Chicago",              "elevation": 43.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLCH", "lat": 30.125382,  "lon": -93.2161188,  "country": "USA", "state": "LA",  "place": "Lake Charles",            "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KLCH", "lat": 30.125306,  "lon": -93.215889,   "country": "USA", "state": "LA",  "place": "Lake Charles",            "tz": "America/Chicago",              "elevation": 137.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KSHV", "lat": 32.450813,  "lon": -93.8412774,  "country": "USA", "state": "LA",  "place": "Shreveport",              "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KSHV", "lat": 32.450833,  "lon": -93.84125,    "country": "USA", "state": "LA",  "place": "Shreveport",              "tz": "America/Chicago",              "elevation": 387.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLIX", "lat": 30.3367133, "lon": -89.8256618,  "country": "USA", "state": "LA",  "place": "New Orleans (Slidell)",   "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KLIX", "lat": 30.3367133, "lon": -89.8256618,  "country": "USA", "state": "LA",  "place": "New Orleans (Slidell)",   "tz": "America/Chicago",              "elevation": 179.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBOX", "lat": 41.9558919, "lon": -71.1369681,  "country": "USA", "state": "MA",  "place": "Boston",                  "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KBOX", "lat": 41.9558919, "lon": -71.1369681,  "country": "USA", "state": "MA",  "place": "Boston",                  "tz": "America/New_York",             "elevation": 232.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGYX", "lat": 43.8913555, "lon": -70.2565545,  "country": "USA", "state": "ME",  "place": "Gray/Portland",           "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KGYX", "lat": 43.8913555, "lon": -70.2565545,  "country": "USA", "state": "ME",  "place": "Gray/Portland",           "tz": "America/New_York",             "elevation": 474.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCBW", "lat": 46.0391944, "lon": -67.8066033,  "country": "USA", "state": "ME",  "place": "Houlton",                 "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KCBW", "lat": 46.03925,   "lon": -67.806431,   "country": "USA", "state": "ME",  "place": "Houlton",                 "tz": "America/New_York",             "elevation": 860.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDTX", "lat": 42.6999677, "lon": -83.471809,   "country": "USA", "state": "MI",  "place": "Detroit/Pontiac",         "tz": "America/Detroit" }, | 	{ "type": "wsr88d", "id": "KDTX", "lat": 42.6999677, "lon": -83.471809,   "country": "USA", "state": "MI",  "place": "Detroit/Pontiac",         "tz": "America/Detroit",              "elevation": 1216.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KAPX", "lat": 44.907106,  "lon": -84.719817,   "country": "USA", "state": "MI",  "place": "Gaylord",                 "tz": "America/Detroit" }, | 	{ "type": "wsr88d", "id": "KAPX", "lat": 44.907106,  "lon": -84.719817,   "country": "USA", "state": "MI",  "place": "Gaylord",                 "tz": "America/Detroit",              "elevation": 1561.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGRR", "lat": 42.893872,  "lon": -85.5449206,  "country": "USA", "state": "MI",  "place": "Grand Rapids",            "tz": "America/Detroit" }, | 	{ "type": "wsr88d", "id": "KGRR", "lat": 42.893889,  "lon": -85.544889,   "country": "USA", "state": "MI",  "place": "Grand Rapids",            "tz": "America/Detroit",              "elevation": 875.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMQT", "lat": 46.5311443, "lon": -87.5487131,  "country": "USA", "state": "MI",  "place": "Marquette",               "tz": "America/Detroit" }, | 	{ "type": "wsr88d", "id": "KMQT", "lat": 46.531111,  "lon": -87.548333,   "country": "USA", "state": "MI",  "place": "Marquette",               "tz": "America/Detroit",              "elevation": 1525.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDLH", "lat": 46.8368569, "lon": -92.2097433,  "country": "USA", "state": "MN",  "place": "Duluth",                  "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KDLH", "lat": 46.8368569, "lon": -92.2097433,  "country": "USA", "state": "MN",  "place": "Duluth",                  "tz": "America/Chicago",              "elevation": 1542.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMPX", "lat": 44.8488029, "lon": -93.5654873,  "country": "USA", "state": "MN",  "place": "Minneapolis/St. Paul",    "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KMPX", "lat": 44.8488029, "lon": -93.5654873,  "country": "USA", "state": "MN",  "place": "Minneapolis/St. Paul",    "tz": "America/Chicago",              "elevation": 1101.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KEAX", "lat": 38.8102231, "lon": -94.2644924,  "country": "USA", "state": "MO",  "place": "Kansas City",             "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KEAX", "lat": 38.81025,   "lon": -94.264472,   "country": "USA", "state": "MO",  "place": "Kansas City",             "tz": "America/Chicago",              "elevation": 1092.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KSGF", "lat": 37.235223,  "lon": -93.4006011,  "country": "USA", "state": "MO",  "place": "Springfield",             "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KSGF", "lat": 37.235239,  "lon": -93.400419,   "country": "USA", "state": "MO",  "place": "Springfield",             "tz": "America/Chicago",              "elevation": 1375.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLSX", "lat": 38.6986863, "lon": -90.682877,   "country": "USA", "state": "MO",  "place": "St. Louis",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KLSX", "lat": 38.6986863, "lon": -90.682877,   "country": "USA", "state": "MO",  "place": "St. Louis",               "tz": "America/Chicago",              "elevation": 722.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDGX", "lat": 32.2797358, "lon": -89.9846309,  "country": "USA", "state": "MS",  "place": "Brandon/Jackson",         "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KDGX", "lat": 32.279944,  "lon": -89.984444,   "country": "USA", "state": "MS",  "place": "Brandon/Jackson",         "tz": "America/Chicago",              "elevation": 609.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGWX", "lat": 33.8967796, "lon": -88.3293915,  "country": "USA", "state": "MS",  "place": "Columbus AFB",            "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KGWX", "lat": 33.896917,  "lon": -88.329194,   "country": "USA", "state": "MS",  "place": "Columbus AFB",            "tz": "America/Chicago",              "elevation": 590.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBLX", "lat": 45.8537632, "lon": -108.6068165, "country": "USA", "state": "MT",  "place": "Billings",                "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KBLX", "lat": 45.853778,  "lon": -108.606806,  "country": "USA", "state": "MT",  "place": "Billings",                "tz": "America/Denver",               "elevation": 3703.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGGW", "lat": 48.2064536, "lon": -106.6252971, "country": "USA", "state": "MT",  "place": "Glasgow",                 "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KGGW", "lat": 48.206361,  "lon": -106.624694,  "country": "USA", "state": "MT",  "place": "Glasgow",                 "tz": "America/Denver",               "elevation": 2384.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KTFX", "lat": 47.4595023, "lon": -111.3855368, "country": "USA", "state": "MT",  "place": "Great Falls",             "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KTFX", "lat": 47.459583,  "lon": -111.385333,  "country": "USA", "state": "MT",  "place": "Great Falls",             "tz": "America/Denver",               "elevation": 3805.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMSX", "lat": 47.0412971, "lon": -113.9864373, "country": "USA", "state": "MT",  "place": "Missoula",                "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KMSX", "lat": 47.041,     "lon": -113.986222,  "country": "USA", "state": "MT",  "place": "Missoula",                "tz": "America/Denver",               "elevation": 7978.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMHX", "lat": 34.7759313, "lon": -76.8762571,  "country": "USA", "state": "NC",  "place": "Morehead City",           "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KMHX", "lat": 34.775908,  "lon": -76.876189,   "country": "USA", "state": "NC",  "place": "Morehead City",           "tz": "America/New_York",             "elevation": 145.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KRAX", "lat": 35.6654967, "lon": -78.4897855,  "country": "USA", "state": "NC",  "place": "Raleigh/Durham",          "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KRAX", "lat": 35.665519,  "lon": -78.48975,    "country": "USA", "state": "NC",  "place": "Raleigh/Durham",          "tz": "America/New_York",             "elevation": 462.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLTX", "lat": 33.9891631, "lon": -78.4291059,  "country": "USA", "state": "NC",  "place": "Wilmington",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KLTX", "lat": 33.98915,   "lon": -78.429108,   "country": "USA", "state": "NC",  "place": "Wilmington",              "tz": "America/New_York",             "elevation": 145.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBIS", "lat": 46.7709329, "lon": -100.7605532, "country": "USA", "state": "ND",  "place": "Bismarck",                "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KBIS", "lat": 46.770833,  "lon": -100.760556,  "country": "USA", "state": "ND",  "place": "Bismarck",                "tz": "America/Chicago",              "elevation": 1755.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMVX", "lat": 47.5279417, "lon": -97.3256654,  "country": "USA", "state": "ND",  "place": "Grand Forks (Mayville)",  "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KMVX", "lat": 47.527778,  "lon": -97.325556,   "country": "USA", "state": "ND",  "place": "Grand Forks (Mayville)",  "tz": "America/Chicago",              "elevation": 1083.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMBX", "lat": 48.39303,   "lon": -100.8644378, "country": "USA", "state": "ND",  "place": "Minot AFB",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KMBX", "lat": 48.393056,  "lon": -100.864444,  "country": "USA", "state": "ND",  "place": "Minot AFB",               "tz": "America/Chicago",              "elevation": 1590.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KUEX", "lat": 40.320966,  "lon": -98.4418559,  "country": "USA", "state": "NE",  "place": "Grand Island/Hastings",   "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KUEX", "lat": 40.320833,  "lon": -98.441944,   "country": "USA", "state": "NE",  "place": "Grand Island/Hastings",   "tz": "America/Chicago",              "elevation": 2057.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLNX", "lat": 41.9579623, "lon": -100.5759609, "country": "USA", "state": "NE",  "place": "North Platte",            "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KLNX", "lat": 41.957944,  "lon": -100.576222,  "country": "USA", "state": "NE",  "place": "North Platte",            "tz": "America/Chicago",              "elevation": 3113.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KOAX", "lat": 41.3202803, "lon": -96.3667971,  "country": "USA", "state": "NE",  "place": "Omaha",                   "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KOAX", "lat": 41.3202803, "lon": -96.3667971,  "country": "USA", "state": "NE",  "place": "Omaha",                   "tz": "America/Chicago",              "elevation": 1262.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KABX", "lat": 35.1497579, "lon": -106.8239576, "country": "USA", "state": "NM",  "place": "Albuquerque",             "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KABX", "lat": 35.1497579, "lon": -106.8239576, "country": "USA", "state": "NM",  "place": "Albuquerque",             "tz": "America/Denver",               "elevation": 5951.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFDX", "lat": 34.6341569, "lon": -103.6186427, "country": "USA", "state": "NM",  "place": "Cannon AFB",              "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KFDX", "lat": 34.634167,  "lon": -103.618889,  "country": "USA", "state": "NM",  "place": "Cannon AFB",              "tz": "America/Denver",               "elevation": 4698.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KHDX", "lat": 33.0768844, "lon": -106.1200923, "country": "USA", "state": "NM",  "place": "Holloman AFB",            "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KHDX", "lat": 33.077,     "lon": -106.120033,  "country": "USA", "state": "NM",  "place": "Holloman AFB",            "tz": "America/Denver",               "elevation": 4270.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLRX", "lat": 40.7396933, "lon": -116.8025529, "country": "USA", "state": "NV",  "place": "Elko",                    "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KLRX", "lat": 40.7396933, "lon": -116.8025529, "country": "USA", "state": "NV",  "place": "Elko",                    "tz": "America/Los_Angeles",          "elevation": 6895.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KESX", "lat": 35.7012894, "lon": -114.8918277, "country": "USA", "state": "NV",  "place": "Las Vegas",               "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KESX", "lat": 35.70135,   "lon": -114.89165,   "country": "USA", "state": "NV",  "place": "Las Vegas",               "tz": "America/Los_Angeles",          "elevation": 4948.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KRGX", "lat": 39.7541931, "lon": -119.4620597, "country": "USA", "state": "NV",  "place": "Reno",                    "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KRGX", "lat": 39.754056,  "lon": -119.462028,  "country": "USA", "state": "NV",  "place": "Reno",                    "tz": "America/Los_Angeles",          "elevation": 8396.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KENX", "lat": 42.5865699, "lon": -74.0639877,  "country": "USA", "state": "NY",  "place": "Albany",                  "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KENX", "lat": 42.5865699, "lon": -74.0639877,  "country": "USA", "state": "NY",  "place": "Albany",                  "tz": "America/New_York",             "elevation": 1935.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBGM", "lat": 42.1997045, "lon": -75.9847015,  "country": "USA", "state": "NY",  "place": "Binghamton",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KBGM", "lat": 42.199694,  "lon": -75.984722,   "country": "USA", "state": "NY",  "place": "Binghamton",              "tz": "America/New_York",             "elevation": 1703.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBUF", "lat": 42.9488055, "lon": -78.7369108,  "country": "USA", "state": "NY",  "place": "Buffalo",                 "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KBUF", "lat": 42.948789,  "lon": -78.736781,   "country": "USA", "state": "NY",  "place": "Buffalo",                 "tz": "America/New_York",             "elevation": 790.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KTYX", "lat": 43.7556319, "lon": -75.6799918,  "country": "USA", "state": "NY",  "place": "Montague",                "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KTYX", "lat": 43.7556319, "lon": -75.6799918,  "country": "USA", "state": "NY",  "place": "Montague",                "tz": "America/New_York",             "elevation": 1960.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KOKX", "lat": 40.8655093, "lon": -72.8638548,  "country": "USA", "state": "NY",  "place": "New York City",           "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KOKX", "lat": 40.865528,  "lon": -72.863917,   "country": "USA", "state": "NY",  "place": "New York City",           "tz": "America/New_York",             "elevation": 199.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCLE", "lat": 41.4131875, "lon": -81.8597451,  "country": "USA", "state": "OH",  "place": "Cleveland",               "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KCLE", "lat": 41.4131875, "lon": -81.8597451,  "country": "USA", "state": "OH",  "place": "Cleveland",               "tz": "America/New_York",             "elevation": 860.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KILN", "lat": 39.42028,   "lon": -83.82167,    "country": "USA", "state": "OH",  "place": "Wilmington",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KILN", "lat": 39.42028,   "lon": -83.82167,    "country": "USA", "state": "OH",  "place": "Wilmington",              "tz": "America/New_York",             "elevation": 1170.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFDR", "lat": 34.3620014, "lon": -98.9766884,  "country": "USA", "state": "OK",  "place": "Frederick",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KFDR", "lat": 34.362194,  "lon": -98.976667,   "country": "USA", "state": "OK",  "place": "Frederick",               "tz": "America/Chicago",              "elevation": 1315.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KTLX", "lat": 35.3333873, "lon": -97.2778255,  "country": "USA", "state": "OK",  "place": "Oklahoma City",           "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KTLX", "lat": 35.333361,  "lon": -97.277761,   "country": "USA", "state": "OK",  "place": "Oklahoma City",           "tz": "America/Chicago",              "elevation": 1278.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KINX", "lat": 36.1750977, "lon": -95.5642802,  "country": "USA", "state": "OK",  "place": "Tulsa",                   "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KINX", "lat": 36.175131,  "lon": -95.564161,   "country": "USA", "state": "OK",  "place": "Tulsa",                   "tz": "America/Chicago",              "elevation": 749.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KVNX", "lat": 36.7406166, "lon": -98.1279409,  "country": "USA", "state": "OK",  "place": "Vance AFB",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KVNX", "lat": 36.740617,  "lon": -98.127717,   "country": "USA", "state": "OK",  "place": "Vance AFB",               "tz": "America/Chicago",              "elevation": 1258.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMAX", "lat": 42.0810766, "lon": -122.7173334, "country": "USA", "state": "OR",  "place": "Medford",                 "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KMAX", "lat": 42.0810766, "lon": -122.7173334, "country": "USA", "state": "OR",  "place": "Medford",                 "tz": "America/Los_Angeles",          "elevation": 7561.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KPDT", "lat": 45.6906118, "lon": -118.8529301, "country": "USA", "state": "OR",  "place": "Pendleton",               "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KPDT", "lat": 45.69065,   "lon": -118.852931,  "country": "USA", "state": "OR",  "place": "Pendleton",               "tz": "America/Los_Angeles",          "elevation": 1580.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KRTX", "lat": 45.7150308, "lon": -122.9650542, "country": "USA", "state": "OR",  "place": "Portland",                "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KRTX", "lat": 45.715039,  "lon": -122.965,     "country": "USA", "state": "OR",  "place": "Portland",                "tz": "America/Los_Angeles",          "elevation": 1728.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDIX", "lat": 39.9470885, "lon": -74.4108027,  "country": "USA", "state": "PA",  "place": "Philadelphia",            "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KDIX", "lat": 39.947089,  "lon": -74.410731,   "country": "USA", "state": "PA",  "place": "Philadelphia",            "tz": "America/New_York",             "elevation": 230.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KPBZ", "lat": 40.5316842, "lon": -80.2179515,  "country": "USA", "state": "PA",  "place": "Pittsburgh",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KPBZ", "lat": 40.531717,  "lon": -80.217967,   "country": "USA", "state": "PA",  "place": "Pittsburgh",              "tz": "America/New_York",             "elevation": 1266.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCCX", "lat": 40.9228521, "lon": -78.0038738,  "country": "USA", "state": "PA",  "place": "State College",           "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KCCX", "lat": 40.923167,  "lon": -78.003722,   "country": "USA", "state": "PA",  "place": "State College",           "tz": "America/New_York",             "elevation": 2486.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "TJUA", "lat": 18.1155998, "lon": -66.0780644,  "country": "USA", "state": "PR",  "place": "San Juan",                "tz": "America/Puerto_Rico" }, | 	{ "type": "wsr88d", "id": "TJUA", "lat": 18.115667,  "lon": -66.078167,   "country": "USA", "state": "PR",  "place": "San Juan",                "tz": "America/Puerto_Rico",          "elevation": 2958.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCLX", "lat": 32.6554866, "lon": -81.0423124,  "country": "USA", "state": "SC",  "place": "Charleston",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KCLX", "lat": 32.6554866, "lon": -81.0423124,  "country": "USA", "state": "SC",  "place": "Charleston",              "tz": "America/New_York",             "elevation": 229.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCAE", "lat": 33.9487579, "lon": -81.1184281,  "country": "USA", "state": "SC",  "place": "Columbia",                "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KCAE", "lat": 33.948722,  "lon": -81.118278,   "country": "USA", "state": "SC",  "place": "Columbia",                "tz": "America/New_York",             "elevation": 345.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGSP", "lat": 34.8833435, "lon": -82.2200757,  "country": "USA", "state": "SC",  "place": "Greer",                   "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KGSP", "lat": 34.883306,  "lon": -82.219833,   "country": "USA", "state": "SC",  "place": "Greer",                   "tz": "America/New_York",             "elevation": 1069.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KABR", "lat": 45.4558185, "lon": -98.4132046,  "country": "USA", "state": "SD",  "place": "Aberdeen",                "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KABR", "lat": 45.455833,  "lon": -98.413333,   "country": "USA", "state": "SD",  "place": "Aberdeen",                "tz": "America/Chicago",              "elevation": 1383.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KUDX", "lat": 44.1248485, "lon": -102.8298157, "country": "USA", "state": "SD",  "place": "Rapid City",              "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KUDX", "lat": 44.1248485, "lon": -102.8298157, "country": "USA", "state": "SD",  "place": "Rapid City",              "tz": "America/Denver",               "elevation": 3195.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFSD", "lat": 43.5877467, "lon": -96.7293674,  "country": "USA", "state": "SD",  "place": "Sioux Falls",             "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KFSD", "lat": 43.587778,  "lon": -96.729444,   "country": "USA", "state": "SD",  "place": "Sioux Falls",             "tz": "America/Chicago",              "elevation": 1495.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMRX", "lat": 36.168538,  "lon": -83.401779,   "country": "USA", "state": "TN",  "place": "Knoxville/Tri Cities",    "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KMRX", "lat": 36.168538,  "lon": -83.401779,   "country": "USA", "state": "TN",  "place": "Knoxville/Tri Cities",    "tz": "America/New_York",             "elevation": 1434.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KNQA", "lat": 35.3447802, "lon": -89.8734534,  "country": "USA", "state": "TN",  "place": "Memphis",                 "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KNQA", "lat": 35.344722,  "lon": -89.873333,   "country": "USA", "state": "TN",  "place": "Memphis",                 "tz": "America/Chicago",              "elevation": 435.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KOHX", "lat": 36.2472389, "lon": -86.5625185,  "country": "USA", "state": "TN",  "place": "Nashville",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KOHX", "lat": 36.247222,  "lon": -86.5625,     "country": "USA", "state": "TN",  "place": "Nashville",               "tz": "America/Chicago",              "elevation": 676.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KAMA", "lat": 35.2334827, "lon": -101.7092478, "country": "USA", "state": "TX",  "place": "Amarillo",                "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KAMA", "lat": 35.233333,  "lon": -101.709278,  "country": "USA", "state": "TX",  "place": "Amarillo",                "tz": "America/Chicago",              "elevation": 3703.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KEWX", "lat": 29.7039802, "lon": -98.028506,   "country": "USA", "state": "TX",  "place": "Austin/San Antonio",      "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KEWX", "lat": 29.7039802, "lon": -98.028506,   "country": "USA", "state": "TX",  "place": "Austin/San Antonio",      "tz": "America/Chicago",              "elevation": 767.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KBRO", "lat": 25.9159979, "lon": -97.4189526,  "country": "USA", "state": "TX",  "place": "Brownsville",             "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KBRO", "lat": 25.916,     "lon": -97.418967,   "country": "USA", "state": "TX",  "place": "Brownsville",             "tz": "America/Chicago",              "elevation": 88.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCRP", "lat": 27.7840203, "lon": -97.511234,   "country": "USA", "state": "TX",  "place": "Corpus Christi",          "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KCRP", "lat": 27.784017,  "lon": -97.51125,    "country": "USA", "state": "TX",  "place": "Corpus Christi",          "tz": "America/Chicago",              "elevation": 142.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFWS", "lat": 32.5730186, "lon": -97.3031911,  "country": "USA", "state": "TX",  "place": "Dallas/Ft. Worth",        "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KFWS", "lat": 32.573,     "lon": -97.30315,    "country": "USA", "state": "TX",  "place": "Dallas/Ft. Worth",        "tz": "America/Chicago",              "elevation": 777.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDYX", "lat": 32.5386009, "lon": -99.2542863,  "country": "USA", "state": "TX",  "place": "Dyess AFB",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KDYX", "lat": 32.5385,    "lon": -99.254333,   "country": "USA", "state": "TX",  "place": "Dyess AFB",               "tz": "America/Chicago",              "elevation": 1582.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KEPZ", "lat": 31.8731115, "lon": -106.697942,  "country": "USA", "state": "TX",  "place": "El Paso",                 "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KEPZ", "lat": 31.873056,  "lon": -106.698,     "country": "USA", "state": "TX",  "place": "El Paso",                 "tz": "America/Denver",               "elevation": 4218.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGRK", "lat": 30.7217637, "lon": -97.3829627,  "country": "USA", "state": "TX",  "place": "Fort Hood",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KGRK", "lat": 30.7217637, "lon": -97.3829627,  "country": "USA", "state": "TX",  "place": "Fort Hood",               "tz": "America/Chicago",              "elevation": 603.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KHGX", "lat": 29.4718835, "lon": -95.0788593,  "country": "USA", "state": "TX",  "place": "Houston/Galveston",       "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KHGX", "lat": 29.4719,    "lon": -95.078733,   "country": "USA", "state": "TX",  "place": "Houston/Galveston",       "tz": "America/Chicago",              "elevation": 115.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KDFX", "lat": 29.2730823, "lon": -100.2802312, "country": "USA", "state": "TX",  "place": "Laughlin AFB",            "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KDFX", "lat": 29.273139,  "lon": -100.280333,  "country": "USA", "state": "TX",  "place": "Laughlin AFB",            "tz": "America/Chicago",              "elevation": 1196.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLBB", "lat": 33.6541242, "lon": -101.814149,  "country": "USA", "state": "TX",  "place": "Lubbock",                 "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KLBB", "lat": 33.654139,  "lon": -101.814167,  "country": "USA", "state": "TX",  "place": "Lubbock",                 "tz": "America/Chicago",              "elevation": 3378.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMAF", "lat": 31.9433953, "lon": -102.1894383, "country": "USA", "state": "TX",  "place": "Midland/Odessa",          "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KMAF", "lat": 31.943461,  "lon": -102.18925,   "country": "USA", "state": "TX",  "place": "Midland/Odessa",          "tz": "America/Chicago",              "elevation": 2962.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KSJT", "lat": 31.3712815, "lon": -100.4925227, "country": "USA", "state": "TX",  "place": "San Angelo",              "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KSJT", "lat": 31.371278,  "lon": -100.4925,    "country": "USA", "state": "TX",  "place": "San Angelo",              "tz": "America/Chicago",              "elevation": 2004.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KICX", "lat": 37.59083,   "lon": -112.86222,   "country": "USA", "state": "UT",  "place": "Cedar City",              "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KICX", "lat": 37.59105,   "lon": -112.862183,  "country": "USA", "state": "UT",  "place": "Cedar City",              "tz": "America/Denver",               "elevation": 10757.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMTX", "lat": 41.2627795, "lon": -112.4480081, "country": "USA", "state": "UT",  "place": "Salt Lake City",          "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KMTX", "lat": 41.262778,  "lon": -112.447778,  "country": "USA", "state": "UT",  "place": "Salt Lake City",          "tz": "America/Denver",               "elevation": 6594.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KAKQ", "lat": 36.9840475, "lon": -77.007342,   "country": "USA", "state": "VA",  "place": "Norfolk/Richmond",        "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KAKQ", "lat": 36.98405,   "lon": -77.007361,   "country": "USA", "state": "VA",  "place": "Norfolk/Richmond",        "tz": "America/New_York",             "elevation": 255.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KFCX", "lat": 37.0242098, "lon": -80.2736664,  "country": "USA", "state": "VA",  "place": "Roanoke",                 "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KFCX", "lat": 37.0244,    "lon": -80.273969,   "country": "USA", "state": "VA",  "place": "Roanoke",                 "tz": "America/New_York",             "elevation": 2965.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLWX", "lat": 38.9753957, "lon": -77.4778444,  "country": "USA", "state": "VA",  "place": "Sterling",                "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KLWX", "lat": 38.976111,  "lon": -77.4875,     "country": "USA", "state": "VA",  "place": "Sterling",                "tz": "America/New_York",             "elevation": 404.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCXX", "lat": 44.5109941, "lon": -73.166424,   "country": "USA", "state": "VT",  "place": "Burlington",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KCXX", "lat": 44.511,     "lon": -73.166431,   "country": "USA", "state": "VT",  "place": "Burlington",              "tz": "America/New_York",             "elevation": 431.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KLGX", "lat": 47.116806,  "lon": -124.10625,   "country": "USA", "state": "WA",  "place": "Langley Hill",            "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KLGX", "lat": 47.116944,  "lon": -124.106667,  "country": "USA", "state": "WA",  "place": "Langley Hill",            "tz": "America/Los_Angeles",          "elevation": 366.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KATX", "lat": 48.1945614, "lon": -122.4957508, "country": "USA", "state": "WA",  "place": "Seattle/Tacoma",          "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KATX", "lat": 48.194611,  "lon": -122.495694,  "country": "USA", "state": "WA",  "place": "Seattle/Tacoma",          "tz": "America/Los_Angeles",          "elevation": 642.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KOTX", "lat": 47.6803744, "lon": -117.6267797, "country": "USA", "state": "WA",  "place": "Spokane",                 "tz": "America/Los_Angeles" }, | 	{ "type": "wsr88d", "id": "KOTX", "lat": 47.680417,  "lon": -117.626778,  "country": "USA", "state": "WA",  "place": "Spokane",                 "tz": "America/Los_Angeles",          "elevation": 2449.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KGRB", "lat": 44.4984644, "lon": -88.111124,   "country": "USA", "state": "WI",  "place": "Green Bay",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KGRB", "lat": 44.498633,  "lon": -88.111111,   "country": "USA", "state": "WI",  "place": "Green Bay",               "tz": "America/Chicago",              "elevation": 823.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KARX", "lat": 43.822766,  "lon": -91.1915767,  "country": "USA", "state": "WI",  "place": "La Crosse",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KARX", "lat": 43.822778,  "lon": -91.191111,   "country": "USA", "state": "WI",  "place": "La Crosse",               "tz": "America/Chicago",              "elevation": 1357.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KMKX", "lat": 42.9678286, "lon": -88.5506335,  "country": "USA", "state": "WI",  "place": "Milwaukee",               "tz": "America/Chicago" }, | 	{ "type": "wsr88d", "id": "KMKX", "lat": 42.9678286, "lon": -88.5506335,  "country": "USA", "state": "WI",  "place": "Milwaukee",               "tz": "America/Chicago",              "elevation": 1023.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KRLX", "lat": 38.3110763, "lon": -81.7229015,  "country": "USA", "state": "WV",  "place": "Charleston",              "tz": "America/New_York" }, | 	{ "type": "wsr88d", "id": "KRLX", "lat": 38.3110763, "lon": -81.7229015,  "country": "USA", "state": "WV",  "place": "Charleston",              "tz": "America/New_York",             "elevation": 1213.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KCYS", "lat": 41.1519308, "lon": -104.8060325, "country": "USA", "state": "WY",  "place": "Cheyenne",                "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KCYS", "lat": 41.151919,  "lon": -104.806031,  "country": "USA", "state": "WY",  "place": "Cheyenne",                "tz": "America/Denver",               "elevation": 6193.0 }, | ||||||
| 	{ "type": "wsr88d", "id": "KRIW", "lat": 43.0660779, "lon": -108.4773731, "country": "USA", "state": "WY",  "place": "Riverton",                "tz": "America/Denver" }, | 	{ "type": "wsr88d", "id": "KRIW", "lat": 43.066089,  "lon": -108.4773,    "country": "USA", "state": "WY",  "place": "Riverton",                "tz": "America/Denver",               "elevation": 5633.0 }, | ||||||
| 
 | 
 | ||||||
| 	{ "type": "tdwr", "id": "TADW", "lat": 38.695, "lon": -76.845,  "country": "USA", "state": "MD", "place": "Andrews Air Force Base", "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TADW", "lat": 38.695,     "lon": -76.845,      "country": "USA", "state": "MD",  "place": "Andrews Air Force Base",  "tz": "America/New_York",             "elevation": 344.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TATL", "lat": 33.647, "lon": -84.262,  "country": "USA", "state": "GA", "place": "Atlanta",                "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TATL", "lat": 33.646944,  "lon": -84.261944,   "country": "USA", "state": "GA",  "place": "Atlanta",                 "tz": "America/New_York",             "elevation": 1076.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TBNA", "lat": 35.98,  "lon": -86.662,  "country": "USA", "state": "TN", "place": "Nashville",              "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TBNA", "lat": 35.98,      "lon": -86.661944,   "country": "USA", "state": "TN",  "place": "Nashville",               "tz": "America/Chicago",              "elevation": 817.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TBOS", "lat": 42.158, "lon": -70.933,  "country": "USA", "state": "MA", "place": "Boston",                 "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TBOS", "lat": 42.158056,  "lon": -70.933056,   "country": "USA", "state": "MA",  "place": "Boston",                  "tz": "America/New_York",             "elevation": 262.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TBWI", "lat": 39.09,  "lon": -76.63,   "country": "USA", "state": "MD", "place": "Baltimore/Wash",         "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TBWI", "lat": 39.09,      "lon": -76.63,       "country": "USA", "state": "MD",  "place": "Baltimore/Wash",          "tz": "America/New_York",             "elevation": 299.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TCLT", "lat": 35.337, "lon": -80.885,  "country": "USA", "state": "NC", "place": "Charlotte",              "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TCLT", "lat": 35.337,     "lon": -80.885,      "country": "USA", "state": "NC",  "place": "Charlotte",               "tz": "America/New_York",             "elevation": 869.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TCMH", "lat": 40.006, "lon": -82.715,  "country": "USA", "state": "OH", "place": "Columbus",               "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TCMH", "lat": 40.006,     "lon": -82.715,      "country": "USA", "state": "OH",  "place": "Columbus",                "tz": "America/New_York",             "elevation": 1148.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TCVG", "lat": 38.898, "lon": -84.58,   "country": "USA", "state": "OH", "place": "Cincinnati",             "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TCVG", "lat": 38.898056,  "lon": -84.58,       "country": "USA", "state": "OH",  "place": "Cincinnati",              "tz": "America/New_York",             "elevation": 1053.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TDAL", "lat": 32.926, "lon": -96.968,  "country": "USA", "state": "TX", "place": "Dallas Love Field",      "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TDAL", "lat": 32.926,     "lon": -96.968,      "country": "USA", "state": "TX",  "place": "Dallas Love Field",       "tz": "America/Chicago",              "elevation": 623.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TDAY", "lat": 40.022, "lon": -84.123,  "country": "USA", "state": "OH", "place": "Dayton",                 "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TDAY", "lat": 40.022,     "lon": -84.123,      "country": "USA", "state": "OH",  "place": "Dayton",                  "tz": "America/New_York",             "elevation": 1020.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TDCA", "lat": 38.759, "lon": -76.962,  "country": "USA", "state": "MD", "place": "Washington National",    "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TDCA", "lat": 38.758889,  "lon": -76.961944,   "country": "USA", "state": "MD",  "place": "Washington National",     "tz": "America/New_York",             "elevation": 344.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TDEN", "lat": 39.728, "lon": -104.526, "country": "USA", "state": "CO", "place": "Denver",                 "tz": "America/Denver" }, | 	{ "type": "tdwr",   "id": "TDEN", "lat": 39.728056,  "lon": -104.52611,   "country": "USA", "state": "CO",  "place": "Denver",                  "tz": "America/Denver",               "elevation": 5702.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TDFW", "lat": 33.065, "lon": -96.918,  "country": "USA", "state": "TX", "place": "Dallas/Ft. Worth",       "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TDFW", "lat": 33.065,     "lon": -96.918056,   "country": "USA", "state": "TX",  "place": "Dallas/Ft. Worth",        "tz": "America/Chicago",              "elevation": 584.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TDTW", "lat": 42.111, "lon": -83.515,  "country": "USA", "state": "MI", "place": "Detroit",                "tz": "America/Detroit" }, | 	{ "type": "tdwr",   "id": "TDTW", "lat": 42.111111,  "lon": -83.515,      "country": "USA", "state": "MI",  "place": "Detroit",                 "tz": "America/Detroit",              "elevation": 771.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TEWR", "lat": 40.593, "lon": -74.27,   "country": "USA", "state": "NJ", "place": "Newark",                 "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TEWR", "lat": 40.593056,  "lon": -74.27,       "country": "USA", "state": "NJ",  "place": "Newark",                  "tz": "America/New_York",             "elevation": 135.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TFLL", "lat": 26.143, "lon": -80.344,  "country": "USA", "state": "FL", "place": "Fort Lauderdale",        "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TFLL", "lat": 26.143056,  "lon": -80.343889,   "country": "USA", "state": "FL",  "place": "Fort Lauderdale",         "tz": "America/New_York",             "elevation": 121.0 }, | ||||||
| 	{ "type": "tdwr", "id": "THOU", "lat": 29.516, "lon": -95.242,  "country": "USA", "state": "TX", "place": "Houston Hobby",          "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "THOU", "lat": 29.516111,  "lon": -95.241944,   "country": "USA", "state": "TX",  "place": "Houston Hobby",           "tz": "America/Chicago",              "elevation": 118.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TIAD", "lat": 39.084, "lon": -77.529,  "country": "USA", "state": "VA", "place": "Dulles",                 "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TIAD", "lat": 39.083889,  "lon": -77.528889,   "country": "USA", "state": "VA",  "place": "Dulles",                  "tz": "America/New_York",             "elevation": 472.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TIAH", "lat": 30.065, "lon": -95.567,  "country": "USA", "state": "TX", "place": "Houston International",  "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TIAH", "lat": 30.065,     "lon": -95.566944,   "country": "USA", "state": "TX",  "place": "Houston International",   "tz": "America/Chicago",              "elevation": 253.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TICH", "lat": 37.507, "lon": -97.437,  "country": "USA", "state": "KS", "place": "Wichita",                "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TICH", "lat": 37.507,     "lon": -97.437,      "country": "USA", "state": "KS",  "place": "Wichita",                 "tz": "America/Chicago",              "elevation": 1352.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TIDS", "lat": 39.637, "lon": -86.436,  "country": "USA", "state": "IN", "place": "Indianapolis",           "tz": "America/Indiana/Indianapolis" }, | 	{ "type": "tdwr",   "id": "TIDS", "lat": 39.637,     "lon": -86.436,      "country": "USA", "state": "IN",  "place": "Indianapolis",            "tz": "America/Indiana/Indianapolis", "elevation": 846.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TJFK", "lat": 40.589, "lon": -73.881,  "country": "USA", "state": "NY", "place": "New York City",          "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TJFK", "lat": 40.589,     "lon": -73.881,      "country": "USA", "state": "NY",  "place": "New York City",           "tz": "America/New_York",             "elevation": 112.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TLAS", "lat": 36.144, "lon": -115.007, "country": "USA", "state": "NV", "place": "Las Vegas",              "tz": "America/Los_Angeles" }, | 	{ "type": "tdwr",   "id": "TLAS", "lat": 36.143889,  "lon": -115.00694,   "country": "USA", "state": "NV",  "place": "Las Vegas",               "tz": "America/Los_Angeles",          "elevation": 2057.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TLVE", "lat": 41.29,  "lon": -82.008,  "country": "USA", "state": "OH", "place": "Cleveland",              "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TLVE", "lat": 41.29,      "lon": -82.008,      "country": "USA", "state": "OH",  "place": "Cleveland",               "tz": "America/New_York",             "elevation": 932.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMCI", "lat": 39.498, "lon": -94.742,  "country": "USA", "state": "MO", "place": "Kansas City",            "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TMCI", "lat": 39.498056,  "lon": -94.741944,   "country": "USA", "state": "MO",  "place": "Kansas City",             "tz": "America/Chicago",              "elevation": 1089.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMCO", "lat": 28.344, "lon": -81.326,  "country": "USA", "state": "FL", "place": "Orlando International",  "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TMCO", "lat": 28.343889,  "lon": -81.326111,   "country": "USA", "state": "FL",  "place": "Orlando International",   "tz": "America/New_York",             "elevation": 171.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMDW", "lat": 41.651, "lon": -87.73,   "country": "USA", "state": "IL", "place": "Chicago Midway",         "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TMDW", "lat": 41.651111,  "lon": -87.73,       "country": "USA", "state": "IL",  "place": "Chicago Midway",          "tz": "America/Chicago",              "elevation": 764.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMEM", "lat": 34.896, "lon": -89.993,  "country": "USA", "state": "TN", "place": "Memphis",                "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TMEM", "lat": 34.896,     "lon": -89.993,      "country": "USA", "state": "TN",  "place": "Memphis",                 "tz": "America/Chicago",              "elevation": 482.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMIA", "lat": 25.758, "lon": -80.491,  "country": "USA", "state": "FL", "place": "Miami",                  "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TMIA", "lat": 25.758056,  "lon": -80.491111,   "country": "USA", "state": "FL",  "place": "Miami",                   "tz": "America/New_York",             "elevation": 125.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMKE", "lat": 42.819, "lon": -88.046,  "country": "USA", "state": "WI", "place": "Milwaukee",              "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TMKE", "lat": 42.819,     "lon": -88.046,      "country": "USA", "state": "WI",  "place": "Milwaukee",               "tz": "America/Chicago",              "elevation": 932.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMSP", "lat": 44.871, "lon": -92.933,  "country": "USA", "state": "MN", "place": "Minneapolis",            "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TMSP", "lat": 44.871111,  "lon": -92.933056,   "country": "USA", "state": "MN",  "place": "Minneapolis",             "tz": "America/Chicago",              "elevation": 1122.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TMSY", "lat": 30.022, "lon": -90.403,  "country": "USA", "state": "LA", "place": "New Orleans",            "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TMSY", "lat": 30.021944,  "lon": -90.403056,   "country": "USA", "state": "LA",  "place": "New Orleans",             "tz": "America/Chicago",              "elevation": 98.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TOKC", "lat": 35.276, "lon": -97.51,   "country": "USA", "state": "OK", "place": "Oklahoma City",          "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TOKC", "lat": 35.276111,  "lon": -97.51,       "country": "USA", "state": "OK",  "place": "Oklahoma City",           "tz": "America/Chicago",              "elevation": 1309.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TORD", "lat": 41.797, "lon": -87.858,  "country": "USA", "state": "IL", "place": "Chicago O'Hare",         "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TORD", "lat": 41.796944,  "lon": -87.858056,   "country": "USA", "state": "IL",  "place": "Chicago O'Hare",          "tz": "America/Chicago",              "elevation": 745.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TPBI", "lat": 26.688, "lon": -80.273,  "country": "USA", "state": "FL", "place": "West Palm Beach",        "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TPBI", "lat": 26.688056,  "lon": -80.273056,   "country": "USA", "state": "FL",  "place": "West Palm Beach",         "tz": "America/New_York",             "elevation": 135.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TPHL", "lat": 39.949, "lon": -75.069,  "country": "USA", "state": "PA", "place": "Philadelphia",           "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TPHL", "lat": 39.949,     "lon": -75.069,      "country": "USA", "state": "PA",  "place": "Philadelphia",            "tz": "America/New_York",             "elevation": 154.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TPHX", "lat": 33.421, "lon": -112.163, "country": "USA", "state": "AZ", "place": "Phoenix",                "tz": "America/Phoenix" }, | 	{ "type": "tdwr",   "id": "TPHX", "lat": 33.421,     "lon": -112.163,     "country": "USA", "state": "AZ",  "place": "Phoenix",                 "tz": "America/Phoenix",              "elevation": 1089.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TPIT", "lat": 40.501, "lon": -80.486,  "country": "USA", "state": "PA", "place": "Pittsburgh",             "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TPIT", "lat": 40.501111,  "lon": -80.486111,   "country": "USA", "state": "PA",  "place": "Pittsburgh",              "tz": "America/New_York",             "elevation": 1385.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TRDU", "lat": 36.002, "lon": -78.697,  "country": "USA", "state": "NC", "place": "Raleigh Durham",         "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TRDU", "lat": 36.002,     "lon": -78.697,      "country": "USA", "state": "NC",  "place": "Raleigh Durham",          "tz": "America/New_York",             "elevation": 515.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TSDF", "lat": 38.046, "lon": -85.61,   "country": "USA", "state": "KY", "place": "Louisville",             "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TSDF", "lat": 38.046,     "lon": -85.61,       "country": "USA", "state": "KY",  "place": "Louisville",              "tz": "America/New_York",             "elevation": 732.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TSJU", "lat": 18.474, "lon": -66.179,  "country": "USA", "state": "PR", "place": "San Juan",               "tz": "America/Puerto_Rico" }, | 	{ "type": "tdwr",   "id": "TSJU", "lat": 18.474,     "lon": -66.179,      "country": "USA", "state": "PR",  "place": "San Juan",                "tz": "America/Puerto_Rico",          "elevation": 157.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TSLC", "lat": 40.967, "lon": -111.93,  "country": "USA", "state": "UT", "place": "Salt Lake City",         "tz": "America/Denver" }, | 	{ "type": "tdwr",   "id": "TSLC", "lat": 40.967,     "lon": -111.93,      "country": "USA", "state": "UT",  "place": "Salt Lake City",          "tz": "America/Denver",               "elevation": 4295.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TSTL", "lat": 38.805, "lon": -90.489,  "country": "USA", "state": "MO", "place": "St. Louis",              "tz": "America/Chicago" }, | 	{ "type": "tdwr",   "id": "TSTL", "lat": 38.805,     "lon": -90.489,      "country": "USA", "state": "MO",  "place": "St. Louis",               "tz": "America/Chicago",              "elevation": 646.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TTPA", "lat": 27.86,  "lon": -82.518,  "country": "USA", "state": "FL", "place": "Tampa Bay",              "tz": "America/New_York" }, | 	{ "type": "tdwr",   "id": "TTPA", "lat": 27.86,      "lon": -82.518,      "country": "USA", "state": "FL",  "place": "Tampa Bay",               "tz": "America/New_York",             "elevation": 92.0 }, | ||||||
| 	{ "type": "tdwr", "id": "TTUL", "lat": 36.071, "lon": -95.827,  "country": "USA", "state": "OK", "place": "Tulsa",                  "tz": "America/Chicago" } | 	{ "type": "tdwr",   "id": "TTUL", "lat": 36.071111,  "lon": -95.826944,   "country": "USA", "state": "OK",  "place": "Tulsa",                   "tz": "America/Chicago",              "elevation": 823.0 } | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | @ -380,6 +380,7 @@ set(JSON_FILES res/config/radar_sites.json) | ||||||
| 
 | 
 | ||||||
| set(TS_FILES ts/scwx_en_US.ts) | set(TS_FILES ts/scwx_en_US.ts) | ||||||
| 
 | 
 | ||||||
|  | set(RADAR_SITES_FILE ${scwx-qt_SOURCE_DIR}/res/config/radar_sites.json) | ||||||
| set(COUNTY_DBF_FILES ${SCWX_DIR}/data/db/c_05mr24.dbf) | set(COUNTY_DBF_FILES ${SCWX_DIR}/data/db/c_05mr24.dbf) | ||||||
| set(ZONE_DBF_FILES   ${SCWX_DIR}/data/db/fz05mr24.dbf | set(ZONE_DBF_FILES   ${SCWX_DIR}/data/db/fz05mr24.dbf | ||||||
|                      ${SCWX_DIR}/data/db/mz05mr24.dbf |                      ${SCWX_DIR}/data/db/mz05mr24.dbf | ||||||
|  | @ -504,6 +505,12 @@ add_custom_target(scwx-qt_generate_versions ALL | ||||||
| 
 | 
 | ||||||
| add_dependencies(scwx-qt scwx-qt_generate_versions) | add_dependencies(scwx-qt scwx-qt_generate_versions) | ||||||
| 
 | 
 | ||||||
|  | add_custom_target(scwx-qt_update_radar_sites | ||||||
|  |                   COMMAND ${Python_EXECUTABLE} | ||||||
|  |                           ${scwx-qt_SOURCE_DIR}/tools/update_radar_sites.py | ||||||
|  |                           -u ${RADAR_SITES_FILE} | ||||||
|  |                           -t -w) | ||||||
|  | 
 | ||||||
| qt_add_resources(scwx-qt "generated" | qt_add_resources(scwx-qt "generated" | ||||||
|                  PREFIX  "/" |                  PREFIX  "/" | ||||||
|                  BASE    ${scwx-qt_BINARY_DIR} |                  BASE    ${scwx-qt_BINARY_DIR} | ||||||
|  | @ -531,6 +538,7 @@ endif() | ||||||
| 
 | 
 | ||||||
| set_target_properties(scwx-qt_generate_counties_db PROPERTIES FOLDER generate) | set_target_properties(scwx-qt_generate_counties_db PROPERTIES FOLDER generate) | ||||||
| set_target_properties(scwx-qt_generate_versions    PROPERTIES FOLDER generate) | set_target_properties(scwx-qt_generate_versions    PROPERTIES FOLDER generate) | ||||||
|  | set_target_properties(scwx-qt_update_radar_sites   PROPERTIES FOLDER generate) | ||||||
| 
 | 
 | ||||||
| if (WIN32) | if (WIN32) | ||||||
|     set(APP_ICON_RESOURCE_WINDOWS "${scwx-qt_SOURCE_DIR}/res/scwx-qt.rc") |     set(APP_ICON_RESOURCE_WINDOWS "${scwx-qt_SOURCE_DIR}/res/scwx-qt.rc") | ||||||
|  |  | ||||||
							
								
								
									
										312
									
								
								scwx-qt/tools/update_radar_sites.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										312
									
								
								scwx-qt/tools/update_radar_sites.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,312 @@ | ||||||
|  | #!/usr/bin/env python3 | ||||||
|  | import requests | ||||||
|  | import json | ||||||
|  | import argparse | ||||||
|  | import csv | ||||||
|  | 
 | ||||||
|  | NOAA_BASE = "https://www.ncdc.noaa.gov/homr/services/station" | ||||||
|  | WARNING = "\033[93mWARNING: Updating radar sites may break tests in \ | ||||||
|  | 'test/source/scwx/qt/config/radar_site.test.cpp'\033[39m" | ||||||
|  | 
 | ||||||
|  | # Get the noaa station data. | ||||||
|  | # platform is what platform should be searched for | ||||||
|  | # current (should) filter to only current stations (always is filtered) | ||||||
|  | # icao is a ICAO identifier. Without it we search for all. | ||||||
|  | def get_noaa_stations(platform, current, icao = None): | ||||||
|  |     params = { | ||||||
|  |         "definitions":  "false", | ||||||
|  |         "phrData":      "false", | ||||||
|  |     } | ||||||
|  |     if platform is not None: | ||||||
|  |         params["platform"] = platform | ||||||
|  |     if current: | ||||||
|  |         params["current"] = "true" | ||||||
|  |     if icao is not None: | ||||||
|  |         params["qid"] = f"ICAO:{icao}" | ||||||
|  | 
 | ||||||
|  |     res = requests.get(NOAA_BASE + "/search", params = params) | ||||||
|  | 
 | ||||||
|  |     if res.ok: | ||||||
|  |         return res.json()["stationCollection"]["stations"] | ||||||
|  |     else: | ||||||
|  |         print("NETWORK ERROR: Could not get resources from NOAA HOMR") | ||||||
|  |         print(res.text) | ||||||
|  |         exit(5) | ||||||
|  | 
 | ||||||
|  | # dictionary to convert NOAA types to Supercell_wx types | ||||||
|  | NOAA_TYPE_DICT = { | ||||||
|  |     "TDWR":     "tdwr", | ||||||
|  |     "NEXRAD":  "wsr88d" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Given an list of objects, find the object with the best value for key. | ||||||
|  | # The values that appear earlier in values are better. | ||||||
|  | # subKey will take return the value under that key, not the full object. | ||||||
|  | # parser (needs subKey) is a function that will have the value found by | ||||||
|  | #   subKey and return a parsed version of it (often 'float' because HOMR | ||||||
|  | #   data uses strings for floats) | ||||||
|  | def extract_best(items, key, values, subKey = None, parser = None): | ||||||
|  |     valuesPart = enumerate(reversed(values)) | ||||||
|  |     valueDict = dict([(k,v) for v,k in valuesPart]) | ||||||
|  |     best = None | ||||||
|  |     bestInd = -1 | ||||||
|  | 
 | ||||||
|  |     for item in items: | ||||||
|  |         index = valueDict.get(item[key], -1) | ||||||
|  |         if bestInd is None or bestInd < index: | ||||||
|  |             bestInd = index | ||||||
|  |             best = item | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     if subKey is None or best is None: | ||||||
|  |         return best | ||||||
|  | 
 | ||||||
|  |     if parser is not None: | ||||||
|  |         return parser(best[subKey]) | ||||||
|  | 
 | ||||||
|  |     return best[subKey] | ||||||
|  | 
 | ||||||
|  | # Turn the noaa stations into a dictionary that can be used to update the locations and elevations. | ||||||
|  | def make_noaa_stations_dict(noaaStations): | ||||||
|  |     output = {} | ||||||
|  | 
 | ||||||
|  |     for station in noaaStations: | ||||||
|  |         stationId = extract_best(station["identifiers"], "idType", ["NEXRAD", "ICAO"], "id") | ||||||
|  | 
 | ||||||
|  |         if stationId in output: # some stations are repeaded in non NEXRAD/TDWR locations. | ||||||
|  |             continue | ||||||
|  | 
 | ||||||
|  |         stationDict = {} | ||||||
|  |         stationDict["lat"]   = float(station["header"]["latitude_dec"]) | ||||||
|  |         stationDict["lon"]   = float(station["header"]["longitude_dec"]) | ||||||
|  |         stationDict["elevation"] = extract_best(station["location"].get("elevations", []), | ||||||
|  |                                                 "elevationType", | ||||||
|  |                                                 ["GROUND"], | ||||||
|  |                                                 "elevationFeet", | ||||||
|  |                                                 float) | ||||||
|  |         # These are some things that could be updated from the NOAA HOMR data, | ||||||
|  |         # but are not necessary in the same format, so they are disabled. | ||||||
|  |         """ | ||||||
|  |         stationDict["id"] = stationId | ||||||
|  |         stationDict["country"] = station["location"]["geoInfo"]["countries"][0]["country"] | ||||||
|  |         if "stateProvinces" in station["location"]["geoInfo"]: | ||||||
|  |             stationDict["state"]   = station["location"]["geoInfo"]["stateProvinces"][0]["stateProvince"] | ||||||
|  |         else: | ||||||
|  |             stationDict["state"] = None | ||||||
|  |         stationDict["place"]   = extract_best(station["names"], "nameType", ["PRINCIPAL"], "name") | ||||||
|  |         stationDict["type"]    = NOAA_TYPE_DICT[station["platforms"][0]["platform"]] | ||||||
|  |         #stationDict["tz"]      = station["location"]["geoInfo"]["utcOffsets"][0]["utcOffset"] # This is UTC offset, not timezone | ||||||
|  |         """ | ||||||
|  | 
 | ||||||
|  |         output[stationId] = stationDict | ||||||
|  | 
 | ||||||
|  |     return output | ||||||
|  | 
 | ||||||
|  | # Get the list of updated stations (not in place), using the noaaStationsDict | ||||||
|  | # from make_noaa_stations_dict | ||||||
|  | def update_stations(noaaStationsDict, previousStations, toUpdate = None): | ||||||
|  |     newStations = [] | ||||||
|  |     for station in previousStations: | ||||||
|  |         newStation = station.copy() | ||||||
|  | 
 | ||||||
|  |         if not station["id"] in noaaStationsDict: | ||||||
|  |             # may be good idea to add fallback to a ICAO search for non active | ||||||
|  |             # stations. | ||||||
|  |             print(f"WARNING: Station '{station['id']}' not found in noaa data") | ||||||
|  | 
 | ||||||
|  |             if "elevation" not in station: | ||||||
|  |                 newStation["elevation"] = None | ||||||
|  |         elif toUpdate is None or station["id"] in toUpdate: | ||||||
|  |             newStation.update(noaaStationsDict[station["id"]]) | ||||||
|  |         else: | ||||||
|  |             newStation["elevation"] = noaaStationsDict[station["id"]]["elevation"] | ||||||
|  | 
 | ||||||
|  |         newStations.append(newStation) | ||||||
|  | 
 | ||||||
|  |     return newStations | ||||||
|  | 
 | ||||||
|  | # Read in csv file describing which locations to update. | ||||||
|  | # Elevation data is always updated. | ||||||
|  | def get_to_update_file(filename): | ||||||
|  |     with open(filename) as file: | ||||||
|  |         r = csv.reader(file) | ||||||
|  |         next(r) | ||||||
|  |         toUpdate = set() | ||||||
|  |         for row in r: | ||||||
|  |             if len(row) == 2 and row[1] == "HOMR": | ||||||
|  |                 toUpdate.add(row[0]) | ||||||
|  |     return toUpdate | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Customized dump routine. Formats it as one station per row, aligning items. | ||||||
|  | def custom_dump(stations, file): | ||||||
|  |     file.write("[\n") | ||||||
|  |     lengths = {} | ||||||
|  |     lastKey = None | ||||||
|  |     keys = None | ||||||
|  | 
 | ||||||
|  |     # Find length for each value, and ensure all stations have the same keys. | ||||||
|  |     for station in stations: | ||||||
|  |         for key, value in station.items(): | ||||||
|  |             length = len(json.dumps(value)) | ||||||
|  |             if key in lengths: | ||||||
|  |                 lengths[key] = max(length, lengths[key]) | ||||||
|  |             else: | ||||||
|  |                 lengths[key] = length | ||||||
|  |             lastKey = key | ||||||
|  | 
 | ||||||
|  |         newKeys = list(station.keys()) | ||||||
|  |         if keys is None: | ||||||
|  |             keys = newKeys | ||||||
|  |         elif keys != newKeys: | ||||||
|  |             print("DUMP ERROR: Stations did not have the same keys.") | ||||||
|  |             exit(3) | ||||||
|  | 
 | ||||||
|  |     # Write out each station with the correct format. | ||||||
|  |     lastType = None | ||||||
|  |     for station in stations: | ||||||
|  |         # put an empty line between NEXRAD and TDWR. | ||||||
|  |         if lastType is not None and lastType != station["type"]: | ||||||
|  |             file.write("\n") | ||||||
|  | 
 | ||||||
|  |         file.write("\t{ ") | ||||||
|  | 
 | ||||||
|  |         for key, value in station.items(): | ||||||
|  |             value = json.dumps(value) | ||||||
|  |             file.write(f'"{key}": {value}') | ||||||
|  | 
 | ||||||
|  |             if key != lastKey: | ||||||
|  |                 file.write(", ") | ||||||
|  |                 file.write(" " * (lengths[key] - len(value))) | ||||||
|  | 
 | ||||||
|  |         if station == stations[-1]: | ||||||
|  |             file.write(" }\n") | ||||||
|  |         else: | ||||||
|  |             file.write(" },\n") | ||||||
|  | 
 | ||||||
|  |         lastType = station["type"] | ||||||
|  | 
 | ||||||
|  |     file.write("]\n") | ||||||
|  | 
 | ||||||
|  | # Write coordinates out to a file. Useful for checking against map program. | ||||||
|  | def make_coords(stations, file): | ||||||
|  |     for station in stations: | ||||||
|  |         lat = str(abs(station["lat"])) | ||||||
|  |         lat += "N" if station["lat"] > 0 else "S" | ||||||
|  | 
 | ||||||
|  |         lon = str(abs(station["lon"])) | ||||||
|  |         lon += "E" if station["lon"] > 0 else "W" | ||||||
|  | 
 | ||||||
|  |         file.write(f"{lat} {lon}\n") | ||||||
|  | 
 | ||||||
|  | def main(): | ||||||
|  |     parser = argparse.ArgumentParser( | ||||||
|  |             description="""Update supercell-wx's location data for towers form NOAA's HOMR database.\n | ||||||
|  |             Recommended Arguments: -u ../res/config/radar_sites.json -t -w""") | ||||||
|  |     parser.add_argument("--current_file", "-u", type = str, default = None, required = False, | ||||||
|  |                         help = "The 'radar_sites.json' file to update. Without this option, this will generate a new file") | ||||||
|  |     parser.add_argument("--test_updated", "-t", default = False, action = "store_true", | ||||||
|  |                         help = "Read in the updated file to ensure it is valid JSON. Should be used.") | ||||||
|  |     parser.add_argument("--to_update_csv", "-U", type = str, default = None, required = False, | ||||||
|  |                         help = "Choose a CSV describing which stations to update. \ | ||||||
|  | First column is station ID, Second is HOMR if it should be updated. First row is a header.") | ||||||
|  |     parser.add_argument("--updated_file", "-o", type = str, default = None, required = False, | ||||||
|  |                         help = "The updated 'radar_sites.json' file. The default is to overwrite the current one.") | ||||||
|  |     parser.add_argument("--coord_file", "-c", type = str, default = None, required = False, | ||||||
|  |                         help = "Output an additional file with the coordinates of each site.") | ||||||
|  |     parser.add_argument("--resp_file", "-r", type = str, default = None, required = False, | ||||||
|  |                         help = "Output most of the JSON from the responses.") | ||||||
|  |     parser.add_argument("--input_json", "-i", type = str, default = None, required = False, | ||||||
|  |                         help = "Instead of querying NOAA, just read in a JSON file made by \"-r\".") | ||||||
|  |     parser.add_argument("--json_dump", "-j", default = False, action = "store_true", | ||||||
|  |                         help = "Uses 'json.dump' instead of the custom dump function. Has worse formatting.") | ||||||
|  |     parser.add_argument("--more_radars", "-m", default = False, action = "store_true", | ||||||
|  |                         help = "Get AWOS and UPPERAIR stations as well. Should NOT be used.") | ||||||
|  |     parser.add_argument("--current_only", "-C", default = False, action = "store_true", | ||||||
|  |                         help = "Get only currently active stations. Does not seem to change anything.") | ||||||
|  |     parser.add_argument("--warn", "-w", default = False, action = "store_true", | ||||||
|  |                         help = "Display a warning about breaking a test by updating the radar sites.") | ||||||
|  | 
 | ||||||
|  |     args = parser.parse_args() | ||||||
|  |     # default to updating the same file as input | ||||||
|  |     if args.updated_file is None: | ||||||
|  |         if args.current_file is None: | ||||||
|  |             parser.error("Needs 'current_file' or 'updated_file'") | ||||||
|  |         args.updated_file = args.current_file | ||||||
|  | 
 | ||||||
|  |     previousStations = None | ||||||
|  |     if args.current_file is not None: | ||||||
|  |         print(f"Reading Current Sites from '{args.current_file}'") | ||||||
|  |         with open(args.current_file, "r") as file: | ||||||
|  |             previousStations = json.load(file) | ||||||
|  | 
 | ||||||
|  |     toUpdate = None | ||||||
|  |     if args.to_update_csv is not None: | ||||||
|  |         toUpdate = get_to_update_file(args.to_update_csv) | ||||||
|  | 
 | ||||||
|  |     if args.input_json is None: | ||||||
|  |         print("Getting NEXRAD stations") | ||||||
|  |         noaaStations = get_noaa_stations("NEXRAD", args.current_only) | ||||||
|  | 
 | ||||||
|  |         print("Getting TDWR stations") | ||||||
|  |         noaaStations += get_noaa_stations("TDWR", args.current_only) | ||||||
|  | 
 | ||||||
|  |         if args.more_radars: # Should not be used | ||||||
|  |             print("Getting AWOS stations") | ||||||
|  |             noaaStations += get_noaa_stations("AWOS", args.current_only) | ||||||
|  | 
 | ||||||
|  |             print("Getting UPPERAIR stations") | ||||||
|  |             noaaStations += get_noaa_stations("UPPERAIR", args.current_only) | ||||||
|  |     else: | ||||||
|  |         with open(args.input_json, "r") as file: | ||||||
|  |             noaaStations = json.load(file) | ||||||
|  | 
 | ||||||
|  |     if args.resp_file is not None: | ||||||
|  |         with open(args.resp_file, "w") as file: | ||||||
|  |             json.dump(noaaStations, file, indent=4) | ||||||
|  | 
 | ||||||
|  |     print("Processing Data") | ||||||
|  |     noaaStationsDict = make_noaa_stations_dict(noaaStations) | ||||||
|  | 
 | ||||||
|  |     if args.current_file is None: | ||||||
|  |         newStations = list(noaaStationsDict.values()) | ||||||
|  |     else: | ||||||
|  |         newStations = update_stations(noaaStationsDict, previousStations, toUpdate) | ||||||
|  | 
 | ||||||
|  |     print(f"Saving Updated Sites to '{args.updated_file}'") | ||||||
|  |     with open(args.updated_file, "w") as file: | ||||||
|  |         if args.json_dump: | ||||||
|  |             json.dump(newStation, file) | ||||||
|  |         else: | ||||||
|  |             custom_dump(newStations, file) | ||||||
|  | 
 | ||||||
|  |     if args.coord_file is not None: | ||||||
|  |         print(f"Saving Coordinates to '{args.coord_file}'") | ||||||
|  |         with open(args.coord_file, "w") as file: | ||||||
|  |             make_coords(newStations, file) | ||||||
|  | 
 | ||||||
|  |     if args.test_updated: | ||||||
|  |         failed = False | ||||||
|  |         with open(args.updated_file, "r") as file: | ||||||
|  |             try: | ||||||
|  |                 data = json.load(file) | ||||||
|  |                 if len(data) < len(newStations): | ||||||
|  |                     print(f"TEST ERROR: Only read in {len(data)} out of {len(newStations)} items.") | ||||||
|  |                     failed = True | ||||||
|  |                 if json.dumps(data) != json.dumps(newStations): | ||||||
|  |                     print(f"TEST ERROR: Dumps are not equal") | ||||||
|  |                     failed = True | ||||||
|  |             except Exception as e: | ||||||
|  |                 print(e) | ||||||
|  |                 failed = True | ||||||
|  | 
 | ||||||
|  |             if failed: | ||||||
|  |                 exit(4) | ||||||
|  | 
 | ||||||
|  |     if args.warn: | ||||||
|  |         print(WARNING) | ||||||
|  | 
 | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     main() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat