Convert, analyze, reproject, run terrain analysis, and deploy SAM2 segmentation on satellite imagery — all through a single, developer-friendly API. Built on top of GDAL, GeoPandas, and NVIDIA GPUs.
# Submit a job: convert a Shapefile to GeoJSON curl -X POST https://api.mapkmltools.com/v1/jobs \ -H "Authorization: Bearer gm_YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "action": "convert", "object_key": "inputs/roads.shp", "params": { "target_format": "GeoJSON" } }' # Poll for the result curl https://api.mapkmltools.com/v1/jobs/JOB_ID \ -H "Authorization: Bearer gm_YOUR_API_KEY"
GeoMiner handles the heavy lifting so you can focus on building your product.
Convert between Shapefile, GeoJSON, GeoPackage, KML, and GeoTIFF. Raster COG output included.
Reproject any vector or raster to any CRS — EPSG:4326, EPSG:3857, or custom proj strings.
Buffer, intersect, union, and spatial join operations with automatic CRS alignment.
Deep metadata extraction and band statistics (min/max/mean/std) for rasters. Feature counts and area for vectors.
Generate slope maps (degrees) and hillshade renders from DEM rasters using numpy gradient.
Describe your GIS problem in plain English. Powered by Llama 3.1-70B via NVIDIA NIM, it returns an executable workflow JSON.
Calculate NDVI, NDWI, and NDBI spectral indices from multi-band satellite imagery in a single API call.
Generate XYZ tile pyramids from GeoTIFF and upload directly to Cloudflare R2. Returns a ready-to-use tile URL template.
SAM2 segmentation and GroundingDINO object detection on satellite imagery. Returns geographic GeoJSON polygons/bboxes.
All GeoMiner operations are asynchronous. You submit a job and poll for the result. This lets you process massive files (500MB+) without timeouts.
progress (0–100)output.download_url contains a 1-hour presigned R2 URLoutput.error contains the reason// 1. Submit job const { output: { job_id } } = await fetch( 'https://api.mapkmltools.com/v1/jobs', { method: 'POST', headers: { Authorization: `Bearer ${API_KEY}` }, body: JSON.stringify({ action: 'terrain', object_key }) } ).then(r => r.json()); // 2. Poll until done let result; while (true) { result = await fetch( `https://api.mapkmltools.com/v1/jobs/${job_id}`, { headers: { Authorization: `Bearer ${API_KEY}` } } ).then(r => r.json()); if (['completed', 'failed'].includes(result.output.status)) break; await new Promise(r => setTimeout(r, 2000)); } console.log(result.output.download_url); // ← your file
GeoMiner supports two authentication methods depending on how you integrate:
Request a key to get a gm_ prefixed API key. Pass it in the Authorization header:
Authorization: Bearer gm_YOUR_API_KEY
If you are a signed-in mapkmltools.com user, pass your Firebase ID token directly:
Authorization: Bearer eyJhbGciOiJ...
Start free. Scale as you grow. All plans include access to the full API surface.