# Load the libraries
import requests
import fiona
import geopandas as gpd
from requests.auth import HTTPBasicAuth
# Define the API call parameters
="43.60990243471787"
Latitidue="13.393299188945429"
Longitude
# Define the url of the API
= "https://www.api.automaticfarmsolutionwebapp.com/AFS/AIBoundaries?lat="+Latitidue+"&longi="+Longitude
url
# Set the useremail & Password
="useremail"
USEREMAIL="apikey""
APIKEY
# Path to the GeoJSON file
= "county.geojson"
file_path_to_geojson
# Read the GeoJSON file contents
with open(file_path_to_geojson, "r") as file:
= file.read()
geojson_data
# Set the headers for the request
= {
headers "Content-Type": "application/json"
}
# Make the POST request with the GeoJSON data as the request body
= requests.post(url,
response =geojson_data,
data=headers,
headers=HTTPBasicAuth(USEREMAIL, APIKEY))
auth
= bytes(response.content)
b
with fiona.BytesCollection(b) as f:
= f.crs
crs = gpd.GeoDataFrame.from_features(f, crs=crs)
gdf
# Visualize the data
"Zone") gdf.explore(
AI Field Boundaries
In this part we will focus on the “AFS/AIBoundaries” endpoint, which allow the user to get the AI generated boundary of the field in geojson format
Python
in order to use the endpoint you have to set the following parameter:
- USEREMAIL
- APIKEY
- lat, latitude coordinate in WGS84 of the field (e.g. 43.60990243471787)
- longi, longitude coordinate in WGS84 of the field (e.g. 13.393299188945429)
R
in order to use the endpoint you have to set the following parameter:
- USEREMAIL
- APIKEY
- lat, latitude coordinate in WGS84 of the field (e.g. 43.60990243471787)
- longi, longitude coordinate in WGS84 of the field (e.g. 13.393299188945429)
# Load the libraries
library(tictoc)
library(httr)
library(geojsonio)
library(mapview)
# Define the API call parameters
="43.60990243471787"
Latitidue="13.393299188945429"
Longitude
# Define the url of the API
= paste0("https://www.api.automaticfarmsolutionwebapp.com/AFS/AIBoundaries?lat=",Latitidue,"&longi=",Longitude)
url
# Set the useremail & Password
="useremail"
USEREMAIL="apikey"
APIKEY
# Path to the GeoJSON file
= "county.geojson"
file_path_to_geojson
# Get the start time to API Call
tic()
# Make the POST request
<- POST(
api_call
url,::authenticate(
httruser = Sys.getenv(USEREMAIL),
password = Sys.getenv(APIKEY)
),body=httr::upload_file(file_path_to_geojson)
)
# Print out the seconds needed to create the prescription map
print("The API needed:")
[1] "The API needed:"
toc()
159.5 sec elapsed
# Visualize the prescription map
<- content(api_call, as = "text", type = "application/geo+json")
prscription_map <-geojson_sp(prscription_map)
prscription_mapmapview(prscription_map, layer.name="AI Segmentation Map")
Node.js
in order to use the endpoint you have to set the following parameter:
- USEREMAIL
- APIKEY
- lat, latitude coordinate in WGS84 of the field (e.g. 43.60990243471787)
- longi, longitude coordinate in WGS84 of the field (e.g. 13.393299188945429)
// Load Libraries
const fs = require('fs');
const axios = require('axios');
// Set the useremail & passowrd
const useremail = 'XXXXXXXXXXXXX';
const apikey = 'XXXXXXXXXXXXX';
// Set the API Parameter
const Latitidue="43.60990243471787";
const Longitude="13.393299188945429";
// Set API Url
const api_url='https://www.api.automaticfarmsolutionwebapp.com/AFS/AIBoundaries?';
// Set endpoint Url
const apiEndpoint = api_url.concat("lat=", Latitidue, "&longi=", Longitude);
// Set path to load the geojson to send as body of POST request to the API
const file_path_to_geojson = './county.geojson';
// Set path to save the geojson prescription map
const outputFilePath = './result.geojson';
async () => {
(try {
const geojsonContent = await fs.promises.readFile(file_path_to_geojson, 'utf8');
const geojsonObject = JSON.parse(geojsonContent);
const authHeader = `Basic ${Buffer.from(`${useremail}:${apikey}`).toString('base64')}`;
const response = await axios.post(apiEndpoint, geojsonObject, {
headers: {
'Content-Type': 'application/json',
'Authorization': authHeader
};
})
const resultGeoJSON = response.data;
console.log('Answer From the API:', resultGeoJSON);
await fs.promises.writeFile(outputFilePath, JSON.stringify(resultGeoJSON, null, 2), 'utf8');
catch (err) {
} console.error('Error:', err.message);
}; })()
Java
Work in progress