Hilfe zu einem Script mit GPS-Exifdaten

Hilfe zu verschiedenen Themen
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

Nun habe ich leider vom Scripten keine Ahnung, deswegen dachte ich, einfach mal euch zu fragen. In der einfacheren Version interessiert mich ein Button, oder vermutlich eher ein Script, das einfach aus dem EXIF-Daten von JPGs die Daten zu GPS-Längengrad und GPS-Breitengrad ausliest, und sie dann im Format latitude:53.493 longitude:9.998 K:\ in die Zwischenablage befördert, inklusive der Pfadwahl.

Zwei Punkte sind hier besonders, nämlich, daß bei den Werten die Nachkommastellen auf drei Stellen gekürzt sind (idealerweise könnte man im Script auch den Wert testweise auf zwei oder vier ändern, um zu experimentieren). Wenn ich also dieses Format in der Zwischenablage habe, bin ich schon recht happy. Der zweite Punkt ist Luxus, aber womöglich leicht zu erreichen, nämlich, diesen Wert entweder direkt nach Everything ins Suchfenster zu schicken, oder in der noch komfortableren Variante direkt als Abfrage innerhalb Opus zu listen, eventuell als Collection.

Ich weiß, daß da noch viel Spielraum ist in der Zusammenarbeit der beiden Syntaxes von Opus und Everything, und hoffe auf einen Austausch der Entwickler. Persönlich mache ich noch manche Sachen eher in ET, da ich die Syntax nicht nach Opus übertragen bekomme.
Benutzeravatar
tbone
Supporter
Beiträge: 291
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von tbone »

Willst Du direkt Fisch oder die Angel bedienen lernen?.. o)
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

Also, ich werde ganz bestimmt nicht noch scripten, programmieren oder Ähnliches lernen. Dafür bin ich einfach schon viel zu alt. Und meine geistigen Kräfte lassen sowieso schon merklich nach. Egal, tippe ich es halt weiterhin aus dem Metapanel ab, muss auch so gehen., Danke.
Benutzeravatar
Kundal
Moderator
Beiträge: 122
Registriert: 24. Okt 2021 18:02
Betriebssystem: Windows 10 Pro

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von Kundal »

Vielleicht hilft exiftool mit diesem Befehl etwas weiter:

Code: Alles auswählen

[Pfad zu]exiftool.exe -gpslatitude -gpslongitude {f} -c "%%.3f" |clip
In der Zwischenablage findest du die Daten als Zweizeiler:
GPS Latitude : 52.516 N
GPS Longitude : 13.377 E

Wenn du es in einer Zeile haben willst ersetzt du "-gpslatitude -gpslongitude" durch -gpsposition und bekommst:
GPS Position : 52.516 N, 13.377 E
Benutzeravatar
tbone
Supporter
Beiträge: 291
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von tbone »

Also Fisch, nicht gleich komplett aufgeben Abr!

Hier ist Button der vom selektierten Bild die Daten so ins Clipboard kopiert wie Du brauchst (glaube ich zumindest).

Code: Alles auswählen

function OnClick(clickData){
	var sourceTab = clickData.func.sourcetab;
	for(var i=0;i<sourceTab.selected.count;i++) {
		var selItem = sourceTab.selected(i);
		var imageData = selItem.Metadata.image;
		var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
		var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
		var clipContent = "latitude: " + latitudeShort + " longitude: "+ longitudeShort + " " + sourceTab.path;
		DOpus.Output("Setting clipboard ["+clipContent+"].");
		DOpus.SetClip(clipContent);
		break;
	}
}
Wenn Du jetzt eine Everything-Suche damit ausführen willst, könnte man hier noch zusätzlich die Everything.exe ausführen.

Code: Alles auswählen

Everything-1.5a_64bit.exe -search "long:x lat:y foo"
Eine Everything-Suche direkt über DO anzustoßen, scheint mir bislang nicht möglich zu sein. Es gab hier aber einen umfangreichen Thread und diverse ScriptAddins und Hilfsmittel, die diese Funktion nachgebaut haben.

Code: Alles auswählen

https://resource.dopus.com/t/everythingdopus-a-utility-to-integrate-everything-with-directory-opus/43844
Ich denke mal, die ScriptAddins stoßen auch nur die Commandline-Variante von Everyhting an, holen sich die Pfade zu den "Results" aus der Datei und würgen die dann über dopusrt.exe in eine FileCollection, weil auch diese immernoch nicht per Script anzulegen sind.

War mir jetzt ehrlich gesagt zu bunt dort im dem Thread.. jetzt hast Du zwei Vorlagen, zwei Fische.. jetzt musst Du vll doch mal alleine den Wurm an den Haken machen.. o)
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

Kundal hat geschrieben: 10. Mär 2024 17:33 Vielleicht hilft exiftool mit diesem Befehl etwas weiter:

Code: Alles auswählen

[Pfad zu]exiftool.exe -gpslatitude -gpslongitude {f} -c "%%.3f" |clip
In der Zwischenablage findest du die Daten als Zweizeiler:
GPS Latitude : 52.516 N
GPS Longitude : 13.377 E

Wenn du es in einer Zeile haben willst ersetzt du "-gpslatitude -gpslongitude" durch -gpsposition und bekommst:
GPS Position : 52.516 N, 13.377 E
Thx, Kundal, das gucke ich mir am Nachmittag auch nochmal an. Voidtools hatte auch gerade die Syntax verändert, und auch bei tbones Code musste ich etwas ändern, siehe meine Antwort an ihn.
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

Hi tbone, das ist schonmal eine Fischmahlzeit, und mit ein paar Modifikationen würde es schon ganz git gehen. Ich fand heraus, daß ich zwei Leerzeichen entfernen musste, so daß die Anführungszeichen gleich nach den Doppelpunkten kommen, also statt beispielsweise "latitude: " eher "latitude:" stehen muss. Dann spuckt er in Everything schon Bilder aus. Eine zweite Variante des Scripts, das bis auf 2 Stellen nach den Kommas kürzt, und evetuell mit Modifiertaste (Strg oder Alt) benutzt wird, wäre auch gut. Um einen etwas weiteren Radius um die Location zu bekommen.

Und der Pfad soll auf K:\ stehen, statt auf dem Pfad des Ordners. Mit vollem Pfad findet er zwar das Bild in diesem Ordner, aber der tiefere Zweck dieses Buttons ist, für die Location alle weiteren Fotos mit diesen Koordinaten aus über 1500 Ordner zu finden, was auch klappt, sobald ich den Pfad auf K:\ verallgemeinere. Aber dann geht es. Ich vermute mal, daß der exakte Pfad, also sowas wie K:\Fotografie\10-Mrz-24, von sourceTab.path kommt. Hab aber nicht gewagt, den rauszuschmeißen, weil ich nicht weiß, wie ich generisch "K:\" einsetze.

Voidtools hatte übrigens gerade in der neueren Version die Syntax vereinfacht, vorher musste man da noch mit spitzen Klammern um die Werte herummachen. Außerdem muss ich bei Gelegenheit mal drüben bei GPSoft vorschlagen (falls es nicht schon geht, glaube aber nicht), daß man einen größeren Font im Scripteditor einstellen kann - ich kann den kaum lesen hier auf meinen 125% 4K. :lol:

Unten der Code mit den entfernten zwei Leerstellen. Und an Dich auch nochmal thx. Ich könnte mir vorstellen, daß der fertige Button sich drüben in der Scriptesammlung gut machen würde. Da treiben sich einige Fotografen herum, von denen manche bestimmt auch mit Geodaten arbeiten. Schon praktisch, wenn man eine größere Bildersammlung nach einer bestimmten Location durchforsten kann, innerhalb Sekunden.

War mir jetzt ehrlich gesagt zu bunt dort im dem Thread.. jetzt hast Du zwei Vorlagen, zwei Fische.. jetzt musst Du vll doch mal alleine den Wurm an den Haken machen.. o)

Code: Alles auswählen

function OnClick(clickData){
	var sourceTab = clickData.func.sourcetab;
	for(var i=0;i<sourceTab.selected.count;i++) {
		var selItem = sourceTab.selected(i);
		var imageData = selItem.Metadata.image;
		var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
		var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
		var clipContent = "latitude:" +latitudeShort + " longitude:"+longitudeShort + " " + sourceTab.path;
		DOpus.Output("Setting clipboard ["+clipContent+"].");
		DOpus.SetClip(clipContent);
		break;
	}
}
Benutzeravatar
Kundal
Moderator
Beiträge: 122
Registriert: 24. Okt 2021 18:02
Betriebssystem: Windows 10 Pro

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von Kundal »

Hallo abr, dein K:\ bekommst du mit

Code: Alles auswählen

var clipContent = "latitude:" + latitudeShort + " longitude:"+ longitudeShort + " K:\\";
Besser ist vielleicht, du kürzt den Pfad auf seine erste Komponente:

Code: Alles auswählen

var clipContent = "latitude:" + latitudeShort + " longitude:"+ longitudeShort + " " + sourceTab.path.Split[0];
Die Anzahl der Nachkommastellen wird durch die Anzahl von \d in Zeile 4 und 5 definiert.
Benutzeravatar
Kundal
Moderator
Beiträge: 122
Registriert: 24. Okt 2021 18:02
Betriebssystem: Windows 10 Pro

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von Kundal »

Hier die Variante mit 2 Nachkommastellen und direkter Übergabe der Suche an Everything. Den Pfad zur everything.exe musst du natürlich noch anpassen (die doppelten Backslashes beachten!)

Code: Alles auswählen

function OnClick(clickData){
	var sourceTab = clickData.func.sourcetab;
	for(var i=0;i<sourceTab.selected.count;i++) {
		var selItem = sourceTab.selected(i);
		var imageData = selItem.Metadata.image;
		var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
		var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
		var clipContent = "latitude:" + latitudeShort + " longitude:"+ longitudeShort + " " + sourceTab.path.Split[0];
		DOpus.Output("Setting clipboard ["+clipContent+"].");
		DOpus.SetClip(clipContent);
		clickData.func.command.RunCommand("[Pfad]\\[zu]\\Everything.exe -s " + '"' + clipContent + '"');
		break;
	}
}
Zeile 10 kannst du auch löschen oder auskommentieren, weil es nicht nötig ist, den Suchbegriff in die Zwischenablage zu kopieren.
Benutzeravatar
tbone
Supporter
Beiträge: 291
Registriert: 29. Okt 2021 00:45
Betriebssystem: Windows 10 Pro

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von tbone »

Legen wir noch einen drauf.. o)
Ich habe nochmal nachgefragt im GP Forum, ob und warum keine Everything-Search Suche ausgeführt werden kann..
Stellt sich raus, geht doch, ist nur noch nicht dokumentiert worden und ich habe es daher nicht gefunden.
Hier also mit Everything-Suche über DO und optional SHIFT für eine Kommastelle weniger.

Code: Alles auswählen

function OnClick(clickData){
	var sourceTab = clickData.func.sourcetab;
	for(var i=0;i<sourceTab.selected.count;i++) {
		var selItem = sourceTab.selected(i);
		var imageData = selItem.Metadata.image;
		if (clickData.func.qualifiers == "none") { // begrenzen auf 3 GPS-Nachkommastellen für Umgebung
			var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
			var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
		}
		if (clickData.func.qualifiers.indexOf("shift")!=-1) { // nur 2 GPS-Nachkommastellen (mehr Umgebung)
			var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
			var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
		}
		//var clipContent = "latitude:" + latitudeShort + " longitude:"+ longitudeShort //+ " " + sourceTab.path.Split[0];
		var query = "latitude:" + latitudeShort + " longitude:"+ longitudeShort + " path:" + sourceTab.path.Split[0]
		var cmdLine = "CLI QUICKSEARCHENGINE=everythingglobal QUICKSEARCH=" + query;
		DOpus.Output("Running ["+cmdLine+"]..");
		clickData.func.command.RunCommand(cmdLine);
		break;
	}
}
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

Kundal und tbone, Wahnsinn! Bin gerade etwas beschäftigt, so daß ich noch nicht alle Varianten durchgecheckt habe, aber erste Tests sind vielversprechend. Auch das mit den Präzisionsstufen. Erfahrungsgemäß wären vier Stellen nach dem Komma wohl etwas zu genau, so daß die jetzige Version für Fotografen wohl optimal sein dürfte. Ich schätze die Variante mit zwei Stellen auf ungefähr 600 bis 1000 Meter Radius genau (muss es mir nochmal genauer ansehen), was sehr praktisch ist für manche Szenrarien. Die andere Variante schätze ich auf 50 bis 200 Meter, also genau richtig, um sich in großen Sammlungen alle Bilder einer Location zusammensuchen zu lassen. Ich hoffe, ihr veröffentlich beide Varianten bei GP. Ich finde es Hammer! Zu beachten ist dabei, daß in Everything in > Einstellungen > Datenbank > Properties auch longitude und latitude eingetragen werden, und der Index neu erstellt werden muss. Also, saubere Arbeit! Danke euch!
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

Kundal hat geschrieben: 11. Mär 2024 10:19 Hier die Variante mit 2 Nachkommastellen und direkter Übergabe der Suche an Everything. Den Pfad zur everything.exe musst du natürlich noch anpassen (die doppelten Backslashes beachten!)

Code: Alles auswählen

function OnClick(clickData){
	var sourceTab = clickData.func.sourcetab;
	for(var i=0;i<sourceTab.selected.count;i++) {
		var selItem = sourceTab.selected(i);
		var imageData = selItem.Metadata.image;
		var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
		var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
		var clipContent = "latitude:" + latitudeShort + " longitude:"+ longitudeShort + " " + sourceTab.path.Split[0];
		DOpus.Output("Setting clipboard ["+clipContent+"].");
		DOpus.SetClip(clipContent);
		clickData.func.command.RunCommand("[Pfad]\\[zu]\\Everything.exe -s " + '"' + clipContent + '"');
		break;
	}
}
Zeile 10 kannst du auch löschen oder auskommentieren, weil es nicht nötig ist, den Suchbegriff in die Zwischenablage zu kopieren.
Sorry, diesen Code bekomme ich nicht zum laufen, da mir nicht klar ist, wie, also von exakt wo bis genau wo ich den Pfad einzusetzen habe. Ich hab drei oder vier Varianten probiert, und keine davon geht. Ich kann [Pfad]\\[zu]\\Everything.exe nicht deuten. Versuchsweise habe ich vor dem Schalter -s im Pfad zu ET¹ doppelte Backslashes eingesetzt, aber das haut auch nicht wirklich hin.

¹ C:\Program Files\Everything 1.5a\Everything64.exe
Benutzeravatar
Kundal
Moderator
Beiträge: 122
Registriert: 24. Okt 2021 18:02
Betriebssystem: Windows 10 Pro

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von Kundal »

Ganz einfach: C:\\Program Files\\Everything 1.5a\\Everything64.exe

Code: Alles auswählen

clickData.func.command.RunCommand("C:\\Program Files\\Everything 1.5a\\Everything64.exe -s " + '"' + clipContent + '"');
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

Danke Kundal, jetzt geht es. Da fehlte bei mir eine Leerstelle nach dem Schalter -s. :idea:
Das hätte ich auch selber merken können. :roll:

Wie auch immer, ich habe nun einen Dreierschalter mit euren zwei Varianten. 8-)
abr
Supporter
Beiträge: 115
Registriert: 29. Apr 2022 15:41

Re: Hilfe zu einem Script mit GPS-Exifdaten

Beitrag von abr »

tbone hat geschrieben: 11. Mär 2024 11:42 Legen wir noch einen drauf.. o)
Ich habe nochmal nachgefragt im GP Forum, ob und warum keine Everything-Search Suche ausgeführt werden kann..
Stellt sich raus, geht doch, ist nur noch nicht dokumentiert worden und ich habe es daher nicht gefunden.
Hier also mit Everything-Suche über DO und optional SHIFT für eine Kommastelle weniger.

Code: Alles auswählen

function OnClick(clickData){
	var sourceTab = clickData.func.sourcetab;
	for(var i=0;i<sourceTab.selected.count;i++) {
		var selItem = sourceTab.selected(i);
		var imageData = selItem.Metadata.image;
		if (clickData.func.qualifiers == "none") { // begrenzen auf 3 GPS-Nachkommastellen für Umgebung
			var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
			var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d\d)(.*)/,"$1$2");
		}
		if (clickData.func.qualifiers.indexOf("shift")!=-1) { // nur 2 GPS-Nachkommastellen (mehr Umgebung)
			var longitudeShort = (imageData.longitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
			var latitudeShort = (imageData.latitude+"").replace(/(.*)(\.\d\d)(.*)/,"$1$2");
		}
		//var clipContent = "latitude:" + latitudeShort + " longitude:"+ longitudeShort //+ " " + sourceTab.path.Split[0];
		var query = "latitude:" + latitudeShort + " longitude:"+ longitudeShort + " path:" + sourceTab.path.Split[0]
		var cmdLine = "CLI QUICKSEARCHENGINE=everythingglobal QUICKSEARCH=" + query;
		DOpus.Output("Running ["+cmdLine+"]..");
		clickData.func.command.RunCommand(cmdLine);
		break;
	}
}
Eine Frage noch zu Deiner Version. Ich hatte versucht, zusätzlich noch

function clickData.func.command.RunCommand("View=Thumbnails")

einzubauen (hatte es hinten angehängt, vor den zwei geschweiften abschließenden Klammern), um die Resultate gleich als Miniaturen angezeigt zu bekommen. Klappt aber noch nicht ganz.
Antworten