• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

patch für GPX-Export für Garmin Colorado

foobar123

Geonewbie
Hi,

wie schon an anderer Stelle erwähnt, fehlt dem GPX Export ein "id" attribut im groundspeak:cache tag, um vom Garmin Colorado direkt verstanden zu werden.

Ich habe mal einen billigen patch zusammengeschustert, der soweit funktioniert. ABER: ich zähle einfach von 0 hoch, und es wäre irgendwie netter, wenn man für jeden Cache immer eine eindeutige id nehmen würde, dann könnte man evtl. mehrere gpx files parallel auf dem colorado haben (ohne überschneidungen...). Ich habe keine Ahnung wie die pocket queries ihre ids berechnen, aber da die ja immer aus einer DB kommen haben die Jungs es natürlich leicht, eine eindeutige Kennung mitzugeben.

Anyway, besser als vorher ist es so auf jeden Fall

Code:
Index: GPXExporter.java
===================================================================
--- GPXExporter.java	(revision 1533)
+++ GPXExporter.java	(working copy)
@@ -1,7 +1,12 @@
 package exp;
-import ewe.sys.*;
+import CacheWolf.CacheHolderDetail;
+import CacheWolf.CacheType;
+import CacheWolf.Common;
+import CacheWolf.Preferences;
+import CacheWolf.Profile;
+import CacheWolf.SafeXML;
 import ewe.io.FileBase;
-import CacheWolf.*;
+import ewe.sys.Time;
 /**
 *	Class to export the cache database to a GPX file with gc.com
 *	extensions.<br>
@@ -19,7 +24,7 @@
 		super();
 		this.setMask("*.gpx");
 		this.setNeedCacheDetails(true);
-		this.setHowManyParams(LAT_LON);
+		this.setHowManyParams(LAT_LON|COUNT);
 		this.setTmpFileName(FileBase.getProgramDirectory() + "/temp.gpx");
 	}
 	
@@ -27,7 +32,7 @@
 		super();
 		this.setMask("*.gpx");
 		this.setNeedCacheDetails(true);
-		this.setHowManyParams(LAT_LON);
+		this.setHowManyParams(LAT_LON|COUNT);
 		this.setTmpFileName(FileBase.getProgramDirectory() + "/temp.gpx");
 	}
 	
@@ -47,7 +52,7 @@
 		return strBuf.toString();
 	}
 	
-	public String record(CacheHolderDetail ch, String lat, String lon) {
+	public String record(CacheHolderDetail ch, String lat, String lon, int count) {
 		StringBuffer strBuf = new StringBuffer(1000);
 
 		try{
@@ -64,7 +69,7 @@
 				strBuf.append("    <type>Geocache|").append(CacheType.transType(ch.type)).append("</type>\r\n");
 				String dummyAvailable = ch.is_available ? STRING_TRUE:STRING_FALSE;
 				String dummyArchived = ch.is_archived ? STRING_TRUE:STRING_FALSE;
-				strBuf.append("    <groundspeak:cache available=\"").append( dummyAvailable ).append( "\" archived=\"" ).append( dummyArchived).append( "\" xmlns:groundspeak=\"http://www.groundspeak.com/cache/1/0\">\r\n");
+				strBuf.append("    <groundspeak:cache id=\"" + count + "\" available=\"").append( dummyAvailable ).append( "\" archived=\"" ).append( dummyArchived).append( "\" xmlns:groundspeak=\"http://www.groundspeak.com/cache/1/0\">\r\n");
 				strBuf.append("      <groundspeak:name>").append(SafeXML.cleanGPX(ch.CacheName)).append("</groundspeak:name>\r\n");
 				strBuf.append("      <groundspeak:placed_by>").append(SafeXML.cleanGPX(ch.CacheOwner)).append("</groundspeak:placed_by>\r\n");
 				strBuf.append("      <groundspeak:owner>").append(SafeXML.cleanGPX(ch.CacheOwner)+"</groundspeak:owner>\r\n");
 

MiK

Geoguru
Etwas ähnliches habe ich schon bei meinen Experimenten für einen "My finds"-Export verwendet. Das hat inatn aber auch noch nicht immer geschluckt. Da müssen wir wohl eher an die richtige ID rankommen. Wenn ich den gpx-Export soweit habe, dass er mit inatn und Co richtig zusammenarbeitet, wird auch der Colorado wohl keine Probleme mehr damit haben.
 
OP
F

foobar123

Geonewbie
Gibt es eigentlich einen Grund, warum keine logs ausgegeben werden? Soll ich das einbauen (also - ich mach's für mich eh, die Frage ist eher - soll ich einen patch schicken?)
 

MiK

Geoguru
Auch das, habe ich schon teilweise implementiert. Allerdings noch nicht für "Fremdlogs". Das müsste man dann wohl auch konfigurierbar machen, weil wohl nicht jeder hunderte Logs im GPX-Export haben möchte.
 
OP
F

foobar123

Geonewbie
Kannst Du ungefähr abschätzen, wann Du das fertig hast? Ich muss mir ja keine sinnlose Arbeit machen, wenn Du's morgen eh commitest :)
 

MiK

Geoguru
Das wird noch einige Zeit dauern, da im Moment alle auf SKG warten und er sich zur Zeit nicht meldet (Urlaub). Und auch dann wird erstmal einiges andere anstehen.

Wenn Du herausfindest, wie man an die richtige ID der Caches (wie im GPX von GC) herankommt, wäre das bestimmt keine sinnlose Arbeit.
 
OP
F

foobar123

Geonewbie
MiK schrieb:
Wenn Du herausfindest, wie man an die richtige ID der Caches (wie im GPX von GC) herankommt, wäre das bestimmt keine sinnlose Arbeit.

Bin leider kein Premium-Mitglied von GC - und sehe das irgendwie auch nicht ein. Deshalb habe ich mich auf OC beschränkt, bis ich geblickt habe, dass CW ja die Infos wirklich von den Seiten runterspidert :)

Wie ist das - dürftest Du mir ein paar Beispiel-GPX von GC mal schicken, damit ich schauen kann, ob ich irgendwie rausbekomme, wie die ihre IDs berechnen? Oder zählen die bei einer PQ auch immer einfach neu von 0 an hoch?
 

Geo-Johnny

Geowizard
foobar123 schrieb:
Code:
Index: GPXExporter.java
===================================================================
--- GPXExporter.java	(revision 1533)
+++ GPXExporter.java	(working copy)
@@ -1,7 +1,12 @@
 package exp;
-import ewe.sys.*;
+import CacheWolf.CacheHolderDetail;
+import CacheWolf.CacheType;
+import CacheWolf.Common;
+import CacheWolf.Preferences;
+import CacheWolf.Profile;
+import CacheWolf.SafeXML;
 import ewe.io.FileBase;
-import CacheWolf.*;
+import ewe.sys.Time;
 /**
 *	Class to export the cache database to a GPX file with gc.com
 *	extensions.<br>
@@ -19,7 +24,7 @@
 		super();
 		this.setMask("*.gpx");
 		this.setNeedCacheDetails(true);
-		this.setHowManyParams(LAT_LON);
+		this.setHowManyParams(LAT_LON|COUNT);
 		this.setTmpFileName(FileBase.getProgramDirectory() + "/temp.gpx");
 	}
 	
@@ -27,7 +32,7 @@
 		super();
 		this.setMask("*.gpx");
 		this.setNeedCacheDetails(true);
-		this.setHowManyParams(LAT_LON);
+		this.setHowManyParams(LAT_LON|COUNT);
 		this.setTmpFileName(FileBase.getProgramDirectory() + "/temp.gpx");
 	}
 	
@@ -47,7 +52,7 @@
 		return strBuf.toString();
 	}
 	
-	public String record(CacheHolderDetail ch, String lat, String lon) {
+	public String record(CacheHolderDetail ch, String lat, String lon, int count) {
 		StringBuffer strBuf = new StringBuffer(1000);
 
 		try{
@@ -64,7 +69,7 @@
 				strBuf.append("    <type>Geocache|").append(CacheType.transType(ch.type)).append("</type>\r\n");
 				String dummyAvailable = ch.is_available ? STRING_TRUE:STRING_FALSE;
 				String dummyArchived = ch.is_archived ? STRING_TRUE:STRING_FALSE;
-				strBuf.append("    <groundspeak:cache available=\"").append( dummyAvailable ).append( "\" archived=\"" ).append( dummyArchived).append( "\" xmlns:groundspeak=\"http://www.groundspeak.com/cache/1/0\">\r\n");
+				strBuf.append("    <groundspeak:cache id=\"" + count + "\" available=\"").append( dummyAvailable ).append( "\" archived=\"" ).append( dummyArchived).append( "\" xmlns:groundspeak=\"http://www.groundspeak.com/cache/1/0\">\r\n");
 				strBuf.append("      <groundspeak:name>").append(SafeXML.cleanGPX(ch.CacheName)).append("</groundspeak:name>\r\n");
 				strBuf.append("      <groundspeak:placed_by>").append(SafeXML.cleanGPX(ch.CacheOwner)).append("</groundspeak:placed_by>\r\n");
 				strBuf.append("      <groundspeak:owner>").append(SafeXML.cleanGPX(ch.CacheOwner)+"</groundspeak:owner>\r\n");
Ich habe mir das Garmin Oregon 300 zugelegt und habe natürlich das gleiche Problem mit CW und dem Einspielen der Cachebeschreibungen ins Oregon. Jedenfalls ist es sehr nett, das sich jemand mit dem Thema auseinandersetzt und einen Patch für den CW schreibt. Allerdings habe ich keine Ahnung wie ich den obigen Patch an- oder verwenden kann, könnte mir da irgendjemand behilflich sein?
Ich verwende die letzte Version (r1533) des CW in der 32bit Windows Version.

L.G.
 

König Moderig

Geowizard
Hallo,

ich schlage vor, dass du dich da erstmal mit dem Thema "CacheWolf selber bauen" beschäftigst. Dann kommen wir zum Patch ;)

Grüße,
Nik
 

Geo-Johnny

Geowizard
The Hawks schrieb:
Hallo,

ich schlage vor, dass du dich da erstmal mit dem Thema "CacheWolf selber bauen" beschäftigst. Dann kommen wir zum Patch ;)

Grüße,
Nik
Nein leider, da kann ich nicht mithalten. :eek:ps: Ich bin froh das der CW so läuft wie ich es brauche und das hat er mit Spidern und Garmin Export (samt Icons) bis dato immer zuverlässig getan. Neben dem Oregon verwende ich auch ein Vista HCx und habe bis jetzt keinen CW-GPX Export gebraucht.
Von tiefergreifenden Programmierungen habe ich leider keine Ahnung und beschränke mich daher auf die vorgefertigten Anwendungen.
Glaubt Ihr das es in künftigen CW Versionen möglich sein wird, die Cachebeschreibungen mit Hints und Logs zu exportieren, damit es vom Colorado oder Oregon verstanden wird? Ansonst hat das Oregon bei mir keine lange Überlebenschance, da geh ich eben wieder mit dem Vista, PDA und CW cachen. :hilfe:
 

MiK

Geoguru
Ich denke schon, dass soetwas irgendwann möglich sein wird. Leider hängen wir immer noch in der Entwicklung fest. Wenn SKG nicht bald wieder auftaucht wird es wohl bald eine Krisensitzung geben müssen, in der entschieden wird ob und wie es mit dem EVE-Umstieg weiter geht.
 

osdrog

Geonewbie
Hallo,
ich bin neu hir im Forum und weiß nicht genau, ob das noch von Interesse ist.
Ich habe mir selbst ein "Workaround" zu dem Problem der wechselnden cache IDs geschaffen.
Ich berechne ueber die Cachebeschreibung mit gnu "sum" eine Pruefsumme des Cache.
Solange sich die Beschreibung des Cache nicht ändert sollte da auch immer die gleiche Prüfsumme entstehen.
Es besteht zwar die theoretische Möglichkeit gleicher Prüfsummen. Diese halte ich allerdings in Anbetracht des verwendeten "BSD Prüfsumme" für unwarscheinlich.

Ich habe allerdings keine Ahnung wie man den Algorithmus ins Java Programm implementiert.
Ich habe das ganze als awk Programm gelöst, welches direkt "sum" als systemprogramm aufruft. Das awk lasse ich dann auf das GPX File von CW los.
Bei Bedarf kann ich das awk mal posten

Gruß osdrog
 
Oben