Ag-Analytics® - DEM Service API

The Ag-Analytics® DEM Service API allows for clipping boundaries to the 10 meter USGS DEM map of the United States. The service consists of a POST request where the user can pass a GeoJSON boundary, desired output projection as an EPSG code, and a resolution in degrees lat/lon. The result of the post request is a file name that is the result of the clip, reproject, and resample.

The file name can be used as the parameter in a GET request to the same endpoint. Doing so will download the file to the specified local path.

In [4]:
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 parameters details

Request URL: https://ag-analytics.azure-api.net/dem-service

1). aoi (.tif, .shp, GeoJSON String): Area of interest as either TIFF file, shapefile, or Geojson string containing boundary coordinates. The maximum aoi area must be less than 200 square miles (518 sq km).

2). Projection (string): Projection of result GeoTiff.

Formatted as EPSG code, WKT, or PROJ.4.

3). Resolution (Float): Output GeoTIFF resolution.

Specified in the units of the projection. E.g., 8-meters in WGS84 ~0.0001 degrees.

4). Elevation_Index (True/False as string): Flag to return elevation indices along with DEM Raster when set to true.

Relative Elevation: Relative elevation of each pixel as compared to entire field. 

Slope: Slope at each point. 

Topographical Position Index: Index of how each pixel compares to a 5 pixel window of surrounding points.

Terrain Ruggedness Index: Measure of how hilly the area of interest is.    

Note about returning elevation indices

Computing Slope, TPI, and TRI are relatively computationally expensive, and therefore increase the response time significantly. If the DEM request takes ~2 seconds, including a elevation indices will increase the time to ~60 seconds. Since the time required increases as a square of time, the maximum allowable area is 1.5 square miles instead of the 200 square miles in the DEM request without elevation indices.


POST Request API Fuction

In [46]:
def DEM_Service(values, files, headers):
    try:
        url = 'https://ag-analytics.azure-api.net/dem-service'
        
        # Geojson request or request with geotiff/shapefile.
        if files == None:
            response = requests.post(url, data=values, headers=headers).json()
        else:
            response = requests.post(url, files = files, data = values).json()
        
        print(response)
        
        return response
    
    except Exception as e:
        print(e)
        raise e

A. Request with GeoJSON AOI

The API service takes the request in Json format. Below are examples formatted in Json.

In [47]:
gjson_values = {
    "aoi": "{\"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}",
    "Elevation_Index": "False",
    "Legend_Ranges": "20"
}

gjson_files = None

# Basic header pattern.
gjson_headers={'Content-Type':'application/x-www-form-urlencoded'}

# Header for using a subscription key.
# headers={'Content-Type':'application/x-www-form-urlencoded','Ocp-Apim-Subscription-Key': '••••••••••••••••••••••••••••••••'}

API Call with GeoJSON Boundary

In [48]:
gjson_dem_response=DEM_Service(gjson_values, gjson_files, gjson_headers)
{'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': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 387.494482421875, 'Mean': 377.98350830078124, 'Min': 368.4725341796875, 'color': '#6bd54d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 393.60186767578125, 'Mean': 390.5481750488281, 'Min': 387.494482421875, 'color': '#76d14d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 398.3304763793945, 'Mean': 395.96617202758785, 'Min': 393.60186767578125, 'color': '#82ce4d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 402.33484497070316, 'Mean': 400.3326606750488, 'Min': 398.3304763793945, 'color': '#8eca4d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 406.1711120605469, 'Mean': 404.25297851562505, 'Min': 402.33484497070316, 'color': '#9ac74d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 410.0652740478516, 'Mean': 408.1181930541992, 'Min': 406.1711120605469, 'color': '#a5c34d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 413.4850250244141, 'Mean': 411.77514953613286, 'Min': 410.0652740478516, 'color': '#b1c04d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 416.96576538085935, 'Mean': 415.2253952026367, 'Min': 413.4850250244141, 'color': '#bdbc4d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 420.6257369995117, 'Mean': 418.7957511901855, 'Min': 416.96576538085935, 'color': '#c9b94d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 424.2486267089844, 'Mean': 422.437181854248, 'Min': 420.6257369995117, 'color': '#d5b64d'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 428.3586776733398, 'Mean': 426.3036521911621, 'Min': 424.2486267089844, 'color': '#d7bb5c'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 431.8903991699219, 'Mean': 430.12453842163086, 'Min': 428.3586776733398, 'color': '#d9c06c'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 434.07612762451174, 'Mean': 432.98326339721683, 'Min': 431.8903991699219, 'color': '#dbc57b'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 436.8888519287109, 'Mean': 435.4824897766113, 'Min': 434.07612762451174, 'color': '#ddca8b'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 439.70599365234375, 'Mean': 438.2974227905273, 'Min': 436.8888519287109, 'color': '#dfcf9b'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 442.4939880371094, 'Mean': 441.09999084472656, 'Min': 439.70599365234375, 'color': '#e1d4aa'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 444.9431686401367, 'Mean': 443.71857833862305, 'Min': 442.4939880371094, 'color': '#e3d9ba'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 447.1944549560547, 'Mean': 446.0688117980957, 'Min': 444.9431686401367, 'color': '#e5dec9'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 449.3597045898438, 'Mean': 448.27707977294926, 'Min': 447.1944549560547, 'color': '#e7e3d9'}, {'Area': '5.0 %', 'Count': 2453, 'CountAllPixels': 49060, 'Max': 452.1280822753906, 'Mean': 450.7438934326172, 'Min': 449.3597045898438, 'color': '#e9e9e9'}], 'Matrix': [237, 223], 'Max': 452.1280822753906, 'Mean': 422.1139831542969, 'Min': 368.4725341796875, 'OID': 0, 'Percentile5': 387.494482421875, 'Percentile95': 449.3597045898438, 'Std': 20.075919225078817, 'Variety': 'NoVariety', 'pngb64': 'data:image/png;base64, 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'}}], 'FileName': 'result_raster_dem_20200228005759046271.tif'}

B. Request with GeoTIFF AOI

The AOI should be provided as GeoTIFF file.

In [49]:
#Path to raster on your local machine
gtiff_filepath = r"C:\<Path to GeoTIFF>"
gtiff_files = [('File',(open(gtiff_filepath, 'rb')))]

#Parameters to create index
gtiff_values = {"Elevation_Index": "False",
            "Projection": "EPSG:4326",
            "Resolution": "0.0001"}

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

API Call with GeoTIFF Boundary

In [50]:
gtiff_dem_response=DEM_Service(gtiff_values, gtiff_files, gtiff_headers)
{'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': '-89.7589617109772, 40.45670547253678, -89.7512617109772, 40.463805472536784', 'Legend': [{'Area': '20.05 %', 'Count': 244, 'CountAllPixels': 1217, 'Max': 141.15856018066407, 'Mean': 141.08349151611327, 'Min': 141.0084228515625, 'color': '#6bd54d'}, {'Area': '19.97 %', 'Count': 243, 'CountAllPixels': 1217, 'Max': 141.2390625, 'Mean': 141.19881134033204, 'Min': 141.15856018066407, 'color': '#d5b64d'}, {'Area': '19.97 %', 'Count': 243, 'CountAllPixels': 1217, 'Max': 141.33377990722656, 'Mean': 141.28642120361326, 'Min': 141.2390625, 'color': '#dbc781'}, {'Area': '19.97 %', 'Count': 243, 'CountAllPixels': 1217, 'Max': 147.81399230957032, 'Mean': 144.57388610839843, 'Min': 141.33377990722656, 'color': '#e2d8b5'}, {'Area': '20.05 %', 'Count': 244, 'CountAllPixels': 1217, 'Max': 156.72396850585938, 'Mean': 152.26898040771485, 'Min': 147.81399230957032, 'color': '#e9e9e9'}], 'Matrix': [71, 77], 'Max': 156.72396850585938, 'Mean': 143.43475341796875, 'Min': 141.0084228515625, 'OID': 0, 'Percentile5': 141.07857666015624, 'Percentile95': 152.1517761230469, 'Std': 4.019496098598224, 'Variety': 'NoVariety', 'pngb64': 'data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAE0AAABHCAYAAABCksrWAAADHUlEQVR4nO2asU7jQBCGfziU1Ckid1AhIdG64RUO5T1QXuBKdA9xvAgir3BN2khIV4UucpE6VBTWxMOy611PjDObm69xsM3G+3l2d3azZ5vNpgKAoiimYNB5jnvP/8p56IIryIQ1BKUZYUyaAJMmwKQJMGkC9tJ8KYbhxyJNQLI0i8QGizQBJk2ASRNg0gSYNAEmTYBJE2DSBJg0ASZNwHnbMrYtcfuxSBOgVtrb60v19vqicpFArbTxpMR4UkKjOLXSNKNe2nhSHvsRvqBeGlAvgGpaBFUvrSiK6W67xG67PPaj7PkkTdPb5KIub+5V5YudIu3YUrWMpBfHfoAYWkRx1PdpQNM8tTTTLKRpIxtpWqIMUCyNS/LNQ+nvrnPUPua0naRpypWOSXT01CaKR0noM2e3XWI8Kff1oOO/v7+r9+0SIzZNi03ZKPrVpxxAU9HVYlaRhNi97rn3wMt3z7eVTS9GtTQugCoXqrx7XxtPV8B8XR+B+jP9L48+n8DLm/vpGVBn+u4bolD0hf1QI9lqMdt/N1UQqCs5mpRJgji8jBAkkDNy5F0An38LSOknNOAKSxGSgq+c+br5rtufz3WkaWW1mFX+SjSf+5KVwp/b5ymgOE/TBgkDMpdGHfrQqJY2ZNPrQvZ9mot7P08tJPBmSajO0zixylMK4hPa98ChXporYYg+bL6uU4vQddV9mgsX5iacdI7Ou0dfGbHvCJGVNA5PbrkYPt3qOmtI7f+ykvZ09bVSvojzkXIfld3WNIEMRs/QtTYJfNIdijR3LgvEZRFZRRqnrdnxZsn7Oc58Dfz68SAaWLKMtNQm6eITTWVd3z0mr9yoTjnciIl16rT+FVpt9pXRRRahunle3z1OY30TJ7bnIzTidkW1NB+HVNbN3VI7fpdspHWR5UalL8IkzZLIQloou4/d7+MQWUQW0vrmUHHZSUvdTtp3k+SoTjl8pP54zZtoX7KI7KQB/mgLyexbGJCBNNpSEPtVfchd4Fn0aTEhQ2+bz0KaNtQ3TynfuXXiJCPtu/eanJy0ITbnnJy0ITgpaUNtAfsANf5WMWFMp18AAAAASUVORK5CYII='}}], 'FileName': 'result_raster_dem_20200228005815278353.tif'}

C. Request with shapefile AOI

The AOI should be provided as a zipped file containing a .shp, .shx, .dbf, and .prj.

In [9]:
#Path to zipped shapefile directory on your local machine
shp_filepath = r"C:\<Path to shapefile zipped folder>"
shp_file = [('File',(open(shp_filepath, 'rb')))]
print(shp_file)

#Parameters to create index
shp_values = {"Elevation_Index": "False",
            "Projection": "EPSG:4326",
            "Resolution": "0.0001",
            "Legend_Ranges": "20"}

shp_headers={'Content-Type':'application/json'}

# Header for using a subscription key.
# headers={'content-type': "application/json",'Ocp-Apim-Subscription-Key': "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
[('File', <_io.BufferedReader name='C:\\Users\\Alex\\Documents\\sample_shp.zip'>)]

API Call with Shapefile Boundary

In [11]:
shp_dem_response=DEM_Service(shp_values, shp_file, shp_headers)
{'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': '-121.2484646, 45.4417127, -121.2115646, 45.4668127', 'Legend': [{'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 382.63002014160156, 'Mean': 369.81505584716797, 'Min': 357.0000915527344, 'color': '#6bd54d'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 398.3754577636719, 'Mean': 390.5027389526367, 'Min': 382.63002014160156, 'color': '#76d14d'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 414.1468200683594, 'Mean': 406.2611389160156, 'Min': 398.3754577636719, 'color': '#82ce4d'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 430.31072998046875, 'Mean': 422.22877502441406, 'Min': 414.1468200683594, 'color': '#8eca4d'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 446.10777282714844, 'Mean': 438.2092514038086, 'Min': 430.31072998046875, 'color': '#9ac74d'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 460.6589660644531, 'Mean': 453.3833694458008, 'Min': 446.10777282714844, 'color': '#a5c34d'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 473.9654998779297, 'Mean': 467.3122329711914, 'Min': 460.6589660644531, 'color': '#b1c04d'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 487.024658203125, 'Mean': 480.49507904052734, 'Min': 473.9654998779297, 'color': '#bdbc4d'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 500.93328857421875, 'Mean': 493.9789733886719, 'Min': 487.024658203125, 'color': '#c9b94d'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 518.5171508789062, 'Mean': 509.7252197265625, 'Min': 500.93328857421875, 'color': '#d5b64d'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 540.2130126953125, 'Mean': 529.3650817871094, 'Min': 518.5171508789062, 'color': '#d7bb5c'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 561.1194458007812, 'Mean': 550.6662292480469, 'Min': 540.2130126953125, 'color': '#d9c06c'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 577.9569091796875, 'Mean': 569.5381774902344, 'Min': 561.1194458007812, 'color': '#dbc57b'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 593.1831054687499, 'Mean': 585.5700073242188, 'Min': 577.9569091796875, 'color': '#ddca8b'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 603.7877197265625, 'Mean': 598.4854125976562, 'Min': 593.1831054687499, 'color': '#dfcf9b'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 612.4229736328125, 'Mean': 608.1053466796875, 'Min': 603.7877197265625, 'color': '#e1d4aa'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 617.456298828125, 'Mean': 614.9396362304688, 'Min': 612.4229736328125, 'color': '#e3d9ba'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 624.531982421875, 'Mean': 620.994140625, 'Min': 617.456298828125, 'color': '#e5dec9'}, {'Area': '5.0 %', 'Count': 4498, 'CountAllPixels': 89951, 'Max': 630.8839721679688, 'Mean': 627.7079772949219, 'Min': 624.531982421875, 'color': '#e7e3d9'}, {'Area': '5.0 %', 'Count': 4497, 'CountAllPixels': 89951, 'Max': 646.5624389648438, 'Mean': 638.7232055664062, 'Min': 630.8839721679688, 'color': '#e9e9e9'}], 'Matrix': [251, 369], 'Max': 646.5624389648438, 'Mean': 518.878662109375, 'Min': 357.0000915527344, 'OID': 0, 'Percentile5': 382.63002014160156, 'Percentile95': 630.8839721679688, 'Std': 84.77076824069017, 'Variety': 'NoVariety', 'pngb64': 'data:image/png;base64, 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'}}], 'FileName': 'result_raster_dem_20200227162700619047.tif'}

Displaying Response

Displaying Output Image

In [98]:
#################################################################
# Input boundary type from ['geojson', 'geotiff', 'shapefile']
boundary_type = 'geojson' 
#################################################################

if boundary_type == 'geojson':
    dem_response = gjson_dem_response
elif boundary_type == 'geotiff':
    dem_response = gtiff_dem_response
elif boundary_type == 'shapefile':
    dem_response = shp_dem_response
In [99]:
df=defaultdict(list)
for value in dem_response['Features']:
    attributes = value['attributes']
    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[99]:
Max Mean Min pngb64
0 452.128082 422.113983 368.472534 data:image/png;base64, iVBORw0KGgoAAAANSUhEUgA...
In [100]:
#Image Legend
df=defaultdict(list)
for product in dem_response['Features']:
    Legend = product['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'])
#     df['Range'] = ['Low','Medium','High']
    
legenddf = pd.DataFrame.from_dict(df)    
legenddf.style.applymap(lambda x:"background-color: %s"%x, subset=['Color'])
Out[100]:
Max Mean Min Color
0 387.494 377.984 368.473 #6bd54d
1 393.602 390.548 387.494 #76d14d
2 398.33 395.966 393.602 #82ce4d
3 402.335 400.333 398.33 #8eca4d
4 406.171 404.253 402.335 #9ac74d
5 410.065 408.118 406.171 #a5c34d
6 413.485 411.775 410.065 #b1c04d
7 416.966 415.225 413.485 #bdbc4d
8 420.626 418.796 416.966 #c9b94d
9 424.249 422.437 420.626 #d5b64d
10 428.359 426.304 424.249 #d7bb5c
11 431.89 430.125 428.359 #d9c06c
12 434.076 432.983 431.89 #dbc57b
13 436.889 435.482 434.076 #ddca8b
14 439.706 438.297 436.889 #dfcf9b
15 442.494 441.1 439.706 #e1d4aa
16 444.943 443.719 442.494 #e3d9ba
17 447.194 446.069 444.943 #e5dec9
18 449.36 448.277 447.194 #e7e3d9
19 452.128 450.744 449.36 #e9e9e9
In [101]:
# IndexImage = indexdf.loc[indexdf['Index'] == 'POLARIS_Soils','pngb64'].iloc[0]
DEMImage = dem_response["Features"][0]['attributes']["pngb64"]
Image(url = DEMImage, width = 500, height = 500)
Out[101]:

GET Request

In [102]:
# Specify local path where file will be downloaded.
local_path = r"C:\<Path to download directory>" # E.g., r"C:\Users\John_Doe\Documents\rasters"
# Create GET request payload.
if 'Index_Files' in dem_response.keys():
    files = []
    files.append(dem_response['FileName'])
    for file in dem_response['Index_Files']:
        files.append(file)
    values = {'FileNames': files}
else:
    values = {'FileNames': [dem_response['FileName'],]}
print(values)
{'FileNames': ['result_raster_dem_20200227192410517090.tif']}
In [103]:
def DEM_get(values, local_path):
    try:
        url = 'https://ag-analytics.azure-api.net/dem-service'
        
        print('values', values)

        for file in values['FileNames']:
            print('file', file)
            download_path = os.path.join(local_path, file)
            
            file_dict = {'FileName': file}

            response = requests.get(url, params=file_dict)

            open(download_path, 'wb').write(response.content)

            print(response.url)
            
            print(response)
    
    except Exception as e:
        print(e)
        raise e
In [104]:
DEM_get(values, local_path)
values {'FileNames': ['result_raster_dem_20200227192410517090.tif']}
file result_raster_dem_20200227192410517090.tif
https://ag-analytics.azure-api.net/dem-service/download_dem?FileName=result_raster_dem_20200227192410517090.tif
<Response [200]>
In [ ]: