Where’s the oldest known (2,400 years) intact shipwreck?
Where’s the oldest known (2,400 years) intact shipwreck?
Out[]=
Deep-sea treasure hunt... with a research team... discovering a time capsule from 400BC... it hardly gets better than this. Past week the media was abuzz about an extraordinary discovery made by the team of Black Sea Maritime Archaeology Project (Black Sea MAP). They found the oldest known intact shipwreck estimating its age as 2,400 years via radiocarbon dating. Remarkable preservation of the ship is due to unique feature of the Black Sea lacking oxygen below ~150 meters, so there are almost no life and no chemical or biological corrosion of the ships’ materials. Good summaries can be found at ArsTechnica, BBC, NPR, The Guardian, and many other sources. So far we know from the media:
◼
Shipwreck is more than 2 km deep under water
◼
Shipwreck is more than 80 km away from Burgas, Bulgaria
This piqued my curiosity. Can the seabed drop so fast to 2 km depth just 80 km off shore? Can I visualize it? Being a creature of the Black Sea shores myself, born and raised in gorgeous Odessa, Ukraine, I could not let the idea go. As you can see my computed chart above is pretty close to the vague one below reported by The Guardian (I could not find neither more precise location data nor maps, let me know if you did). This work is no more than an educated guess based on a few numbers and some fun data science ramble. The key is the GeoElevationData and Geometric Computation. I still struggle with a few inconsistencies, for instance, perhaps the units for the distance “80 off shore” mentioned by media are miles and not kilometers; or perhaps there are other blinders or/and my estimates are off. Let’s just dive into it.
Out[]=
To get a better picture of where globally is the shipwreck, compute countries surrounding the Black Sea ({All, 0} means all countries at the zero distance from the sea):
In[]:=
countries=GeoNearest"Country",,{All,0}
Out[]=
,,,,,
I usually like to see two geo-scales - global and zoomed in - combined for better comprehension:
In[]:=
RowGeoListPlot,GeoRange"World",PlotStyleBlue,GeoCenter,GeoBackground"Coastlines",GeoProjection"WinkelTripel",ImageSize{Automatic,350},GeoListPlotcountries,GeoCenter,GeoRange,GeoBackground"CountryBorders",GeoProjection"WinkelTripel",ImageSize{Automatic,350}
Out[]=
The quality of the very first visualization is achieved by assembling 3 main parts: geo-objects (points, circles) relief map obvious to an eye, and a fine contour map of GeoElevationData that looks separately like this (click to zoom):
Out[]=
The red contour marks the depth of 2 km and everything inside can mostly be flat or deeper, but not by much for the Black Sea with the maximum depth ~2.2 km. First of all we need location of the shipwreck, whose latitude and longitude I compute (quite roughly) at the very end of this post and now assign to variable WRECK:
WRECK=GeoPosition[{42.6816,29.0180}];
The following definitions formulates the objects of interest in terms of geo- data and computations:
sC={Red,Thick,#}&;sP={Red,PointSize[.015],#}&;sW={Yellow,PointSize[.015],#}&;
input=,Point[WRECK]//sW,Point//sP,GeoCircle,//sC,GeoCircle,//sC
where //sW etc. are small style operators found in the attached notebook. The following creates high quality relief plot serving as the background:
In[]:=
relief=GeoGraphics[input,GeoBackground"ReliefMap",ImageSize1000]
The next interesting part is building fine contour lines of geo elevation or topographic map. From the relief map let’s extract the projection, which Wolfram Language selects the best for a given geo-data automatically:
In[]:=
projection=GeoProjection/.Options[relief,GeoProjection]
Out[]=
Mercator
and projected ranges:
In[]:=
geogridrange=GeoGridRange/.Options[relief,GeoGridRange]
Out[]=
{{25.6688,42.5431},{44.4532,54.2586}}
GeoGridRange above and GeoElevationData taking a GeoProjection option are available only in Wolfram Language version 12 that will be coming soon. Request geo elevation data for that exact same projection, projected region and units and resolution of interest (metric in this case):
In[]:=
elev=GeoElevationData[GeoProjectionprojection, UnitSystem"Metric",GeoResolution,GeoGridRangegeogridrange]
Out[]=
Now we can define some sensible elevation levels for the contours and visualize quite stunning topography of the Black Sea region (see the contour map above) :
In[]:=
contour=ListContourPlot[Reverse[elev["Magnitudes"]],ImageSize1000,PlotLegendsAutomatic,ContourShadingNone,DataRangegeogridrange,AspectRatioAutomatic,FrameFalse,PlotRangePaddingNone,ContourStyleJoin[{Directive[Red,Thick]},Table[Black,10]],Contours{200,100,10,0,-10,-100,-200,-500,-1000,-1500,-2000}]
To finally make the very first visual we merge the relief plot with the contour plot:
In[]:=
Show[relief[[1]],contour]
see the result at the top image at very beginning of this article. But, so, how did I estimate the location of the shipwreck, a.k.a. the yellow dot? I simply assumed that the expedition seeking deeper waters would move towards the nearest place where the seabed descends to much deeper levels. The point on 2km-depth contour nearest to the expedition’s port of origin might serve as a good guess. As some media mentioned Burgas, Bulgaria as the city within ~80km from shipwreck I assumed Burgas, having a port, was the origin of the expedition. One can extract the 2km-depth contour and turn it into a geometric region to perform RegionNearest computation. But there are a subtleties to watch out. Let’s first get our 200km-depth contour:
DiscretizeGraphics transformed a Graphics object into a geometric region. RegionNearest finds a point in the region (contour) nearest to a given point (city location). The thing is to perform the RegionNearest computation in projected space, and then go back to GeoPosition:
“GridXY” is also version 12 feature. Now we can compute the distance from Burgas to the shipwreck. Interestingly, the distance in miles is much closer to media-stated “80” than the distance in kilometers. So maybe the units are where confused in the interviews.