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]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_26.png)
files = Map[
img \[Function] ExampleData[img, "FilePath"],
ExampleData[{"TestImageSet", "Lisbon2016"}]
];
Fassen Sie die dazu erforderlichen Informationen in einer Assoziation zusammen.
In[2]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_27.png)
labels = {"Thumbnail", "DateTime", "GeoPosition"};
In[3]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_28.png)
dataSet = Dataset@Map[
file \[Function]
AssociationThread[
labels ->
Import[file, {labels}, IncludeMetaInformation -> False]],
files
]
Out[3]=
![](assets.de/analyze-a-trip-by-image-metadata/O_16.png)
Visualisieren Sie die Standorte, wo die Fotos aufgenommen wurden.
In[4]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_29.png)
gps = dataSet[[All, "GeoPosition"]];
GeoGraphics[GeoMarker@gps, GeoRangePadding -> Quantity[100, "Meters"]]
Out[4]=
![](assets.de/analyze-a-trip-by-image-metadata/O_17.png)
Berechnen Sie die Gehdistanz zu all diesen Standorten und zurück.
In[5]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_30.png)
closeLoop = path \[Function] Append[path, First[path]];
In[6]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_31.png)
sortedGPS =
closeLoop@
Normal@dataSet[SortBy["DateTime"], Take[#GeoPosition, All, 2] &];
UnitConvert[
TravelDistance[sortedGPS, TravelMethod -> "Walking"], "Kilometers"]
Out[6]=
![](assets.de/analyze-a-trip-by-image-metadata/O_18.png)
Visualisieren Sie den Pfad, um alle Fotos in chronologischer Reihenfolge zu schießen.
In[7]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_32.png)
travel = TravelDirections[sortedGPS, TravelMethod -> "Walking"]
Out[8]=
![](assets.de/analyze-a-trip-by-image-metadata/O_19.png)
In[9]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_33.png)
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}
]
![](assets.de/analyze-a-trip-by-image-metadata/swf_2.png)
Berechnen und visualisieren Sie den kürzesten Pfad, den Sie stattdessen nehmen könnten.
In[10]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_34.png)
optimalPath =
FindShortestTour[Normal@sortedGPS,
DistanceFunction -> (QuantityMagnitude[
TravelDistance[{#1, #2}, TravelMethod -> "Walking"],
"Kilometer"] &)]
Out[10]=
![](assets.de/analyze-a-trip-by-image-metadata/O_20.png)
In[11]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_35.png)
Quantity[First@optimalPath, "Kilometers"]
Out[11]=
![](assets.de/analyze-a-trip-by-image-metadata/O_21.png)
In[12]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_36.png)
shortestGPS = sortedGPS[[Last@optimalPath]];
In[13]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_37.png)
shortestTravel =
TravelDirections[shortestGPS, TravelMethod -> "Walking"]
Out[14]=
![](assets.de/analyze-a-trip-by-image-metadata/O_22.png)
In[15]:=
![Click for copyable input](assets.de/analyze-a-trip-by-image-metadata/In_38.png)
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}
]
![](assets.de/analyze-a-trip-by-image-metadata/swf_3.png)