• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Zeichnung und Marker speichern

JQJava

New member
Hallo,

habe ein follgendes Problem, meine gespeicherten Marker und Zeichnungen werden nach der Aktualisierung oder nach einem Radiobutton switch nicht mehr angezeigt.

crossposts: Zeichnung und Marker speichern (HTML, CSS und Javascript) - Perl-Community.de

Den Code seht ihr hier: Edit fiddle - JSFiddle

Also die Zeichnungen und marker speicher ich in einem Array. Und wenn ich auf den Button speichern klicke sollen mir die Zeichnungen und Marker gespeichert sein. Spricht wenn ich neu lade, dann sollen die zusehen sein, sowie wenn ich ein andere Bild switche und wieder auf das davorherige Bild zugreife, sollen die auch gesehen werden.

Bedanke mich im Voraus!

LG
 
Fehlerkonsole des Browser ist leer? Häufig basieren Fehlfunktionen aus Syntaxfehlern, dann sieht man die in der Konsole wunderbar.
 
Dann such doch mal im neuen komprimierten Quelltext die Stelle, wo das mit 'icons' vorkommt und dann schaust du, was der Komprimierer da im Vergleich zur unkomprimierten Version falsch gemacht hat.
 
Weitere Crossposts:
http://www.php.de/javascript-ajax-und-mehr/108599-zeichnungen-speichern.html
http://www.tutorials.de/threads/zeichnung-und-marker-speichern.398644

Wenn du Crossposts kennzeichnest, dann bitte vollständig.

Dann such doch mal im neuen komprimierten Quelltext die Stelle, wo das mit 'icons' vorkommt und dann schaust du, was der Komprimierer da im Vergleich zur unkomprimierten Version falsch gemacht hat.
Hiermit bin ich wohl im falschen Thread gelandet. Bitte ignorieren!

Also die Zeichnungen und marker speicher ich in einem Array. Und wenn ich auf den Button speichern klicke sollen mir die Zeichnungen und Marker gespeichert sein. Spricht wenn ich neu lade, dann sollen die zusehen sein, sowie wenn ich ein andere Bild switche und wieder auf das davorherige Bild zugreife, sollen die auch gesehen werden.
Das heißt, du willst sie permanent speichern? Oder worum genau geht es hier? Mit deinem Fiddle komme ich übrigens nicht klar. Braucht man wirklich soviel Gedöns, um das Problem zu zeigen oder kann man das reduzieren?
 
Zuletzt bearbeitet:
Ja, ich möchte sie aber erst dann speichern, wenn ich den speicher-Button geklickt habe. Ansonsten soll nichts gespeichert werden. Also ich weiß nicht ob man den ganzen Code braucht. Weil ich habe in dem Code drin wie man marker erstellt oder Zeichnungen.

habe es versucht zu reduzieren. Edit fiddle - JSFiddle
Es befinden sich, aber noch die Radios sowie das zeichnen und Marker erstellen.
 
Zuletzt bearbeitet:
Ja, ich möchte sie aber erst dann speichern, wenn ich den speicher-Button geklickt habe.
Ja, dann binde doch den .onclick Handler an den Schalter und mach dann ein Ajax Request mit den Werten gegen den Server. Da ich nicht weiß, wo genau das Problem liegt kann ich es erstmal nur so pauschal beantworten.
 
Das Problem liegt daran, dass mir nicht gespeichert wird. Und ich den Fehler nicht sehe. Wenn ich den Button save klicke, dann sollen die marker gespeichert werden. (Siehe code) wenn ich dann anderes Radio anklicke und dann wieder zurück davor das anklicke was gespeichert wurde, dann sehe ich die Speicherung nicht(keine Icons). Hast du ein Beispiel mit Ajax Request? Wäre echt dankbar!
 
Das Problem liegt daran, dass mir nicht gespeichert wird.
Ja, ohne Code geht das nicht.

Und ich den Fehler nicht sehe.
Ein Fehler setzt voraus, dass es für eine Anforderung bereits Code gibt. Wo finde ich den in deinem Fiddle? Habs nur überflogen, ist mir zuviel Code.

Wenn ich den Button save klicke, dann sollen die marker gespeichert werden.
Wie und wo sollen die denn gespeichert werden?

Hast du ein Beispiel mit Ajax Request? Wäre echt dankbar!
In der Doku ist eines dabei: jQuery.ajax() | jQuery API Documentation
 
Ja, ohne Code geht das nicht.
Verstehe ich nicht ganz! Wie ohne Code? ich habe doch ein Code


Ein Fehler setzt voraus, dass es für eine Anforderung bereits Code gibt. Wo finde ich den in deinem Fiddle? Habs nur überflogen, ist mir zuviel Code.
Code:
function checkedRadioBtn(url, size, extProj){
   var newL = new ol.layer.Image({
        source: new ol.source.ImageStatic({
            url: url, 
            imageSize: size,
            projection: newSizeProjection,
            imageExtent: newSizeProjection.getExtent()
        })
    });

   // check LastStates object LastStateas[nameofDeck]
   if(lastStates["bild-switch_4"]  && lastStates["bild-switch_4"].checked){
   ...// hier komme ich nicht weiter. Die ganzen icons sollen auf die newL angezeigt/gespeichert werden
  }
};
/////////////////////////Speichern von Marker und Zeichnungen///////////////////////////////////////////////////////////
var lastStates = {};
var radios = document.getElementsByName("bilder");
for(var r = 1; r<=radios.length; r++){
        lastStates["bild-switch_"+r] = {};
        lastStates["bild-switch_"+r].icons = null;
        lastStates["bild-switch_"+r].checked = false;
    }

function save(){
    //als test nur zwei implementiert
    lastStates["bild-switch_4"].icons = icons;
    lastStates["bild-switch_5"].icons = icons;
    
    lastStates["bild-switch_4"].checked = true;  
    lastStates["bild-switch_5"].checked = true;
};

var lastStates = {};
Kommentare lesen hilft auch weiter. Habe es extra kommentiert, damit der Leser/Helfer besser versteht und findig wird. ;-(

Wie und wo sollen die denn gespeichert werden?
Gespeichert sollen die in einem Array (meine Idee). In dem Array icons=[] befinden sich meine Marker. Die nach dem Button "Checklist speichern" geklickt wurde und dann mir nur für das entsprechende Radio speichert. Habe zig Bilder die mit Radio definiert wurden. Wenn ich eins anklicke und dann da bearbeite wie marker erstellen Zeichnungen etc. und dann den speichern Button klicke, soll es nur für das entsprechende Radio gespeichert werden und auch nach der Aktualisierung der Seite gesehen werden. Wenn kein Button geklickt wurde, dann soll nichts gespeichert werden.

Hoffe es hilft weiter ;-(
 
Zuletzt bearbeitet:
Verstehe ich nicht ganz! Wie ohne Code? ich habe doch ein Code
ich z.b. sehe mir nur code an, der auch hier gepostet wird.

das
Code:
for(var r = 1; r<=radios.length; r++){
        lastStates["bild-switch_"+r] = {};
        lastStates["bild-switch_"+r].icons = null;
        lastStates["bild-switch_"+r].checked = false;
    }
ist sinnlos, wenn dann wieder
Code:
var lastStates = {};
kommt

Gespeichert sollen die in einem Array (meine Idee). ... und auch nach der Aktualisierung der Seite gesehen werden.
nach der aktualisierung ist dein array wieder leer, da die seite ja neu geladen wird.
 
Zuletzt bearbeitet:
Verstehe ich nicht ganz! Wie ohne Code? ich habe doch ein Code
Das war ein Mißverständnis. Du siehst die Array Zuweisung als "speichern" an, ich aber nicht.

Kommentare lesen hilft auch weiter. Habe es extra kommentiert, damit der Leser/Helfer besser versteht und findig wird. ;-(
Da ich schon beim überfliegen sah, dass da nirgendwo irgendwas gespeichert wird, war das für mich irrelevant.

nach der aktualisierung ist dein array wieder leer, da die seite ja neu geladen wird.
Genau das.
JQJava, dafür hatte ich gefragt, wie und wo es gespeichert werden soll. Denn es einem Array zuzuweisen ist für mich kein "speichern" sondern Variablen im aktuellen Dokument definieren. Nach einem Reload ist das natürlich alles futsch. Daher nenne ich das in JS auch nicht speichern.

- - - Aktualisiert - - -

Vielleicht noch als kleine Hilfe: Es gibt zwei Arten, wie man mit Webseiten Daten permanent speichern kann: clientseitig und serverseitig.
Clientseitig: localstorage und Cookies.
Serverseitig: der Client sendet die Daten via <form> (mit Reload) oder via Ajax (ohne Reload) zum Server.
Entscheiden musst du selbst, wie du es machen willst. Nach der Entscheidung kann dir auch geholfen werden.

Und noch ein Crosspost kommt gerade rein: http://forum.openstreetmap.org/viewtopic.php?pid=427944
Was soll das? Die selbe Frage in 5 Foren zu stellen?

Es ist weitaus zielführender, sich auf ein Forum zu konzentrieren und dort die Hinweise und Antworten zeitnah auszuprobieren und Rückfragen zu beantworten! Wenn da immer so lange Lücken sind, vergeht einem der Spaß am antworten, weil man sich ja jedesmal neu einfinden muss.
 
Zuletzt bearbeitet:
Das war ein Mißverständnis. Du siehst die Array Zuweisung als "speichern" an, ich aber nicht.
Sorry, die Arrays icons=[], iconsCircle=[] etc. das sind meine Arrays damit ich bei Bildwechsel (Radiobutton) die icons (marker), iconsCircle und iconDraw nicht sehe, werden die gelöscht. Also in den Arrays befinden sich nur meine Marker, Circle etc. Mein Gedanke war nur das ich diesen Array auch für den speichern Button verwenden kann.

JQJava, dafür hatte ich gefragt, wie und wo es gespeichert werden soll. Denn es einem Array zuzuweisen ist für mich kein "speichern" sondern Variablen im aktuellen Dokument definieren. Nach einem Reload ist das natürlich alles futsch. Daher nenne ich das in JS auch nicht speichern.

- - - Aktualisiert - - -

Vielleicht noch als kleine Hilfe: Es gibt zwei Arten, wie man mit Webseiten Daten permanent speichern kann: clientseitig und serverseitig.
Clientseitig: localstorage und Cookies.
Serverseitig: der Client sendet die Daten via <form> (mit Reload) oder via Ajax (ohne Reload) zum Server.
Entscheiden musst du selbst, wie du es machen willst. Nach der Entscheidung kann dir auch geholfen werden.

Und noch ein Crosspost kommt gerade rein: Marker speichern (Page 1) / users: Germany / OpenStreetMap Forum
Was soll das? Die selbe Frage in 5 Foren zu stellen?

Es ist weitaus zielführender, sich auf ein Forum zu konzentrieren und dort die Hinweise und Antworten zeitnah auszuprobieren und Rückfragen zu beantworten! Wenn da immer so lange Lücken sind, vergeht einem der Spaß am antworten, weil man sich ja jedesmal neu einfinden muss.

Sorry für die zig Foren. Aber wenn bei drei Foren überhaupt keine Antwort kommt, habe ich mri dann gedacht in den anderen Foren mein Problem zu stellen. Ich kann auch das eine Forum meinen Beitrag löschen lassen.

Ich möchte clientseitig sowie auch Serverseitig speichern. Clientseitig habe ich probiert mti den localstorage, aber leider funktioniert das nicht. ;-(

- - - Aktualisiert - - -

ich z.b. sehe mir nur code an, der auch hier gepostet wird.
Ich habe mal hier im Forum mal gelesen, dass einige den langen Code gar nicht anschauen sondern es igendwo Online sehen wollen. Deshalb habe ich diesen http://jsfiddle.net/9cNU2/1/ erstellt. Hmm...
 
Ich möchte clientseitig sowie auch Serverseitig speichern.
Warum beides?

Clientseitig habe ich probiert mti den localstorage, aber leider funktioniert das nicht. ;-(
Warum zeigst du nicht, was du dahingehend versucht hast und welchen Fehler das gebracht hat?

Ich habe mal hier im Forum mal gelesen, dass einige den langen Code gar nicht anschauen sondern es igendwo Online sehen wollen. Deshalb habe ich diesen Edit fiddle - JSFiddle erstellt. Hmm...
Das ist in Ordnung. Man kann es nie allen Recht machen. Aber wenn sich jetzt herausstellt, dass es vielleicht nur ein kleiner Syntaxfehler war, als du localstorage versucht hast, dann spätestens wird klar, dass das Problem maßgeblich an deiner Fragestellung liegt und nicht daran, ob du Code hier oder im Fiddle zeigst. Denn wieso zeigst du uns die ganze Zeit Code der funktioniert und stellst dazu eine ganz andere Frage?
 
Ist dies eine falsche vorgehensweise? Also ich habe clientseitig probiert.


Warum zeigst du nicht, was du dahingehend versucht hast und welchen Fehler das gebracht hat?
Hier mein Code:
Code:
var iconsSave = [], iconsSaveCircle;
function save(){
  localStorage.setItem("iconsSave", icons);
   localStorage.setItem("iconsCircle", iconsCircle);
};

//mein checkRefresh Funktion basiert auf den Marker und Circle. Die nach einer x und y Koordinaten sowie Radiuseingabe zusammen hängen.
var iconsCircle=[], icons=[], vectorLayerC, vectorLayerI, vectorLayer, chRadius, chIcon, vectorSourceC, vectorSourceI, xCoo, yCoo, rad;
function checkRefresh(){

    xCoo = document.getElementById("coordinate-x").value;
    yCoo = document.getElementById("coordinate-y").value;
    rad = document.getElementById("rad").value;

    if( xCoo == "" || yCoo == "" || xCoo == "" && yCoo == ""){
        alert("Bitte geben Sie die fehlenden Koordinate an!");
    }else{
        if(xCoo != "" && yCoo != "" && rad != ""){

            vectorSourceC = new ol.source.Vector();
            vectorSourceI = new ol.source.Vector();

            vectorLayerC = new ol.layer.Vector({
                source: vectorSourceC
            });
            
            vectorLayerI = new ol.layer.Vector({
                source: vectorSourceI
            });
            
            //Kreis wird mit entsprechenden Eingabewerte hinzugefügt
            var iconFeatureC = new ol.Feature({
                geometry: new ol.geom.Circle([xCoo, yCoo], rad)
            });

            //Kreisgestaltung
            var iconStyleC = new ol.style.Style({
                stroke: new ol.style.Stroke({
                    color: 'red',
                    width: 2
                }),
                fill: new ol.style.Fill({
                    color: 'rgba(255,0,0,0.2)'  
                })
            });

            iconFeatureC.setStyle(iconStyleC);
            vectorSourceC.addFeature(iconFeatureC);    
            
           //Icon wird an der eingegebenen Position hinzugefügt
            var coords = [xCoo, yCoo];
            var iconFeatureI = new ol.Feature({
                geometry: new ol.geom.Point(coords),
                name: 'hi',
                population: 4000,
                rainfall: 500
            });

            var iconStyleI = new ol.style.Style({
                image: new ol.style.Icon(/** @type {olx.style.IconOptions} */({
                    anchor: [15, 48],
                    anchorXUnits: 'm',
                    anchorYUnits: 'm',
                    opacity: 0.75,
                    src: 'data/icon.png'
                }))
            });

            iconFeatureI.setStyle(iconStyleI);
            vectorSourceI.addFeature(iconFeatureI);
            ////////////////////////////////////////////////
            
            iconsCircle.push(vectorLayerC);
            icons.push(vectorLayerI);
            map.addLayer(vectorLayerC);
            map.addLayer(vectorLayerI);

            //circles und icons werden an die checkboxen gebunden
            chRadius = new ol.dom.Input(document.getElementById("visibleRadius"));
            for(var j = 0; j<iconsCircle.length; j++){
                 chRadius.bindTo('checked', iconsCircle[j], 'visible');
            }
            
            chIcon = new ol.dom.Input(document.getElementById("visibleIcon"));
            for(var i = 0; i<icons.length; i++){
                chIcon.bindTo('checked', icons[i], 'visible');
            }
            }else
            if(xCoo != "" && yCoo != "" && rad == ""){
                var iconFeature = new ol.Feature({
                    geometry: new ol.geom.Point([xCoo, yCoo]),
                    name: 'hi',
                    population: 4000,
                    rainfall: 500
                });

                var iconStyle = new ol.style.Style({
                    image: new ol.style.Icon(/** @type {olx.style.IconOptions} */({
                        anchor: [15, 48],
                        anchorXUnits: 'm',
                        anchorYUnits: 'm',
                        opacity: 0.75,
                        src: 'data/icon.png'
                    }))
                });

                iconFeature.setStyle(iconStyle);

                var vectorSource = new ol.source.Vector({
                    features: [iconFeature]
                });

                vectorLayer = new ol.layer.Vector({
                    source: vectorSource
                });

                icons.push(vectorLayer);

                map.addLayer(vectorLayer);
                
                //icons werden an das checkbox gebunden
                chIcon = new ol.dom.Input(document.getElementById("visibleIcon"));
                for(var i = 0; i<icons.length; i++){
                    chIcon.bindTo('checked', icons[i], 'visible');
                }
            }
    }
};

//hier switche ich zwischen zig Bildern
function checkedRadioBtn(url, size, extProj){
   var allLayers = map.getLayers().getArray()[0];
    map.removeLayer(allLayers);

    var newSizeProjection = new ol.proj.Projection({
        code: 'metrics',//'EPSG:4326', //'pixel',
        units: 'm', //als Meter //'pixels', es gibt degrees und ft
        extent: [extProj[0], extProj[1], extProj[2], extProj[3]]  //Xmin, Ymin, Xmax, Ymax
    });
   newL = new ol.layer.Image({
        source: new ol.source.ImageStatic({
            url: url, 
            imageSize: size,
            projection: newSizeProjection,
            imageExtent: newSizeProjection.getExtent()
        })
    });

    map.addLayer(newL);

    localStorage.getItem('iconsSave ');
    localStorage.getItem('iconsSaveCircle');
};

Und dieser Code mit setItem und getItem klappt es nicht. Ich möchte erst speichern wenn ich den Button "speichern" gedrückt habe. Diese Funktion ist "function save()". Wenn auf den Button klicke, sollte mir gespeichert sein. Das scheint zu funktionieren, aber soweit ich auf ein anderes Bild switche und dann wieder auf das vorherige Bild klicke, dann sind meine Marker nicht zu sehen die normal gespeichert sein sollten.

Hoffe, wird jetzt klar worauf ich hinaus will. ;-(
 
Ist dies eine falsche vorgehensweise? Also ich habe clientseitig probiert.
Normalerweise reicht es, Daten ENTWEDER im Client ODER im Server zu speichern. Was bringt dich zu der Idee, beides zu wollen?

localStorage.setItem("iconsSave", icons); und localStorage.setItem("iconsCircle", iconsCircle); sehen doch schon gut aus. Aufgrund des Plural-S vermute ich allerdings, dass icons und iconsCircle keine Strings sind sondern Objekte bzw. Arrays. Kann das sein? Das geht nicht. Du musst jedes Key-Value Paar einzeln schreiben. Erster Parameter ist der Key, zweiter die Value. Dafür musst du dir ein Key-Value Datenmodell überlegen und dann darüber iterieren.
 
Ja, icons und iconsCircle sind Arrays. In denen sind Marker und einmal alle Kreise gespeichert worden.
Ich verstehe das irgendwie mit den Key-Value nicht. Kannst du mir das erklären? Trotz recherche verstehe ich das nicht so ganz. Mit localStorage noch nie auseinander gesetzt.
 
Ich verstehe das irgendwie mit den Key-Value nicht. Kannst du mir das erklären?
Cookies, Arrays etc. sind Key-Value-Paare. D.h., jedem Key wird ein value zugeordnet.
Also Schlüsselname = Wert. Hast du nun den Schlüsselnamen, kannst du mit ihm auch den ihm zugeordneten Wert zugreifen.
 
Wenn man ein Array hat könnte man z.B. durch das Array iterieren und den Index als Key und den Wert als Value nehmen. Dann hätte man das Array in ein Key-Value Format gebracht.
 
Zurück
Oben