Depth estimation from Navionics nautical chart tile color analysis. Returns approximate water depth for any coordinate worldwide.
GET https://sounder.windward.parts/?lat={lat}&lon={lon}
| Param | Type | Description |
|---|---|---|
lat | float | Latitude (-90 to 90) |
lon | float | Longitude (-180 to 180) |
{
"depth": 14.2, // meters, 0 for land, -1 for >100m
"seabed": "unknown",
"isLand": false,
"isWater": true,
"source": "ocr" // "ocr" = precise sounding, "color" = estimated
}
| Value | Meaning |
|---|---|
0 | Land or intertidal zone |
1 - 100 | Estimated depth in meters |
-1 | Deep water (>100m, unshaded on chart) |
curl "https://sounder.windward.parts/?lat=12.48&lon=-61.45"
async function getDepth(lat, lon) {
const res = await fetch(
`https://sounder.windward.parts/?lat=${lat}&lon=${lon}`
);
return res.json();
}
// Usage
const data = await getDepth(12.48, -61.45);
console.log(data.depth, data.isLand);
import requests
def get_depth(lat, lon):
r = requests.get(
"https://sounder.windward.parts/",
params={"lat": lat, "lon": lon}
)
return r.json()
# Usage
data = get_depth(12.48, -61.45)
print(f"Depth: {data['depth']}m, Land: {data['isLand']}")
import requests
from concurrent.futures import ThreadPoolExecutor
points = [
(12.48, -61.45), # Carriacou
(12.44, -61.43), # South of Carriacou
(12.50, -61.48), # West coast
]
def query(coord):
lat, lon = coord
r = requests.get(
"https://sounder.windward.parts/",
params={"lat": lat, "lon": lon}
)
return {**r.json(), "lat": lat, "lon": lon}
with ThreadPoolExecutor(max_workers=5) as pool:
results = list(pool.map(query, points))
for r in results:
print(f"({r['lat']}, {r['lon']}): {r['depth']}m")
Depth is estimated from Navionics chart tile colors at zoom level 14. Accuracy depends on chart coverage and color band resolution. Best for relative depth comparison rather than precise navigation.
Rate limiting: None currently. Tiles are cached server-side. Please be reasonable with batch queries.