Show HN: Vector Charts – Add Nautical Charts to Your Web App
Hi HN! I'm making Vector Charts, an API product which allows nautical charts to easily be added to web apps. Vector Charts provides a Vector Tile API that you can use to embed nautical charts into any web-based map. We're putting a lot of work into styling and modernizing the map experience so anyone building maritime-related web apps can use charts.
"Nautical Charts" are maritime-specific maps that show the structure of the ocean environment, above and below water. Among other info, they show bathymetry contours, which help avoid boats running aground. They're relied on by both professional and recreational mariners to navigate safely and are a mature technology that's been around for many years.
I've been working in the marine software space for years, and adding nautical charts to web applications is a frequent requirement. But there are a few problems with existing SDKs: First, they're generally too expensive for small web apps, due to the fact that they're designed for safety-critical user interfaces used for navigation on commercial vessels. Second, existing options generally render as raster images, which leads to a blurry or pixelated and cluttered view when used inside a web-based map.
Vector Charts focuses on non-safety-critical web experiences that might benefit from nautical charts, which is a growing segment of the market. We want to be the "Mapbox for Nautical Charts" - The easiest & highest quality option to add nautical charts to a map.
A few examples of where this is useful: A live tracking map for a sailboat race, a watersports logging app, or an unmanned surface vessel C2 software. Anywhere that you're building a web app for a marine setting, nautical charts are likely a better background layer than satellite.
Right now I'm in testing this with customers, improving styling & data quality - So there might be data inconsistencies or missing layers. But the API is live and you can play with it now using the example app!
Charts are hand-authored by government hydrography offices and encoded into a format called "S-57". These files contain spatial data for a small area, and different charts cover different zoom levels. This presents a few problems for web apps: Charts of different intended zoom levels cover other data, the full chart dataset is too large to stream, and charts aren't divided into xyz tiles cleanly.
To solve this, I run a bespoke pipeline which processes all nautical chart data into an internal format using PostGIS. From there, I merge all chart data together, overlaying higher accuracy charts over the lower accuracy charts. The pipeline performs a lot of data validation & reconciliation to remove bad data, then simplifies & renders to vector tiles.
PostGIS is critical to this - I started by using a bunch of python geometry manipulation libraries, and slowly shifted more and more of the processing into SQL queries as I realized how fast and intuitive it is.