Analysieren Sie einen Trip anhand von Bildmetadaten
Mit Bildern und den dazugehörigen Metadaten können Sie geographische Berechnungen durchführen, um einen Stadtrundgang durch Lissabon zu visualisieren und zu analysieren.
Importieren und analysieren Sie eine Sammlung von Fotos, die während eines Aufenthalts gemacht wurden.
In[1]:=
files = Map[
img \[Function] ExampleData[img, "FilePath"],
ExampleData[{"TestImageSet", "Lisbon2016"}]
];
Fassen Sie die dazu erforderlichen Informationen in einer Assoziation zusammen.
In[2]:=
labels = {"Thumbnail", "DateTime", "GeoPosition"};
In[3]:=
dataSet = Dataset@Map[
file \[Function]
AssociationThread[
labels ->
Import[file, {labels}, IncludeMetaInformation -> False]],
files
]
Out[3]=
Visualisieren Sie die Standorte, wo die Fotos aufgenommen wurden.
In[4]:=
gps = dataSet[[All, "GeoPosition"]];
GeoGraphics[GeoMarker@gps, GeoRangePadding -> Quantity[100, "Meters"]]
Out[4]=
Berechnen Sie die Gehdistanz zu all diesen Standorten und zurück.
In[5]:=
closeLoop = path \[Function] Append[path, First[path]];
In[6]:=
sortedGPS =
closeLoop@
Normal@dataSet[SortBy["DateTime"], Take[#GeoPosition, All, 2] &];
UnitConvert[
TravelDistance[sortedGPS, TravelMethod -> "Walking"], "Kilometers"]
Out[6]=
Visualisieren Sie den Pfad, um alle Fotos in chronologischer Reihenfolge zu schießen.
In[7]:=
travel = TravelDirections[sortedGPS, TravelMethod -> "Walking"]
Out[8]=
In[9]:=
Animate[
GeoGraphics[{
Style[Normal@travel["Dataset"][1 ;; n, "Path"], Thick, Red],
dataSet[All,
GeoMarker[Take[#GeoPosition, All, 2], #Thumbnail] &]},
GeoRangePadding -> Quantity[200, "Meters"]
],
{n, 1, Length[travel["Dataset"]] + 1, 1}
]
Berechnen und visualisieren Sie den kürzesten Pfad, den Sie stattdessen nehmen könnten.
In[10]:=
optimalPath =
FindShortestTour[Normal@sortedGPS,
DistanceFunction -> (QuantityMagnitude[
TravelDistance[{#1, #2}, TravelMethod -> "Walking"],
"Kilometer"] &)]
Out[10]=
In[11]:=
Quantity[First@optimalPath, "Kilometers"]
Out[11]=
In[12]:=
shortestGPS = sortedGPS[[Last@optimalPath]];
In[13]:=
shortestTravel =
TravelDirections[shortestGPS, TravelMethod -> "Walking"]
Out[14]=
In[15]:=
Animate[
GeoGraphics[{
Style[Normal@shortestTravel["Dataset"][1 ;; n, "Path"], Thick,
Blue],
dataSet[All,
GeoMarker[Take[#GeoPosition, All, 2], #Thumbnail] &]},
GeoRangePadding -> Quantity[200, "Meters"]
],
{n, 1, Length[shortestTravel["Dataset"]] + 1, 1}
]