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

Weisse Flächen auf der MovingMap

ColleIsarco

Geowizard
Hallo,

Mich hatte gestört, dass bei der Kartenzeigen immer weisse Flächen sichtbar waren, wenn die Karte nicht bis zum Rand des Bildschirmschirms reichte.
Also habe ich meine zur Zeit sehr begrenzte Freizeit dazu genutzt, um das abzuändern.

Um in den Genuss des vollständig gefüllten Bildschirms zu kommen, gibt es einen Menüpunkt auf der MovingMap (gelbes Dreieck) der `Weisse Flächen füllen' heißt.
Diese Einstellung wird in den Preferences abgespeichert.

Eine Einschränkung gibt es: Sobald die Karte gezoomt wird, wird dieser Modus temporär deaktiviert.

Gruß
ColleIsarco
 

MiK

Geoguru
Interessant. Kannst Du das etwas näher erläutern? Womit werden die weißen flächen gefüllt? Mit den angrenzenden Karten? Wie wirkt sich das auf den Speicherbedarf aus? Was geschieht mit den Überlappungen?
 
OP
ColleIsarco

ColleIsarco

Geowizard
Hallo
MiK schrieb:
Interessant. Kannst Du das etwas näher erläutern? Womit werden die weißen flächen gefüllt? Mit den angrenzenden Karten? Wie wirkt sich das auf den Speicherbedarf aus? Was geschieht mit den Überlappungen?

Gefüllt wird mit angrenzenden Karten. Alles andere wäre eher blöd (Behaupte ich zumindest).

Thema Speicherbedarf: Das hat mir schon etwas Sorgen gemacht. Ich lasse die Java-Version mit 64MByte Heap (Standard halt) laufen und da gibt es bei mir keine Probleme und der Garbage-Collector meldet auch keine beunruhigenden Heap-Werte.
Auch wegen dem Speicherbedarf habe ich mich bewußt dafür entschieden, dass diese Funktionen explizit eingeschaltet werden muss. Wie sich das auf einen schwachbrüstigen PDA auswirkt, kann ich leider nicht testen, da mir keiner zur Verfügung steht. Hier wären Erfahrungswerte anderer User interessant.

Um den Speicherbedarf zu minimieren, wird die zusätzliche Map in Kacheln zerlegt und nur diese Kacheln im Speicher gehalten. Das ist speichertechnisch interessant, wenn mehrere Karten nachgeladen werden müssen, um die weissen Flächen zu füllen.

Gruß
ColleIsarco
 

MiK

Geoguru
Noch ein paar Fragen dazu:

Wie machst Du das mit den Überlappungen? Die wird dann immer von der "Hauptkarte" angezeigt?

Könnte man das Verfahren auch dazu nutzen, auch von der Hauptkarte nur die nötigen Teile zu laden? So dass immer nur die Teile der Karten geladen werden, die aktuell zur Anzeige benötigt werden (+ ein Stück drumrum, so dass man nicht bei jeder kleinen Bewegung nachladen muss)

Bisher konnte ich nur die Java-Version testen. Ab und zu bleibt dabei ein Stückchen in der Ecke frei. Gibt es da eine Begrenzung?

Auf dem PDA werde ich später noch testen.
 

pfeffer

Geowizard
wow! da bin ich ja heiß drauf!

leider klappt es bei mir nicht.

Ich habe fillWhiteArea=true gesetzt (in den Einstellungen ging das nicht?) - habe ich das vcielleicht versehentlich durch meine Commits zerstört?
EDIT: ahh - habe die Umschaltmöglichkeit im Menü der Karte entdeckt (gelbes Dreieck)

Trotzdem bekomme ich weiße Flächen in der Karte. Wo dran könnte das liegen?

Gruß,
Pfeffer.
 

pfeffer

Geowizard
jetzt ist es mir gelungen ein paar mal die neue Funktion zu sehen :)

Allerdings scheinen noch ein paar Bugs drin zu sein. Bekomme z.B.
Code:
java.lang.NullPointerException
	at CacheWolf.navi.MovingMap.updateTileForWhiteArea(MovingMap.java:1049)
	at CacheWolf.navi.MovingMap.updatePosition(MovingMap.java:1001)
	at CacheWolf.navi.MovingMapPanel.onEvent(MovingMap.java:2075)
	at ewe.ui.Control.sendToListeners(Control.java)
	at ewe.ui.Control.postEvent(Control.java)
	at ewe.ui.Menu.postEvent(Menu.java)
	at ewe.ui.Control.notifyAction(Control.java)
	at ewe.ui.Menu.penReleased(Menu.java)
	at ewe.ui.Control.penClicked(Control.java)
	at ewe.ui.Control.onPenEvent(Control.java)
	at ewe.ui.Menu.onPenEvent(Menu.java)
	at ewe.ui.Control.onEvent(Control.java)
	at ewe.ui.Menu.onEvent(Menu.java)
	at ewe.ui.Control.postEvent(Control.java)
	at ewe.ui.Menu.postEvent(Menu.java)
	at ewe.ui.Window.doPostEvent(Window.java)
	at ewe.ui.Window$windowThread.run(Window.java)
	at ewe.sys.mThread.run(mThread.java)
	at ewe.sys.Coroutine.run(Coroutine.java)
java.lang.NullPointerException
	at CacheWolf.navi.MovingMap.updateTileForWhiteArea(MovingMap.java:1049)
	at CacheWolf.navi.MovingMap.updatePosition(MovingMap.java:1001)
	at CacheWolf.navi.MovingMapPanel.onEvent(MovingMap.java:2075)
	at ewe.ui.Control.sendToListeners(Control.java)

Gruß,
Pfeffer.
 
OP
ColleIsarco

ColleIsarco

Geowizard
MiK schrieb:
Noch ein paar Fragen dazu:

Wie machst Du das mit den Überlappungen? Die wird dann immer von der "Hauptkarte" angezeigt?
:???: In meinen Tests, als falsche Kartenelemente angezeigt wurden, sah es immer so aus, als würde die Hauptkarte obenauf liegen. Sicher sagen kann ich das nicht.
Dümmlicherweise passen meine Kartenschnipsel exakt zusammen, da die alle vom LVermGeo-Server kommen.

MiK schrieb:
Könnte man das Verfahren auch dazu nutzen, auch von der Hauptkarte nur die nötigen Teile zu laden? So dass immer nur die Teile der Karten geladen werden, die aktuell zur Anzeige benötigt werden (+ ein Stück drumrum, so dass man nicht bei jeder kleinen Bewegung nachladen muss)
Da hatte ich drüber nachgedacht. Prinzipiell könnte das gehen. Ich denke, so wie Du, dass das Sinn macht. Ich habe davon aber vorerst abgesehen, um die Kompatibilität zum alten Verfahren nicht zu gefährden. Zur Zeit lade ich das Image aber komplett ein, um es dann in die benötigten Kacheln zu zerlegen. Ich habe gerade erst gesehen, dass es auch geeignete Konstruktoren für die Klasse Image gibt, die wohl Rechtecke aus den Bildern lesen können :kopfwand: . Ich werde damit mal experimentieren.

MiK schrieb:
Bisher konnte ich nur die Java-Version testen. Ab und zu bleibt dabei ein Stückchen in der Ecke frei. Gibt es da eine Begrenzung?
Mach noch mal ein Update. Ich habe da noch etwas entdeckt, was Probleme verursachen könnte. Ich schreib noch was dazu an Pfeffer.

Gruß
ColleIsarco
 
OP
ColleIsarco

ColleIsarco

Geowizard
Hallo
pfeffer schrieb:
wow! da bin ich ja heiß drauf!

leider klappt es bei mir nicht.

Ich habe fillWhiteArea=true gesetzt (in den Einstellungen ging das nicht?) - habe ich das vcielleicht versehentlich durch meine Commits zerstört?
EDIT: ahh - habe die Umschaltmöglichkeit im Menü der Karte entdeckt (gelbes Dreieck)

Trotzdem bekomme ich weiße Flächen in der Karte. Wo dran könnte das liegen?

Gruß,
Pfeffer.
Es muss eine grundlegende Eigenschaft erfüllt sein: Die Karten müssen gleich skaliert sein (die Methode läßt ein paar Prozent Unterschied zu).
Die weissen Ecken (bei mir meistens unten links) hatte ich heute Mittag auch noch mal gehabt, mittlerweile sind die bei mir verschwunden.
Mache ggf. nochmal ein Update aktuell ist die Version 2115 und teste nochmal.

Gruß
ColleIsarco
 

MiK

Geoguru
ColleIsarco schrieb:
Dümmlicherweise passen meine Kartenschnipsel exakt zusammen, da die alle vom LVermGeo-Server kommen.
Kein Wunder, dass Dich dann die weißen Flächen so sehr gestört haben. Deswegen laden wir per WMS mit einer gewissen Überlappung.

ColleIsarco schrieb:
Ich habe gerade erst gesehen, dass es auch geeignete Konstruktoren für die Klasse Image gibt, die wohl Rechtecke aus den Bildern lesen können :kopfwand: . Ich werde damit mal experimentieren.
Das hört sich interessant an. Wäre gut, wenn Du das hinbekommen würdest.

Hast Du denn mal mit der Windows-Exe getestet? Ich bekomme beim Laden der Karte, wenn Dein neuer Schalter aktiv ist diese Fehlermeldung:
Code:
Error starting moving map: System could not create bitmap
 
OP
ColleIsarco

ColleIsarco

Geowizard
pfeffer schrieb:
jetzt ist es mir gelungen ein paar mal die neue Funktion zu sehen :)

Allerdings scheinen noch ein paar Bugs drin zu sein. Bekomme z.B.
Code:
java.lang.NullPointerException
	at CacheWolf.navi.MovingMap.updateTileForWhiteArea(MovingMap.java:1049)
	at CacheWolf.navi.MovingMap.updatePosition(MovingMap.java:1001)
        ...
Was hast Du gemacht :schockiert: Du sollst doch die Karten mit
Code:
String[] t = {".png", ".gif", ".jpg", ".bmp"};
enden lassen.

Aber mal im Ernst: Wenn dort eine NPE auftritt, dann muss es weiter oben bereits gekracht haben, da auf alle benutzten Objekte bereits zugeriffen wurde. Die einzige Variante wäre, dass der Filename der Karte nicht mit einer der oben genannten Extensions (Case-Sensitiv!) endet und die Methode getImageFilename daher null zurückliefert. Dann aber hast Du das Problem auch an der Stelle, an der bisher die aktuelle Karte gesetzt wurde. Der Code zum Laden der Karte stammt nämlich von dort. Ich fang das jetzt mal analog zu der Methode setMap ab.
Kannst Du mal schauen, welche Dateiendung hier benutzt wurde?
Aus Erfahrung kann ich mir gut vorstellen, dass Sie bei Dir PNG, GIF, JPG oder BMP lauten. Möglicherweise sollte in obiger Liste auch noch JPEG stehen.
Wenn ich mit meiner Vermutung richtig liege, dann ändere ich das equals in ein equalsIgnoreCase. Oder spricht irgendwas dagegen, dass einfach zu machen?
Die Methode von der ich Rede liegt in der Klasse Common und heißt getImageName.

Gruß
ColleIsarco
 
OP
ColleIsarco

ColleIsarco

Geowizard
Hallo MiK
MiK schrieb:
ColleIsarco schrieb:
Dümmlicherweise passen meine Kartenschnipsel exakt zusammen, da die alle vom LVermGeo-Server kommen.
Kein Wunder, dass Dich dann die weißen Flächen so sehr gestört haben. Deswegen laden wir per WMS mit einer gewissen Überlappung.
Das ist der WMS-Server für Rheinland-Pfalz. Aber die weissen Flächen sind trotzdem da und irgendwie zu groß. Vor allem auf dem Desktop bei maximierten Fenster.

Hast Du denn mal mit der Windows-Exe getestet? Ich bekomme beim Laden der Karte, wenn Dein neuer Schalter aktiv ist diese Fehlermeldung:
Code:
Error starting moving map: System could not create bitmap
:kopfwand: Da wurde irgendeine Exception gefangen. OOM scheidet aus, weil das ein Error ist. Gibt es irgendeinen StackTrace? (Lass mich raten: Nein)

Mit der Windows-Exe habe ich allerdings das Problem, dass die Version erst gar nicht starten kann.
Die Cacheliste wird geladen und dann kommt eine Exception in main():
LinkageError: LambertProjection - parameterlist to long for this VM.
Keine Ahnung wodran das jetzt wieder liegt.

Eine Ergänzung noch: zum Bauen der EXE habe ich einfach das Ant-Skript gestartet.

Irgendwie ärgere ich mich jetzt total, dass diese Funktion noch so viele Probleme bereitet. :eek:ps: Aber andererseits kann ich nicht alle Fälle beim Test abdecken zumal ja jeder andere Eingabedaten hat.
Gruß
ColleIsarco
 

pfeffer

Geowizard
also ein Ignore-Case kann wohl nicht schaden.
Aber: Ich habe garede mal mein rund 5.000 Kartendateien (ok, die Hälft .wfl) durchgeguckt: keine mit groß geschriebende Endung dabei.

Ich habe noch mal eine:
Code:
java.lang.NullPointerException
	at CacheWolf.navi.MovingMap.updateTileForWhiteArea(MovingMap.java:1049)
	at CacheWolf.navi.MovingMap.updatePosition(MovingMap.java:1001)
java.lang.NullPointerException
	at CacheWolf.navi.MovingMap.updateTileForWhiteArea(MovingMap.java:1049)
	at CacheWolf.navi.MovingMap.updatePosition(MovingMap.java:1001)
	at CacheWolf.navi.MovingMap.mapMoved(MovingMap.java:756)
	at CacheWolf.navi.MovingMapPanel.mapMoved(MovingMap.java:1891)
	at CacheWolf.navi.MovingMap.mapMoved(MovingMap.java:756)
	at CacheWolf.navi.MovingMapPanel.mapMoved(MovingMap.java:1891)
	at CacheWolf.navi.MovingMapPanel.imageNotDragged(MovingMap.java:1795)
	at ewe.graphics.MosaicPanel.penReleased(MosaicPanel.java)
	at ewe.ui.Control.stopDragging(Control.java)
	at ewe.ui.Control.onPenEvent(Control.java)
	at ewe.graphics.MosaicPanel.onPenEvent(MosaicPanel.java)
	at CacheWolf.navi.MovingMapPanel.onPenEvent(MovingMap.java:1861)
	at ewe.ui.Control.onEvent(Control.java)
	at CacheWolf.navi.MovingMapPanel.onEvent(MovingMap.java:2178)
	at ewe.ui.Control.postEvent(Control.java)
	at ewe.ui.Window.doPostEvent(Window.java)
	at ewe.ui.Window$windowThread.run(Window.java)
	at ewe.sys.mThread.run(mThread.java)
	at ewe.sys.Coroutine.run(Coroutine.java)
"weiße Fläche füllen" war eingeschaltet, es wurden aber weiße Flächen angezeigt (weiß aber grad nicht sicher, ob es benachbarte Karten in passender Auflösung gegeben hätte)
Ich weiß nicht, ob sie beim Verschieben oder erst beim Klick auf das gelbe Dreieck geworfen wurde.

Gruß,
Pfeffer.

EDIT: wegen der LambertProjection: mach mal nen SVN-Update ;-) (die Fehlermeldung wurde durch meine Commite verursachte - und behoben)

EDIT2: ich find's super, dass Du Dich dadran gemacht hast! kleine Fehler gibt es immer, weil man selbst nicht mit allen möglichen Daten testen kann. Ging mir mit UTM auch grad so...

EDIT3: Die Exception kommt beim Verschieben.
 
OP
ColleIsarco

ColleIsarco

Geowizard
Hallo
pfeffer schrieb:
also ein Ignore-Case kann wohl nicht schaden.
Aber: Ich habe garede mal mein rund 5.000 Kartendateien (ok, die Hälft .wfl) durchgeguckt: keine mit groß geschriebende Endung dabei.
Ich muss jetzt weg und bin erst am Montag wieder zu erreichen.
Ich habe noch eingebaut, dass bei einem leeren ImageNamen eine MessageBox angezeigt wird. Jetzt sollte diese erscheinen oder der NPE tritt in Zeile 1056 auf.

Gruß
ColleIsarco
 

pfeffer

Geowizard
ja, jetzte kommt die Fehlermeldung als Fenster :)
sollte drin bleiben.
Grund für das Nichtfinden scheint mit ein doppelter backslash zu sein:
[...]/Cachewolf-Daten/Daten/maps//topo/Bonn/FF1320021E-de_topo_200_s26.9_c53.16974190-8.62626842.wfl

Gruß,
Pfeffer.
 

MiK

Geoguru
ColleIsarco schrieb:
Das ist der WMS-Server für Rheinland-Pfalz. Aber die weissen Flächen sind trotzdem da und irgendwie zu groß. Vor allem auf dem Desktop bei maximierten Fenster.
Du hast Die Karten mit Cachewolf geladen? Dann haben sie per default eine Überlappung. Klar bekommt man je nach Überlappung und größe des Displays trotzdem weiße Flächen. Aber auf QVGA doch recht wenig. Trotzdem ist Deine Funktion die bessere Lösung. Es ging mir ja eher darum, dass dabei vorhandene Überlappungen intelligent gehandhabt werden.

ColleIsarco schrieb:
Mit der Windows-Exe habe ich allerdings das Problem, dass die Version erst gar nicht starten kann.
Die Cacheliste wird geladen und dann kommt eine Exception in main():
LinkageError: LambertProjection - parameterlist to long for this VM.
Keine Ahnung wodran das jetzt wieder liegt.
Das hat Pfeffer mittlerweile gefixt.
 

maierkurt

Geowizard
Na DAS ist doch mal eine Neuerung!
SUPER und Hut ab!

Im Debug-Modus unter Eclipse habe ich es gerade kurz getestet, ab und an bleiben noch ein paar weiße Flecken.
Ich werde jetzt gleich mal auf dem PDA (320x240) testen.

Gruß, maierkurt
 

MiK

Geoguru
Habe gerade den ersten Test auf dem PDA gemacht: Die gute Nachricht: Hier kommt keine Fehlermeldung. Die schlechte: Hier werden aber auch die weißen Flächen nicht gefüllt. Wenn weiße Flächen vorhanden sind, dann hängt es nach dem Verschieben immer ein bisschen, aber nichts passiert.

Was mir auch noch aufgefallen ist: Im Menü kann man nicht erkennen, ob die Funktion aktiv ist. Hier sollte wie bei dem Schalter drüber je nach Einstellung das Icon gewechselt werden.
 

pfeffer

Geowizard
und? wie sieht es auf dem PDA aus?

Bei mir fehlt tatsächlich das Bild - habe ich mir mal extra erzeugt, damit ich solche Fehler entdecke und CW sich dadurch nicht anfängt unzuverlässig zu verhalten...

Bei mir läuft es jetzt in Java, ist allerdings sehr langsam: dauert bis zu 10" bis das Bild vollständig ist.


Gruß,
Pfeffer.
 

maierkurt

Geowizard
und? wie sieht es auf dem PDA aus?

Ich zitiere da einfach mal MiK:
MiK schrieb:
Habe gerade den ersten Test auf dem PDA gemacht: Die gute Nachricht: Hier kommt keine Fehlermeldung. Die schlechte: Hier werden aber auch die weißen Flächen nicht gefüllt. Wenn weiße Flächen vorhanden sind, dann hängt es nach dem Verschieben immer ein bisschen, aber nichts passiert.

Auf dem PC läuft es mit der Javaversion recht flüssig, bei der static-Version kommt dann eine Fehlermeldung
Code:
ewe.sys.SystemResourceException: System could not create bitmap
        at ewe.fx.Image._nativeCreate(Image.java:<native method>)
        at ewe.fx.Image.<init>(Image.java)
        at ewe.fx.Image.<init>(Image.java)
        at CacheWolf.navi.MovingMap.putImageIntoCache(MovingMap.java:1121)
        at CacheWolf.navi.MovingMap.generateTiles(MovingMap.java:1098)
        at CacheWolf.navi.MovingMap.updateTileForWhiteArea(MovingMap.java:1076)
        at CacheWolf.navi.MovingMap.updatePosition(MovingMap.java:1001)
        at CacheWolf.navi.MovingMap.mapMoved(MovingMap.java:756)
        at CacheWolf.navi.MovingMapPanel.mapMoved(MovingMap.java:1898)

java.lang.RuntimeException: Could not create native window!
        at ewe.ui.Gui.setupNewWindow(Gui.java)
        at ewe.ui.Gui.execFrame(Gui.java)
        at ewe.ui.Form.doShowExec(Form.java)
        at ewe.ui.Form.exec(Form.java)
        at CacheWolf.navi.MapsList.getBestMap(MapsList.java:130)
        at CacheWolf.navi.MovingMap.updateTileForWhiteArea(MovingMap.java:1037)
        at CacheWolf.navi.MovingMap.updatePosition(MovingMap.java:1001)
        at CacheWolf.navi.MovingMapPanel.onEvent(MovingMap.java:2082)
        at ewe.ui.Control.sendToListeners(Control.java)

Schade.

Was hätte im "Infofenster" stehen sollen? Das bleibt bei mir leer.
 

pfeffer

Geowizard
ich bekomme ein "Fehler an MS berichten" Fenster... keine nutzbare Fehlermeldung, wenn ich die Windows-Exe oder .ewe nehme :-(

Aber Ressouce-Exception von Dir: da müsste man mit -Xmxs beim CW-Start was dran machen können.

Gruß,
Pfeffer.
 
Oben