Production System
John Deere Data Integration Platform
A production integration that turns authenticated machine and operation data into validated, analytics-ready spatial datasets.
Selected Work
Case studies spanning cloud integration, spatial ETL, remote sensing, analytical platforms and agricultural decision support. Select a system to explore the problem, architecture, responsibility and impact.
Production System
A production integration that turns authenticated machine and operation data into validated, analytics-ready spatial datasets.
Production System
An event-driven pipeline that validates, transforms and spatially assigns incoming soil-sample files.
Production System
A scheduled data platform that produces dashboard-ready agricultural weather and growing-condition datasets.
Operational Workflow
Boundary-driven soil-data retrieval and normalization for repeatable agricultural analysis.
Operational Workflow
A remote-sensing workflow that converts multi-year yield history into equipment-ready planting alternatives.
Operational Workflow
Spatial soil analysis and prescription generation for faster, more targeted fertilizer planning.
Active Platform
A full-stack geospatial agricultural platform connecting field data, cloud processing and decision-support workflows.
Technical Highlight
A recoverable synchronization pattern connecting transactional spatial data with analytical warehouse layers.
Open Source
Beyond production systems, an open-source library for geospatial experimental design — published to PyPI and built in the open.
Experimental design for geospatial analytics: splits polygon geometry into treatment-plot layouts — circular and Latin-square designs — for agricultural and scientific field trials, then hands the result off as a GeoDataFrame ready for spatial modeling.
pip install geoshapes
import shapely, geopandas
from geoshapes import splitShape
pointLocation = shapely.geometry.Point(0, 0)
def getTreatment(radius, innerClip, stepWise, skip=4):
mergedData = geopandas.GeoDataFrame()
for i in range(innerClip, radius, stepWise):
circle = splitShape.splitCircle(
geoms=pointLocation, circleRadius=i * stepWise,
incrementDegree=20, clipInterior=True,
innerWidth=i, getGeom='Both',
)
kept = circle[::int(skip)]
for treatment, geom in enumerate(kept, start=1):
mergedData = mergedData.append(
{'geometry': geom, 'treatment': treatment},
ignore_index=True,
)
mergedData.plot(color=treatment_colors(mergedData.treatment), edgecolor='k', linewidth=2)
return mergedData
# innerClip starts past the cramped center ring; each arm keeps
# the same treatment id across all 3 remaining radii (3 replications)
plots = getTreatment(radius=3000, innerClip=1000, stepWise=800, skip=4)Layers splitCircle over multiple radii to build a radial treatment layout — 9 treatments, each replicated 3 times along its own arm, composed from the same building block.
import string, shapely
import geoshapes, geopandas
point = shapely.geometry.Point(0, 0)
plots = geoshapes.splitShape.splitCircle(
geoms=point,
circleRadius=500,
incrementDegree=45,
clipInterior=True,
innerWidth=100,
)
gdf = geopandas.GeoDataFrame(
geometry=plots, crs='EPSG:3857'
)
gdf['group'] = gdf.index.map(
lambda i: string.ascii_uppercase[i]
)
gdf.plot(
column='group', cmap='tab20', edgecolor='k'
)Splits a circular field into labeled treatment plots, ready for a randomized trial design.
import string, shapely
import geoshapes, geopandas
point = shapely.geometry.Point(0, 0)
latinShape = geoshapes.splitShape.splitLatin(
point, 25
)
gdf = geopandas.GeoDataFrame(
geometry=latinShape, crs='EPSG:4326'
)
gdf['group'] = gdf.index.map(
lambda i: string.ascii_uppercase[i]
)
gdf.plot(
column='group', cmap='tab20',
edgecolor='k', linewidth=9,
)Splits a square field into a Latin-square treatment layout, the standard design for controlling row/column variation in a field trial.
Discuss the WorkOpen to Conversations
Open to conversations about geospatial engineering, cloud data platforms, GeoAI and spatial analytics.