integrations/esri/zipped_toolbox/time_average_map.py (38 lines of code) (raw):

# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """----------------------------------------------------------------------------- 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()