GPS Erweiterung für Parsedown (PHP)
Um meine Idee dieser Seite umzusetzen, habe ich eine Erweiterung benötigt, welche die vorhandenen GPS Informationen aus den EXIF Daten übernehmen zu können. Hierfür habe ich eine Parsedown Erweiterung geschrieben, welche die gewünschten Daten ausliest, und dem Image-Tag als custom attribute hinzufügt.
data-lat: Breitengrad
data-lon: Längengrad
Ich hoffe Ihr könnt damit etwas anfangen.
Wie wird die Erweiterung genutzt
![Edinburgh](/assets/scottlandImages/IMG_0948.jpg) {#0948}
Definition von Bildern in markdown.
<img src="/assets/scottlandImages/IMG_0948.jpg"
alt="Edinburgh"
id="0948"
data-lat="55.954977777778"
data-lon="-3.1825083333333"
>
Erzeugtes HTML-Tag für Bilder. Die gesetzte ID wird normal übernommen. Sollten GPS Daten gefunden werden, werden die attribute data-lat und data-lon gesetzt.
Implementierung
class Su541ParseDownExtension extends ParsedownExtra
{
protected function inlineImage($Excerpt)
{
// GeoPositionExtension
$Image = parent::inlineImage($Excerpt);
$Image['element']['attributes']['src'] = $Image['element']['attributes']['src'];
$path = $_SERVER["DOCUMENT_ROOT"] . $Image['element']['attributes']['src'];
// only for jpg files
if (pathinfo($path)['extension'] == "jpg") {
$exif = exif_read_data($path, 'GPS');
if ($exif) {
// Add GPS-Informations
$lat = $exif['GPSLatitude'];
$calcLat = $lat[0] + ($lat[1] / 60) + $lat[2] / 360000;
if ($exif['GPSLatitudeRef'] == 'S') {
$calcLat = $calcLat * -1;
}
$lon = $exif['GPSLongitude'];
$calcLon = $lon[0] + ($lon[1] / 60) + $lon[2] / 360000;
if ($exif['GPSLongitudeRef'] == 'W') {
$calcLon = $calcLon * -1;
}
$Image['element']['attributes']['data-lat'] = $calcLat;
$Image['element']['attributes']['data-lon'] = $calcLon;
}
}
return $Image;
}
}