Ag-Analytics® - Elevation Index API

Local elevation on a field can have a strong correlation with harvest yield. The correlation stems from the drainage dynamics that are present on a given field, with low areas being productive in dry years and high areas being productive in wet years.

The Elevation Index API supports calculation of a set of elevation indices including field relative elevation, maximum slope, ,local Topographic Position Index(TPI), and local Topographic Roughness Index(TRI) for a given field elevation.

Required libraries

In [1]:
import requests
import json
import time
import os
from pandas.io.json import json_normalize
from collections import defaultdict
import pandas as pd
import zipfile, io
from IPython.display import Image

%matplotlib inline
%autosave 0
Autosave disabled

Request Parameter Details

Request URL: https://ag-analytics.azure-api.net/elevation-index

1) raster (string): Local path to the elevation raster the index will be calculated from

2) Shape (Geojson String): Geojson representation of area of interest boundary.

3) index_list (string): The elevation index of interest to retrieve.

i. Relative_Elevation: Derived by calculating the z-score of every point in the field

ii. Slop: The maximum slope of each point on the field is calculated by taking the gradient of the elevation for each point.

iii.TPI: The topographic position index is a method of measuring the elevation of a given point with respect to a surrounding neighborhood of surrounding points. This index indicates the local extrema,or points of maximum and minimum elevation on a sub-field level. 

iV.TRI:  The topographic Roughness index express the amount of elevation difference between adjacent points on local field

4) Outside_Radius(optional): Outer radius of search area of each point. Used in TPI only.

    (Ex:Outside_Radius =11 the outer search radius is 11 * cellsize. When cellsize is 0.001 of the elevation raster, the radius is about 11 * 8 = 88 meter

5) Inside_Radius(optional): Inner radius of search area. Used in TPI only.

6) Search_Radius(optional): Radius of computational box. search_radius = 1 => 3x3 box, 2 => 5x5 box, etc. Used in TRI only

API Function

In [2]:
def ElevationIndex(values, headers, files = None):
    try:
        url = 'https://ag-analytics.azure-api.net/elevation-index'
        
        if files == None:
            response = requests.post(url, json=values, headers=headers).json()
        else:
            response = requests.post(url, files = files, data = values).json()
        #resp = json.loads(response)
        print(response)
        
        return response
    
    except Exception as e:
        print(e)
        raise e

Request with GeoJSON shape.

In [24]:
# Request as GeoJSON.
values = {'Shape': '{\"type\":\"Feature\",\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[-76.5907145, 42.443918], [-76.5898132, 42.4224745], [-76.5699863, 42.4230447], [-76.5710592, 42.4443296], [-76.5907145, 42.443918]]]},\"properties\":{\"OBJECTID\":4944402,\"CALCACRES\":46.15999985,\"CALCACRES2\":null},\"id\":4944402}',
            'index_list':"['Relative_Elevation']",
            'Outside_Radius' :'5',
            'Inside_Radius':'3',
            'Search_Radius' :'2',
            'Legend_Range': '10'
}

headers={'Content-Type':'application/json'}
In [25]:
IndexResponse = ElevationIndex(values, headers)
{'Relative_Elevation': 'raster_RelativeElevation_20200624160129308329.tif', 'features': [[{'attributes': {'CellSize': [9.259259269220297e-05, -9.259259269220297e-05], 'CoordinateSystem': 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]]', 'Extent': '-76.5907145, 42.42238515553195, -76.57006635182964, 42.4443296', 'Legend': [{'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': -1.4202146530151367, 'Mean': -2.046072244644165, 'Min': -2.6719298362731934, 'color': '#4d76d5'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': -0.9852170109748839, 'Mean': -1.2027158319950102, 'Min': -1.4202146530151367, 'color': '#738bbd'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': -0.600157243013382, 'Mean': -0.7926871269941329, 'Min': -0.9852170109748839, 'color': '#99a1a6'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': -0.2564374446868896, 'Mean': -0.42829734385013585, 'Min': -0.600157243013382, 'color': '#bfb68f'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': 0.1063285544514656, 'Mean': -0.075054445117712, 'Min': -0.2564374446868896, 'color': '#e5cc78'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': 0.4869722604751586, 'Mean': 0.2966504074633121, 'Min': 0.1063285544514656, 'color': '#e5b470'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': 0.7359497606754299, 'Mean': 0.6114610105752942, 'Min': 0.4869722604751586, 'color': '#e69c69'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': 1.0151467800140384, 'Mean': 0.8755482703447341, 'Min': 0.7359497606754299, 'color': '#e68462'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': 1.249281334877014, 'Mean': 1.1322140574455262, 'Min': 1.0151467800140384, 'color': '#e76c5b'}, {'Area': '10.0 %', 'Count': 4906, 'CountAllPixels': 49060, 'Max': 1.4950298070907593, 'Mean': 1.3721555709838866, 'Min': 1.249281334877014, 'color': '#e85454'}], 'Matrix': [237, 223], 'Max': 1.4950298070907593, 'Mean': -1.0350845514039975e-06, 'Min': -2.6719298362731934, 'OID': 0, 'Percentile5': -1.724429041147232, 'Percentile95': 1.3571343958377833, 'Product': 'Relative_Elevation', 'Std': 0.9999999561272016, 'Variety': 'NoVariety', 'pngb64': 'data:image/png;base64, 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'}}]]}

Request using GeoTIFF DEM Raster

In [26]:
#Path to raster in your local machine
rasterpath = r"<Path to DEM Raster>"

files = [('elevation_raster',(open(rasterpath, 'rb')))]

#Parameters to create index
values = {'index_list':"['Relative_Elevation']",
            'Outside_Radius' :'5',
            'Inside_Radius':'3',
            'Search_Radius' :'2',
            'Legend_Range': '10'
}

# Basic Header Pattern.
headers={'Content-Type':'multipart/form-data'}

# Header for using a subscription key.
# headers={'content-type': "application/json",'Ocp-Apim-Subscription-Key': "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

Calling API Function and Displaying Response

In [27]:
IndexResponse = ElevationIndex(values, headers, files)
{'Relative_Elevation': 'raster_RelativeElevation_20200624160159048361.tif', 'features': [[{'attributes': {'CellSize': [0.0001, -0.0001], 'CoordinateSystem': 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4326"]]', 'Extent': '-76.5907145, 42.4224296, -76.5701145, 42.4443296', 'Legend': [{'Area': '10.0 %', 'Count': 4209, 'CountAllPixels': 42082, 'Max': -1.417577087879181, 'Mean': -2.0448013842105865, 'Min': -2.672025680541992, 'color': '#4d76d5'}, {'Area': '10.0 %', 'Count': 4208, 'CountAllPixels': 42082, 'Max': -0.9816803932189941, 'Mean': -1.1996287405490875, 'Min': -1.417577087879181, 'color': '#738bbd'}, {'Area': '10.0 %', 'Count': 4208, 'CountAllPixels': 42082, 'Max': -0.5979112744331361, 'Mean': -0.7897958338260651, 'Min': -0.9816803932189941, 'color': '#99a1a6'}, {'Area': '10.0 %', 'Count': 4208, 'CountAllPixels': 42082, 'Max': -0.25558894872665394, 'Mean': -0.426750111579895, 'Min': -0.5979112744331361, 'color': '#bfb68f'}, {'Area': '10.0 %', 'Count': 4208, 'CountAllPixels': 42082, 'Max': 0.10434544086456299, 'Mean': -0.07562175393104548, 'Min': -0.25558894872665394, 'color': '#e5cc78'}, {'Area': '10.0 %', 'Count': 4208, 'CountAllPixels': 42082, 'Max': 0.4858098983764648, 'Mean': 0.2950776696205139, 'Min': 0.10434544086456299, 'color': '#e5b470'}, {'Area': '10.0 %', 'Count': 4208, 'CountAllPixels': 42082, 'Max': 0.7370599091053008, 'Mean': 0.6114349037408828, 'Min': 0.4858098983764648, 'color': '#e69c69'}, {'Area': '10.0 %', 'Count': 4208, 'CountAllPixels': 42082, 'Max': 1.0157095670700074, 'Mean': 0.8763847380876542, 'Min': 0.7370599091053008, 'color': '#e68462'}, {'Area': '10.0 %', 'Count': 4209, 'CountAllPixels': 42082, 'Max': 1.2485206127166748, 'Mean': 1.132115089893341, 'Min': 1.0157095670700074, 'color': '#e76c5b'}, {'Area': '10.0 %', 'Count': 4210, 'CountAllPixels': 42082, 'Max': 1.4934033155441284, 'Mean': 1.3709619641304016, 'Min': 1.2485206127166748, 'color': '#e85454'}], 'Matrix': [219, 206], 'Max': 1.4934033155441284, 'Mean': 9.949650348062278e-07, 'Min': -2.672025680541992, 'OID': 0, 'Percentile5': -1.7284658074378967, 'Percentile95': 1.3558820605278015, 'Product': 'Relative_Elevation', 'Std': 1.0000000299142742, 'Variety': 'NoVariety', 'pngb64': 'data:image/png;base64, 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'}}]]}

Output Index Summary

In [28]:
df=defaultdict(list)
for value in IndexResponse['features']:
    attributes = value[0]['attributes']
    df['Index'].append(attributes['Product'])
    df['Max'].append(float(attributes['Max']))
    df['Mean'].append(float(attributes['Mean']))
    df['Min'].append(float(attributes['Min']))
    df['pngb64'].append(attributes['pngb64'])

indexdf=pd.DataFrame.from_dict(df)
indexdf
Out[28]:
Index Max Mean Min pngb64
0 Relative_Elevation 1.493403 9.949650e-07 -2.672026 data:image/png;base64, iVBORw0KGgoAAAANSUhEUgA...

Displaying Index Image

In [29]:
#####################################
# Select one index to display. Must match one of the following: 
# ['Slope', 'Relative_Elevation', 'TPI', 'TRI']
Index = 'Relative_Elevation'
######################################
In [30]:
#Select one index
Index = Index

#Image Legend
df=defaultdict(list)
for product in IndexResponse['features']:
    if Index == product[0]['attributes']['Product']:
        Legend = product[0]['attributes']['Legend']
for val in Legend:
    df['Max'].append(float(val['Max']))
    df['Mean'].append(float(val['Mean']))
    df['Min'].append(float(val['Min']))
    df['Color'].append(val['color'])
    
legenddf = pd.DataFrame.from_dict(df)    
legenddf.style.applymap(lambda x:"background-color: %s"%x, subset=['Color'])
Out[30]:
Max Mean Min Color
0 -1.417577 -2.044801 -2.672026 #4d76d5
1 -0.981680 -1.199629 -1.417577 #738bbd
2 -0.597911 -0.789796 -0.981680 #99a1a6
3 -0.255589 -0.426750 -0.597911 #bfb68f
4 0.104345 -0.075622 -0.255589 #e5cc78
5 0.485810 0.295078 0.104345 #e5b470
6 0.737060 0.611435 0.485810 #e69c69
7 1.015710 0.876385 0.737060 #e68462
8 1.248521 1.132115 1.015710 #e76c5b
9 1.493403 1.370962 1.248521 #e85454
In [31]:
IndexImage = indexdf.loc[indexdf['Index'] == Index,'pngb64'].iloc[0]
Image(url = IndexImage, width= 500, height =500)
Out[31]:

GET Request

In [10]:
# Specify local path where file will be downloaded.
local_path = r"<Path to local directory>" # E.g., r"C:\Users\John_Doe\Documents\rasters"

# Create GET request payload.
Index = 'Relative_Elevation'
values = {'filenames': [IndexResponse[Index],]}
print(values)
{'filenames': ['raster_RelativeElevation_20200612135833933444.tif']}
In [11]:
def Elevation_Index_get(values, local_path):
    try:
        url = 'https://ag-analytics.azure-api.net/elevation-index'
    
        download_path = os.path.join(local_path, values['filenames'][0])
        print(values)
     
        response = requests.get(url, params=values)
        open(download_path, 'wb').write(response.content)
        
        print(response.url)

        return response
    
    except Exception as e:
        print(e)
        raise e
In [12]:
Elevation_Index_get(values, local_path)
{'filenames': ['raster_RelativeElevation_20200612135833933444.tif']}
https://ag-analytics.azure-api.net/elevation-index?filenames=raster_RelativeElevation_20200612135833933444.tif
Out[12]:
<Response [200]>
In [ ]: