blob: 29f0f2e36af186ab0f96f73c04ed7875d30f5ecb [file] [log] [blame]
"""-----------------------------------------------------------------------------
Script Name: NEXUS Time average map
Description: Creates time-average graph from
a given dataset
Created By: Alice Yepremyan
Date: 1/20/2020
-----------------------------------------------------------------------------"""
import arcpy
import json
import requests
import datetime
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
arcpy.env.overwriteOutput = True
# Get the input parameters
host_url = arcpy.GetParameterAsText(0)
ds = arcpy.GetParameterAsText(1)
input_feature = arcpy.GetParameter(2)
start_time = pd.to_datetime(arcpy.GetParameterAsText(3)).strftime('%Y-%m-%dT%H:%M:%SZ')
end_time = pd.to_datetime(arcpy.GetParameterAsText(4)).strftime('%Y-%m-%dT%H:%M:%SZ')
# get coordinates by calculating geometric attributes
arcpy.MakeFeatureLayer_management(input_feature, "layer")
arcpy.AddGeometryAttributes_management("layer", "EXTENT")
rows = arcpy.SearchCursor("layer", fields="EXT_MIN_X;EXT_MIN_Y;EXT_MAX_X;EXT_MAX_Y")
row = next(rows)
min_lon = row.getValue("EXT_MIN_X")
max_lon = row.getValue("EXT_MAX_X")
min_lat = row.getValue("EXT_MIN_Y")
max_lat = row.getValue("EXT_MAX_Y")
# Build the HTTP request
request = "https://{}/timeAvgMapSpark?ds={}&startTime={}&endTime={}&minLon={}&minLat={}&maxLon={}&maxLat={}" \
.format(host_url, ds, start_time, end_time, min_lon, min_lat, max_lon, max_lat)
#request = 'https://{}/timeAvgMapSpark?ds=AVHRR_OI_L4_GHRSST_NCEI&minLat=-5&minLon=-170&maxLat=5&maxLon=-120&startTime=1356998400&endTime=1383091200'
arcpy.AddMessage('{}'.format(request))
# Report a success message
arcpy.AddMessage("Url received, getting json")
# Send request to server
response = requests.get(request).json()
arcpy.AddMessage('{}'.format(response))
# Parse the response and create an image
lons = [point['lon'] for point in response['data'][0]]
lats = [a_list[0]['lat'] for a_list in response['data']]
my_list = numpy.ndarray((len(lats), len(lons)))
for x in range(0, len(lats)):
for y in range(0, len(lons)):
my_list[x][y] = response['data'][x][y]['mean']
norm = mpl.colors.Normalize(vmin=my_list.min(), vmax=my_list.max())
# Plot the time average
fig, ax1 = plt.subplots(figsize=(10, 5), dpi=100)
ax1.pcolormesh(lons, lats, my_list, vmin=my_list.min(), vmax=my_list.max(), cmap='gist_rainbow')
plt.title('Time Average Map')
plt.show()