Whenever I've stood on a beach, staring at the expanse of ocean in front of me, my mind inevitably wanders to what's across the other side. After a journey of thousands of miles across featureless water, where would you end up? I've seen a few treatments of this concept, but to date none have been fully satisfying. By far, the biggest mistake is taking 'across' to mean a fixed bearing east or west, completely ignorant of the curvature of the Earth. Most people, when looking out from the US East Coast, think they're "looking at" Europe, when in fact the direction of Europe is much farther northeast, and mostly blocked by Canada; you're actually looking at Africa. That is to say: starting due east from America, a straight line along the curved surface of the Earth will hit Africa. Nevermind that most of the US East Coast faces rather south of east anyway… Other attempts do a better job, but even then feel somewhat lacking. Islands and archipelagos are overlooked, even though they may completely blot out the paths to farther continents. I want to see every scrap of rock that I may run aground on. And having a sense of relative distance would be nice, too. And lastly, to my knowledge, every previous attempt has been created manually by hand. So I created Landfall. Computing landfall Step one is to compute the landfall from a given point in all directions. This is achieved through an algorithm that determines the distance to land at many evenly spaced bearings. With enough samples (default settings compute about 50 samples per degree) you can get a smooth coastline curve of the land across the ocean from you. The algorithm is designed such that small rocks or islets are never 'missed', even if they are narrower than the spacing of samples. In finding the distance to land along a given bearing, we factor in the curvature of the (assumed spherical) Earth, as well as oddities like crossing beyond the antipode (more than halfway around the world) before hitting land. In addition to distance, the country/state of the land hit is also noted. With efficient spatial indexing, a single landfall 'viewshed' can be computed in under 30 seconds. Source data The source data for both coastline and political boundaries is extracted from OpenStreetMap. The coastline extract can basically be used as-is (with a few corrections that get automatically applied). The political data was much messier (failing to include outlying islands, not exactly lining up with adjacent countries, etc.), so has been curated into a cleaned dataset that lives with the project. One interesting side-effect of this project was exposing many phantom islands in OpenStreetMap that didn't actually exist. Much of OSM's coastline data comes from automated extraction of satellite imagery, which obviously will make some mistakes. On the normal map such scraps of land are nearly imperceptible, but in a landfall perspective they jump out like night and day. (I have since made edits to remove these false islands.) Visualization Now that we've computed the raw data, how best to visualize it? The standard answer is: superimposed on a map. Such a view is indeed eye-opening (and exports to web map and Google Earth are provided for this reason), but it still feels wanting. Straight lines become oscillating curves on a conventional map projection, which obscures the original direction of travel from the source point. It's also hard to appreciate both the very near and the very far in the same view. To truly capture that 'looking out upon the ocean' feeling, I wanted a first-person view. So I created a panorama-style rendering that imagines you could look beyond the horizon. Direction of view changes linearly as you scan left and right. Nearby land appears as tall massifs and farther land recedes into the distance. Sudden changes in distance to land are marked by 'creases' to add texture. Try to perceive it as a 3D perspective scene. Color-coding is also a key element of making sense of what you're looking at. Admin areas are colored automatically. Labeling, however, is manual work at this time.