Crop Data Layers

Crop Land Data Layers, also known as CDLs, are published by USDA and provide estimates of historical crops cover.

In [25]:
import requests
import json
import time
from pandas.io.json import json_normalize
import requests, zipfile, io
import geopandas as gpd
%matplotlib inline
import pandas as pd

API Details

Request URL:https://ag-analytics.azure-api.net/CroplandDataLayers/get[?year][&inputShape][&env:outSR]

Request parameters

year Year of desired result.

inputShape (ESRI Polygon shape): The shape information for field in esriGeometryPolygon format. Standard open source JavaScript front-end libraries (e.g., Leaflet) can be used to structure the shape

env:outSR (optional) Output Spatial Reference. Return features in the specified spatial reference by supplying specific wkid (eg. 4326).

In order to get Ocp-Apim-Subscription-Key, please click on this link https://analytics.ag/Session/SignInToAPIPayment

Request Parameters

In [26]:
year=2016
inputShape={"geometryType":"esriGeometryPolygon","features":[{"geometry":{"rings":[[[-89.045774,43.730605],[-89.04577,43.730488],[-89.045722,43.729998],[-89.045789,43.729653],[-89.045661,43.72961],[-89.045635,43.729782],[-89.045644,43.730045],[-89.045653,43.730308],[-89.045651,43.730607],[-89.041228,43.730676],[-89.041171,43.728908],[-89.041111,43.727076],[-89.042892,43.727044],[-89.044665,43.727018],[-89.046178,43.726999],[-89.046237,43.730597],[-89.045774,43.730605]]],"spatialReference":{"wkid":4326}}}]}
env=4326
f="json"
headers={'Ocp-Apim-Subscription-Key': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}

API Function

In [27]:
def get_crop_data_layers(year,inputShape,env,headers,f):
    try:
        url = "https://ag-analytics.azure-api.net/CroplandDataLayers/get?year={}&inputShape={}&env:outSR={}&f={}".format(year,inputShape,env,f)
     
        response = (requests.get(url,headers=headers).text)
        print(response)
       
        response_json = json.loads(response)
        time.sleep(0.5)
        return response_json
    
    except Exception as e:
        raise e

Calling API Function

In [28]:
crop_layer=get_crop_data_layers(year,inputShape,env,headers,f)
{"results":[{"paramName":"output2","dataType":"GPFeatureRecordSetLayer","value":{"displayFieldName":"","geometryType":"esriGeometryPolygon","spatialReference":{"wkid":4326,"latestWkid":4326},"fields":[{"name":"FID","type":"esriFieldTypeOID","alias":"FID"},{"name":"OBJECTID","type":"esriFieldTypeInteger","alias":"OBJECTID"},{"name":"Shape_Leng","type":"esriFieldTypeDouble","alias":"Shape_Leng"},{"name":"FID_55047","type":"esriFieldTypeInteger","alias":"FID_55047"},{"name":"ID","type":"esriFieldTypeInteger","alias":"ID"},{"name":"GRIDCODE","type":"esriFieldTypeInteger","alias":"GRIDCODE"},{"name":"acres","type":"esriFieldTypeSingle","alias":"acres"},{"name":"Shape_Length","type":"esriFieldTypeDouble","alias":"Shape_Length"},{"name":"Shape_Area","type":"esriFieldTypeDouble","alias":"Shape_Area"}],"features":[{"attributes":{"FID":1,"OBJECTID":0,"Shape_Leng":0,"FID_55047":73907,"ID":73909,"GRIDCODE":5,"acres":0.3908457,"Shape_Length":0.00470772175208636,"Shape_Area":1.7669246152478925e-007},"geometry":{"rings":[[[-89.044382688810003,43.730626786397124],[-89.042100581776367,43.730662387858956],[-89.042116401750491,43.730507290778917],[-89.044382688810003,43.730626786397124]]]}},{"attributes":{"FID":2,"OBJECTID":0,"Shape_Leng":0,"FID_55047":74652,"ID":74654,"GRIDCODE":195,"acres":7.037323E-03,"Shape_Length":0.00046508759373905964,"Shape_Area":3.1813113673726471e-009},"geometry":{"rings":[[[-89.041159916996548,43.728569612397735],[-89.041189145862347,43.72857115383573],[-89.041167059412203,43.728787671913608],[-89.041159916996548,43.728569612397735]]]}},{"attributes":{"FID":3,"OBJECTID":0,"Shape_Leng":0,"FID_55047":74964,"ID":74966,"GRIDCODE":176,"acres":0.1494469,"Shape_Length":0.001786589958342679,"Shape_Area":6.7558763463230609e-008},"geometry":{"rings":[[[-89.041159916996548,43.728569612397735],[-89.041133381600218,43.727759402374545],[-89.041271209898355,43.727766672493999],[-89.041189145862347,43.72857115383573],[-89.041159916996548,43.728569612397735]]]}},{"attributes":{"FID":4,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75151,"ID":75153,"GRIDCODE":141,"acres":0.1145833,"Shape_Length":0.00092455194986499072,"Shape_Area":5.1797739499299292e-008},"geometry":{"rings":[[[-89.041124536767938,43.727489332366872],[-89.041115691935602,43.727219263258462],[-89.041325917457073,43.727230352798585],[-89.041298563677742,43.727498512646321],[-89.041124536767938,43.727489332366872]]]}},{"attributes":{"FID":5,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75249,"ID":75251,"GRIDCODE":36,"acres":0.1862273,"Shape_Length":0.0012004963271671683,"Shape_Area":8.4184377518976384e-008},"geometry":{"rings":[[[-89.042093268489509,43.727058351162043],[-89.042468858650864,43.727051602649397],[-89.042444610230518,43.727289360915336],[-89.04207171263937,43.727269692742198],[-89.042093268489509,43.727058351162043]]]}},{"attributes":{"FID":6,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75250,"ID":75252,"GRIDCODE":36,"acres":0.1424093,"Shape_Length":0.0010942792140080011,"Shape_Area":6.4376349666958007e-008},"geometry":{"rings":[[[-89.041325917457073,43.727230352798585],[-89.041342085468841,43.727071848187279],[-89.041717677428835,43.727065099674689],[-89.041698815048221,43.727250023669683],[-89.041325917457073,43.727230352798585]]]}},{"attributes":{"FID":7,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75251,"ID":75253,"GRIDCODE":176,"acres":0.0736934,"Shape_Length":0.00074430718585786939,"Shape_Area":3.3313220693957113e-008},"geometry":{"rings":[[[-89.041115691935602,43.727219263258462],[-89.041111000172464,43.727076000357158],[-89.041342085468841,43.727071848187279],[-89.041325917457073,43.727230352798585],[-89.041115691935602,43.727219263258462]]]}},{"attributes":{"FID":8,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75314,"ID":75316,"GRIDCODE":36,"acres":0.2830474,"Shape_Length":0.0018407183332032409,"Shape_Area":1.2795192077266389e-007},"geometry":{"rings":[[[-89.045082239054068,43.727158847702697],[-89.045097151612197,43.727012573871264],[-89.045847915548848,43.727003145378887],[-89.045828035135685,43.727198166062578],[-89.045082239054068,43.727158847702697]]]}},{"attributes":{"FID":9,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75315,"ID":75317,"GRIDCODE":176,"acres":0.2019529,"Shape_Length":0.0017421166552683504,"Shape_Area":9.1293027541047987e-008},"geometry":{"rings":[[[-89.044336443871771,43.727119524846273],[-89.044346319327133,43.727022674157126],[-89.044665000389443,43.72701800038044],[-89.045097151612197,43.727012573871264],[-89.045082239054068,43.727158847702697],[-89.044336443871771,43.727119524846273]]]}},{"attributes":{"FID":10,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75316,"ID":75318,"GRIDCODE":36,"acres":6.988524E-02,"Shape_Length":0.00091832622071283789,"Shape_Area":3.1591692910074159e-008},"geometry":{"rings":[[[-89.043963546280622,43.727099862069053],[-89.043970855970201,43.727028179806723],[-89.044346319327133,43.727022674157126],[-89.044336443871771,43.727119524846273],[-89.043963546280622,43.727099862069053]]]}},{"attributes":{"FID":11,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75317,"ID":75319,"GRIDCODE":37,"acres":4.901174E-02,"Shape_Length":0.00086772664260894358,"Shape_Area":2.2155801806149515e-008},"geometry":{"rings":[[[-89.043590649588793,43.727080198392514],[-89.04359539261327,43.727033685456263],[-89.043970855970201,43.727028179806723],[-89.043963546280622,43.727099862069053],[-89.043590649588793,43.727080198392514]]]}},{"attributes":{"FID":12,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75318,"ID":75320,"GRIDCODE":121,"acres":2.813755E-02,"Shape_Length":0.00081712608204109825,"Shape_Area":1.2719606595220444e-008},"geometry":{"rings":[[[-89.043217752896965,43.727060533816655],[-89.043219929256281,43.72703919110586],[-89.04359539261327,43.727033685456263],[-89.043590649588793,43.727080198392514],[-89.043217752896965,43.727060533816655]]]}},{"attributes":{"FID":13,"OBJECTID":0,"Shape_Leng":0,"FID_55047":75319,"ID":75321,"GRIDCODE":122,"acres":7.503652E-03,"Shape_Length":0.00065642929077744275,"Shape_Area":3.3920319827837809e-009},"geometry":{"rings":[[[-89.042901589936378,43.727043859486571],[-89.043219929256281,43.72703919110586],[-89.043217752896965,43.727060533816655],[-89.042901589936378,43.727043859486571]]]}},{"attributes":{"FID":14,"OBJECTID":0,"Shape_Leng":0,"FID_55047":76150,"ID":76152,"GRIDCODE":1,"acres":38.2266,"Shape_Length":0.020140113552389156,"Shape_Area":1.7280882737369862e-005},"geometry":{"rings":[[[-89.041167059412203,43.728787671913608],[-89.041189145862347,43.72857115383573],[-89.041271209898355,43.727766672493999],[-89.041133381600218,43.727759402374545],[-89.041124536767938,43.727489332366872],[-89.041298563677742,43.727498512646321],[-89.041325917457073,43.727230352798585],[-89.041698815048221,43.727250023669683],[-89.041717677428835,43.727065099674689],[-89.042093268489509,43.727058351162043],[-89.04207171263937,43.727269692742198],[-89.042444610230518,43.727289360915336],[-89.042468858650864,43.727051602649397],[-89.042892000465429,43.72704399978079],[-89.042901589936378,43.727043859486571],[-89.043217752896965,43.727060533816655],[-89.043590649588793,43.727080198392514],[-89.043963546280622,43.727099862069053],[-89.044336443871771,43.727119524846273],[-89.045082239054068,43.727158847702697],[-89.045828035135685,43.727198166062578],[-89.045847915548848,43.727003145378887],[-89.046178000014663,43.726999000403623],[-89.046237000037479,43.730596999951615],[-89.045774000269887,43.730605000320566],[-89.045770000085383,43.730488000321031],[-89.045721999670491,43.729998000207615],[-89.045789000062257,43.729653000485655],[-89.045661000454743,43.729610000301307],[-89.045635000155073,43.729782000139267],[-89.045643999670801,43.730044999677034],[-89.045653000085849,43.730308000114178],[-89.045650999993597,43.730607000412817],[-89.044382688810003,43.730626786397124],[-89.042116401750491,43.730507290778917],[-89.042100581776367,43.730662387858956],[-89.041228000172055,43.730675999997459],[-89.041171000241434,43.728908000304045],[-89.041167059412203,43.728787671913608]]]}}],"exceededTransferLimit":false}}],"messages":[]}

Displaying Map

In [29]:
#saving the respons eof api in geojson format

file=open('./jsonfiles/cropdatalayers.json','w')
file.write(json.dumps(crop_layer['results'][0]["value"]))
file.close()


# Helper functions for creating shapefiles

def post_converttogeojson(requestbody):
    try:
        url = "https://ogre.adc4gis.com/convert"
     
        response = (requests.post(url,files=requestbody).text)
        
        return response

    except Exception as e:
        raise e
def post_converttoshapefile(requestbody):
    try:
        url = "https://ogre.adc4gis.com/convertJson"
     
        response = (requests.post(url,data=requestbody))
        
        z = zipfile.ZipFile(io.BytesIO(response.content))
        z.extractall("./shapefiles/")
        
        time.sleep(0.5)
        return response
    
    except Exception as e:
        raise e
    
In [30]:
requestbody={'upload':open('./jsonfiles/cropdatalayers.json','rb')}
# Function call to convert json to geojson
cropdata_geojson=post_converttogeojson(requestbody)

requestbody={'json':cropdata_geojson,'skipFailures':"on"}
#function call to creatr shapefile from geojson 
post_converttoshapefile(requestbody)

# Reading a shapefile and displaying the map
gdf = gpd.read_file('./shapefiles/OGRGeoJSON.shp')


grid_code_mappings=pd.read_csv("cropnames_gridcodes_mappings.csv")

grid_code_mappings.set_index('Code',inplace=True)


gdf['CropName']=gdf['GRIDCODE'].map(grid_code_mappings.to_dict()['CropName'])

gdf.plot(column='CropName', cmap=None,figsize=(10, 10),legend=True)
gdf.head()
Out[30]:
FID OBJECTID Shape_Leng FID_55047 ID GRIDCODE acres Shape_Le_1 Shape_Area geometry CropName
0 1 0 0 73907 73909 5 0.390846 0.004708 0.0 POLYGON ((-89.04438268881 43.73062678639712, -... Soybeans
1 2 0 0 74652 74654 195 0.007037 0.000465 0.0 POLYGON ((-89.04115991699655 43.72856961239773... HerbaceousWetlands
2 3 0 0 74964 74966 176 0.149447 0.001787 0.0 POLYGON ((-89.04115991699655 43.72856961239773... Grassland/Pasture
3 4 0 0 75151 75153 141 0.114583 0.000925 0.0 POLYGON ((-89.04112453676794 43.72748933236687... DeciduousForest
4 5 0 0 75249 75251 36 0.186227 0.001200 0.0 POLYGON ((-89.04209326848951 43.72705835116204... Alfalfa