"Viewsheds" of any location can be calculated and matched with photographs using "GeoImageViewer", an application I wrote a couple of years ago. Any feature in the image can be interactively identified in a mapview and vice versa, including the boundary of the viewshed. As has been mentioned in the comments, it is essential to include atmospheric refraction in the calculation, at least for distances above ~100km.
I'm the author of the post. Do you have any knowledge about how refraction can vary? I was wondering about calculating the world twice, once with a lower refraction bound and then again with an upper.
Atmospheric refraction is due to the vertical gradients of atmospheric pressure, temperature, and composition of the atmosphere, all of which are usually not precisely known, and which vary with time, so one gets larger lines of sights at certain times. For my application I used the standard formulas for astronomical refraction (-> many weblinks) with constant medium gradients. If I recall correctly this results in ~100m height correction for features in 100km distance and ~400m in 200km distance (features appear higher than without atmospheric refraction). For your application it would make sense to use two extreme values for the gradients to get maximum and minimum, as you suggested.
Right, yes variance over time is what I was referring to. I did a bit of research and indeed there seems to be some evidence backed minimum and maximum values I can plug in. But it's quite a variance! Now I'm thinking I should do min, max and average.
This looks amazing! I recently moved to an apartment with a good view out the window, so I was excited to try this to identify some of the more distant hills I can see. Alas, it seems to have developed some bugs in the 4 years since the last commit… when I tried clicking in ‘Edit Mode’ to select a location, nothing happened and I couldn’t continue. Any chance you could look into updating this application?
That's a cool thing to track, I've been surprised by the places I've seen the Seattle skyline reflected on the water near sundown. No crazy distances, but there's a small time period where it flashes into view.
On clear days from the Vosges mountains you can easily see the French Alps (and even part of Austrian Alps if lucky), and especially the Mont Blanc. e.g places like the Ballon D'Alsace, and even all the way up north to Donon or Nideck+Schneeberg†.
Quite a bit shorter in distance (between 200 and 300km depending on where you sit) but visually stunning.
I seem to recall in older times there used to be some light semaphore infrastructure to communicate over these distances.
Those are great pictures. And I've been near there! I've seen the Alps from near Saignelégier then we drove through Plombieres-les-Bains on the way north.
On certain clear winter days I bet the mountains look bigger due to lensing.
I'm sure it's nearly an academic distinction, but:
> Basically, for any given region, we find its highest point and assume that there is a perfectly placed sibling peak of the same height that is mutually visible.
Shouldn't you always add 335km to the horizon distance to account for the possibility of Everest (i.e. a taller sibling peak) being on the other side of the horizon?
Author here. I really appreciate this question because it's the entire reason I wrote the post. I feel like this is a unique problem and so I'm sure I'm not considering all the possibilities.
I _think_ your suggestion is covered by the fact that I'm basing the size of the tile on the single highest point that it contains. The steps are:
1. Take any point and calculate the furthest theoretical distance it could see if there were another point at just the perfect distance away for mutual visibility. Note how there could of course be an Everest, but I don't check because step 2 should solve that.
2. Based on that furthest theoretical distance I create a tile of that exact width around the point and then check to see what the new highest point is within that tile _and_ its surroundings. "Surroundings" here means a border region around the tile of the same width as the tile itself. These surroundings don't get viewsheds calculated for them, they're just auxiliary data.
3. If a higher point is found, then increase the width based on that new highest point and repeat step 2. If no higher point is found then the tile is ready.
I've been wondering about using OpenStreetMap data to achieve something similar, like getting the longest uninterrupted (by buildings) distance between two viewpoints (the Nikon Coolpix P900/P1000/P1100 cameras or a telescope are pretty good for this due to their extreme focal lengths), or maybe something like "most ice cream shop dense area" https://wiki.openstreetmap.org/wiki/Key:amenity
Putting the typical airplane cruise altitude (10km) into the distance to horizon calculator https://www.ringbell.co.uk/info/hdist.htm results in a "reverse" distance of 357km to the horizon. So that's how far typical airplanes can be seen when standing at sea level!
I was recently looking into this for roguelike-like visibility calculations. The term I came across was "isovist" not "viewshed", but they seem identical? The former appears to be used a lot in architecture.
Calculating a 2d isovist is (relatively) simple, for 3d it seems much more complex. Is this simplified by the fact that it's dealing with a height map?
A kid once asked me “How far can humans see?”. I told him you can see the Andromeda Galaxy 2.5 million light years away, but when he said he meant on Earth I didn’t know the answer.
It is interesting to also consider dry land which is below sea level.
"For an average height person standing on a beach, their horizon is around 4.5km away."
For an average height person standing at sea level, near a large depression such as the Dead Sea, for example, you may be able to see land at a much greater distance.
I doubt if this factor would impact your findings for the longest sight lines on Earth, but perhaps for some local findings.
Also, applying the same concept to other planets has some surprising results. The tallest mountain in the solar system, Olympus Mons, has very gentle slopes. So gentle that from the peak all you can see is Olympus Mons itself.
Yes! These are very much the kinds of questions I'm interested in. The search for the single longest line of sight on Earth is just an excuse to play around in this space.
Oh that project is right up my alley, as I did the same! Back in 2021, for fun, I wrote an algorithm to find the longest sightline on earth. And I did find a previously undiscovered sightline.
My code was relatively unoptimized, it ran for 95 days on an 8-core 16-thread AMD Ryzen 5750G to crunch all the data. I have never published my code or results. I should really do it...
I downloaded a digital earth model of about 30 gigabytes from http://www.viewfinderpanoramas.org/Coverage%20map%20viewfind... which had a resolution of 3 seconds, so I had the elevation of each 90x90 meters "tile" of land. I wrote a simple algo in C that: finds potential viewpoints (mountain peaks or plateaus above a minimum ), calculates the longest sightline 360° around you, taking into account an atmospheric refraction coefficient (I used 0.13 which seems to be a default used by some panorama tools like https://www.udeuschle.de). It's really basic trigonometry: look one tile ahead of you, and the next one, etc, until you find the one with the highest vertical angle of view. Stop one sightline exploration when reaching a certain maximum distance (750 km in my implementation) when it becomes mathematically impossible to find a visible tile beyond this distance. And I found the longest sightline:
In Kyrgyzstan from Pik Dankova (41.059167,77.683333) which is at 5977.5 meters (in my DEM data), you can see 538.1 km into China if you look toward bearing 169.7° (roughly south) as you see some distant minor peak at 36.295364,78.75593 which is 6444.0 meters high. However this sightline is already known. But it's only theoretical. No one ever encountered good enough atmospheric clear-sky conditions to observe it from Pik Dankova. Using the panorama tool maintained by this cool German guy, you can verify it: https://www.udeuschle.de/panoramas/panqueryfull.aspx?mode=ne...
However one notable finding my tool gave me was it discovered the second longest sightline that is competely unknown up until this day AFAIK:
In Colombia, from Pico Cristóbal Colón (10.838333,-73.687500) which is at 5668.5 meters (in my DEM data), you can see 502.6 km over the plains of the Caribbean region all the way to the Colombian Andes if you look toward bearing 206.2° (roughly south-south-west) as you see some distant peak at 6.777286,-75.692304 which is 3347.0 meters high. Here you can verify it here: https://www.udeuschle.de/panoramas/panqueryfull.aspx?mode=ne...
I am not sure if this Comlombian sighline has ever been observed.
As I said I should really publish my code and results. And at some point I would like to optimize it and re-run it using a higher-precision DEM with 30x30 meters tiles instead of 90x90 meters. I think there are a few 30-meter DEMs available but I need to find the highest-quality one.
Wow, 95 days!! Who would have thought that Colombia had the second highest, I just assumed it'd be another part of the Himalayas. I'm the author of the post, I suppose there's a chance I might find something different if I'm literally calculating every single line of sight on the planet? As there's a chance that the longest line isn't from a peak or plateau?
I'd love to geek out with you about your journey and thoughts if you're up for it?
> As there's a chance that the longest line isn't from a peak or plateau?
Is there such a chance? I'm struggling to think what this could look like. If the furthest point you can see is in a bowl or a valley, why can't you see all the way to the far side of the valley? I think we can rule out topographic ridiculousness like a mountain with a hole in it that you can see through.
OK, instead of a peak or a plateau, perhaps the longest line could be from a ridge in a saddle. So it's a peak when approached from one orientation (say north/south) but a trough when looking east-west. You can't see the higher ground to the east and west because it's hidden behind some other mountain.
I wonder if this is related to the so-called coastline paradox? https://en.wikipedia.org/wiki/Coastline_paradox In other words, what is the criteria for filtering out good and bad elevation candidates?
Does it help imagining this on a tennis ball? Let's say we make 2 pyramid-like blobs of plasticine and put them on opposing sides of the tennis ball. Now we slowly move them closer to each other until they can both just see other. Is it not possible to form the pyramids in such a way, that the first point of visibility is the pyramids' bases, and not their peaks?
For me it comes down to the fact that although it might seem obvious what a peak is when you see one, I don't think there's any meaningful way to geographically define one. They're always just _locally_ higher points.
BTW this is exactly why I wrote the post, it's a fairly unique problem, and I'm sure I've made some problematic assumptions.
If you imagine having a very deep hole in the ground, the longest sight line would be from the lip to the bottom. If you then dig a small hole at the bottom, you wouldn’t be able to see the bottom of the second hole, but only some part of the wall
Similar in reverse, if the pyramid had a false peak (a inflection place where topology changes from steep to less steep), it could obscure line of sight between the real peak, if the angle formed by the line of sight between the two distant peaks tries to intersect the intermediate inflection point
I can imagine some shapes like this in theory, I just think we can rule them out in practice.
For the hole example, we know there aren't any holes 500 km deep. For the pyramids, we know the line of sight is very close to flat (it's at least 500 km long and less than 10 km in elevation change). If a false peak prevents you from seeing the real peak, the angle of the mountain above the false peak is shallow enough that you can call it a plateau.
It'd be a pleasure to chat about this! Hit me up by email: m at zorinaq dot com
Actually, to be exact: I just checked my data and I forgot that technically the 2nd and 3rd longest sightlines I discovered are slight variations of the Pik Dankova sightline. 7 km east of this peak is another mountain with two spots from which there are two sightlines of 521.1 and 510.49 km ending in the same mountain range in China (a few hundred km away from the end point of the 1st sightline.)
Then the 4th longest sightline I found is the one that's arguably unique: 510.45 km, fully contained within China in the Kunlun Mountains from 38.614706,75.184529 to 36.517500,80.333333. So that's an interesting find.
Then my 5th, 6th, 7th, 8th longest sightlines are again slight variations of the 1st Pik Dankova sightline.
Then my 9th longest sigthline in the one in Colombia I mentioned.
It's very possible you could find different results and new longest sightlines, so I encourage you to continue your own research.
For starters here is a limitation of my implementation: my heuristic for finding a potential viewpoint (mountain peak or ridge of a plateau) is imperfect: in the DEM, a tile is considered a potential viewpoint if it is higher than or equal to it's 8 neighbors, and if it is strictly higher than at least one neighbor. Think about a group of 3x3 tiles. They are all the same height, except one tile on the edge of the group that is slighly lower than the others. Then in this case, the central tile is a potential viewpoint because we could have a sightline standing on this central tile, looking over the one neighbor tile that is slightly lower. That would be the case when standing on the edge of a plateau right next to the start of a valley.
But I can think of at least one case where I would accidentally dismiss potential viewpoints: if, when standing on this ridge, the tile behind us is slightly higher (even if it's just by 1 meter), then my heuristic would dismiss the central tile as a potential viewpoint, because my thought was the tile that is sligthly higher is going to be selected by my heuristic as a (better) potential viewpoint instead. But, in reality, if the tile behind us is only a few meters higher, then it is not high enough to look over our initial tile, then over the start of the valley. In that case the central tile is a viewpoint but would be dismissed by my heuristic. This is a very narrow corner case that probably doesn't affect my results, but I am not 100% sure. If the height difference is about 3 or 4 meters or more, the tile behind us would definitely have a clear and longer sightline, so my heuristic isn't breaking anything.
Anyway my whole project was just a weekend thing so I didn't care to be very precise. But now seeing your effort is renewing my interest in fixing my code. Oh and I should definitely port this to GPU as this workload is 100% compute-bound, mostly, sin, cos, sqrt and divisions.
I don't know enough about the subject to have any useful suggestions, but I'd be interested in your take on how a project like yours would work differently if you were to choose a different solution.
I'd heard of H3, they definitely sound like they could be related, but I think they're solving a different problem. I think H3 is for efficient storage of geographic data whereas I'm just trying to solve a classic packing problem, like this monstrosity https://www.reddit.com/r/math/comments/111ne5y/deeply_unsett...
As proposed in the article, calculating the area weights all points in the viewshed equally. I wonder if it makes sense to give more weight to far-away points? Or maybe less weight? Not sure! But would be interesting to explore and see if it gives anything.
The underlying data isn't that accurate, but I think with a tool like https://www.heywhatsthat.com you can set the coordinates and elevation manually and create a custom viewshed.
You have a very interesting project. What happens if you put your maps and elevation data on a 'sphere', to model the world as 3D? You can then leverage a GPU to render a view from one vertex to then determine what is furthest away yet visible from that vertex. The vertices can then be given some type of heatmap colour and an interactive tool made.
A full GIS tool isn't needed for this, with Blender and three.js there are all of the tools needed.
[1] https://hdersch.github.io/Viewing.html
reply