StepDoWn Captain Awesome Beitrag melden Geschrieben 1. April 2011 Hallo mighty ASB, aus purer Verzweiflung hoffe ich einfach auf einen Schuss ins Blaue, dass hier irgendwer hockt der sich mit sowas auskennt. Kurze Introduction: Ich arbeite an einer ASP.net-Site bei der Gewässerbiologen ein CSV-Datasheet hochladen können, und die Site dann aus den CSV-Infos Grafiken und Statistiken erstellt, bzw die Daten validiert. Da gehts um Pflanzenpopulationen auf verschiedenen Gewässerabschnitten etc. Das funktioniert alles wunderbar, noch ein bisserl zur Erklärung: Serverseitig "schwebt" ein StringArray im Hintergrund, in dem das geparste CSV drinsteht, das wird zum Erstellen der Grafiken usw verwendet. Wenn der User was updated, weil zB ein Name falsch geschrieben war, wird dieses Array geupdated, in letzter Konsequenz wird aus diesem Array ein neues CSV erstellt, das sich der User dann wieder runterladen kann. Das CSV enthält auch GPS-Daten (Lat/Lng), die ich in eine GoogleMap einlese - wenn also beispielsweise 50 Messpunkte im CSV stehen, und die Leute ein GPS-Teil mithatten, wissen sie Lat/Lng, und können sich nacher auf der GoogleMap anschauen, wo auf der Karte sie gemessen haben. Die Anbindung von GoogleMaps war relativ tricky, die vorgefertigten .Net-Libraries geben mir nicht alles, was ich brauche. Hab mir also eine Brücke zu Javascript gebaut - wie genau, kann ich auf Nachfrage gerne erläutern. Jedenfalls nun zum Problem: Die Leute sollen (clientseitig!) auf der GoogleMap ihre Markerpositionen verändern können, und diese Änderungen auch im CSV speichern. Klingt alles nicht so wild - ABER! Die GoogleMap läuft komplett clientseitig, ich habe die Marker so erstellt, dass sie eine Positionsänderung in einem HTML-Table angezeigt wird. Siehe hier: Wenn ich jetzt (wieder serverseitig) probiere diesen HTML-Table auszulesen bekomme ich natürlich nix zurück, weil serverseitig nicht bekannt ist (/sein soll, Security issues etc) was der User auf seinem Screen sieht. Es ist also irgendwie notwendig, dass ich den HTML-Table aus Clientsicht (bzw 4 Columns davon) an meinen Server übermittle. Habe zunächst an irgendeine Lösung über <form> gedacht, da ist jetzt aber ein bisserl blöd dass der HTML Table ja per Javascript befüllt wird, anfänglich ist nur die erste Reihe mit den Spaltenüberschriften vorhanden, nachträglich schickt mir meine GoogleMap also die Table Rows. Also auch deppert. Wiegesagt, totaler Schuss ins Blaue, eventuell ists eine banale Lösung, habe in anderen Foren auch schon gefragt. Go ASB! Sollte irgendjemand mehr Infos - oder Code - brauchen, bitte einfach sagen. Thx in advance! 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
bat /dev/NULL Beitrag melden Geschrieben 1. April 2011 (bearbeitet) hmmm wäre jetzt wohl zu simpel, aber aus deiner erklärung raus versteh ich ned ganz wieso du die positionsänderungen nur in die table schreibst aber in keine variable/array? dann hättest doch das problem nicht diese wieder auszulesen? edit: ah du hast die positionen gar nicht extra, die kommen vom google maps als fertige "table" ... wenn ich den vorletzten absatz jetzt richtig deute :/ dann würd ma nur einfallen, dass du dir eine art kleinen parser schreibst und das "zerlegst" um an die einzelnen positionen zu kommen?! (aber vermute wir reden hier aneinander vorbei, weil das wär wiederum wieder zu einfach ) nichts desto trotz wär für mich in dem fall ein java-applet wohl die bessere alternative gewesen :/ bearbeitet 1. April 2011 von bat 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
fronz2000 Weltklassecoach Beitrag melden Geschrieben 1. April 2011 (bearbeitet) Das machst du am besten über einen ganz normalen Request (eigentlich egal ob GET oder POST) an eine URL über die du den Service zur Eingabe der Daten bereitstellst. Die Clienseitigen Daten (also aus der HTML-Table) übergibst du am einfachsten als JSON Objekt an den Server. zB jQuery bietet diese Funktionalität schon (jQuery.get() / jQuery.post()). edit: bin jetzt auch nicht sicher ob ich dich richtig verstanden habe... wenn das Problem ist, dass du die Daten von Google nachträglich erhältst und nichts damit anfangen kannst... eventuell kannst du den Google Methoden ja eine Callback Funktion mitgeben, die die Daten übernimmt und dann an den Server weitergibt... ansonsten: ein bißchen Code posten schadet nie bearbeitet 1. April 2011 von fronz 2000 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 1. April 2011 Danke schonmal für die Antworten. hmmm wäre jetzt wohl zu simpel, aber aus deiner erklärung raus versteh ich ned ganz wieso du die positionsänderungen nur in die table schreibst aber in keine variable/array? dann hättest doch das problem nicht diese wieder auszulesen? edit: ah du hast die positionen gar nicht extra, die kommen vom google maps als fertige "table" ... wenn ich den vorletzten absatz jetzt richtig deute :/ dann würd ma nur einfallen, dass du dir eine art kleinen parser schreibst und das "zerlegst" um an die einzelnen positionen zu kommen?! (aber vermute wir reden hier aneinander vorbei, weil das wär wiederum wieder zu einfach ) nichts desto trotz wär für mich in dem fall ein java-applet wohl die bessere alternative gewesen :/ Najo, es ist so: ich definiere mir den Table mit seinen Spalten im ASP, also nur Überschriften, keine Datenreihen. In weiterer Folge lese ich per Javascript aus meinem Array (serverseitig!) die Markerpositionen ein, und jeder Marker bekommt einen sogenannten Listener - sobald er bewegt wird, schreibt er seine neue Position in den Table, und zwar in SEINE Position. Ein Listener schaut so aus: var marker0 = new GMarker(point, {draggable: true }); GEvent.addListener(marker0, 'dragstart', function() {map.closeInfoWindow();}); var tbl = document.getElementById('gps_tbl');var rowCount = tbl.rows.length;var row = tbl.insertRow(rowCount);var cell0 = row.insertCell(0);cell0.innerHTML = '1'; var cell1 = row.insertCell(1);cell1.innerHTML = 'ABCDEE';var cell2 = row.insertCell(2);cell2.innerHTML = '44.776';var cell3 = row.insertCell(3);cell3.innerHTML = 20.63;var cell4 = row.insertCell(4);cell4.innerHTML = '';var cell5 = row.insertCell(5);cell5.innerHTML = ''; var cell6 = row.insertCell(6);cell6.innerHTML = "<select name='markercolor'><option value='red'>red</option><option value='blue'>blue</option><option value='green'>green</option><option value='yellow'>yellow</option></select>"; var tbl_row = document.getElementById('gps_tbl').rows.length.toString(); [b]GEvent.addListener(marker0, 'dragend', function (latlng) {marker0.openInfoWindowHtml('Dragged to <br>' + latlng);var matchll = /\(([-.\d]*), ([-.\d]*)/.exec(latlng);var lat = parseFloat(matchll[1]);var lon = parseFloat(matchll[2]);lat = lat.toFixed(4);lon = lon.toFixed(4);var tbl = document.getElementById('gps_tbl');var row = tbl.rows[1];row.deleteCell(4);var cell1 = row.insertCell(4);cell1.innerHTML = lat;row.deleteCell(5);var cell2 = row.insertCell(5);cell2.innerHTML = lon;}); [/b] GEvent.addListener(marker0, 'dblclick', function() {marker0.setLatLng(new GLatLng(44.776, 20.63));map.closeInfoWindow();var tbl = document.getElementById('gps_tbl');var row = tbl.rows[1];row.deleteCell(4);var cell1 = row.insertCell(4);cell1.innerHTML = '';row.deleteCell(5);var cell2 = row.insertCell(5);cell2.innerHTML = ''; }); map.addOverlay(marker0); Beim Event 'dragend' öffnet er also erstmal ein InfoWindow, spuckt die neue Position aus, und in weiterer Folge sucht er sich den HTML-Table ('gps_tbl') und schreibt in die entsprechende Zeile die neue Position. Das passiert aber NUR Clientseitig! Dh ich müsste diese neuen Positionen in irgendeiner Form so aufbereiten, dass ich das "Paket" an Infos mit neuen Positionen per Userbefehl an den Server sende. Das ist dann eben wohl der Punkt, wo ich mit JSON/etc ansetzen müsste, aber da ich damit keine Erfahrung habe, weiß ich nicht obs tatsächlich der richtige Weg ist. Das mit dem Parser schreiben war meine erste Idee..das geht flott und unkompliziert, da bin ich sehr fit. Aber ich komm wiegesagt mit meinem Parser nicht an die Daten, die der User in seinem Browserfenster hat, ohne dass er mir das dezidiert übermittelt. Das machst du am besten über einen ganz normalen Request (eigentlich egal ob GET oder POST) an eine URL über die du den Service zur Eingabe der Daten bereitstellst. Die Clienseitigen Daten (also aus der HTML-Table) übergibst du am einfachsten als JSON Objekt an den Server. zB jQuery bietet diese Funktionalität schon (jQuery.get() / jQuery.post()). edit: bin jetzt auch nicht sicher ob ich dich richtig verstanden habe... wenn das Problem ist, dass du die Daten von Google nachträglich erhältst und nichts damit anfangen kannst... eventuell kannst du den Google Methoden ja eine Callback Funktion mitgeben, die die Daten übernimmt und dann an den Server weitergibt... ansonsten: ein bißchen Code posten schadet nie jQuery werd ich mir mal genauer anschauen ... klingt interessant. Wiegesagt, wenn ich den Table von der Clientseite mal in den Fingern hab, isses kein Problem mir meine nötigen Infos rauszuparsen. Da bin ich und auch ASP sehr fit. Das Problem ist für mich eben die Verbindung, und da ich mir das ganze Zeugs selbst beigebracht hab, hab ich halt teilweise große Lücken. Google selbst ist leider eine ziemliche Bitch was ihre Daten angeht , die API ist zwar einfach, aber es fehlen auch viele Dinge, die einfach essentiell wären. Das ganze zu KML konvertieren liegt eh noch vor mir .. obwohl die Google Maps das intern können, die API kanns ned ... 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
fronz2000 Weltklassecoach Beitrag melden Geschrieben 2. April 2011 (bearbeitet) Das mit dem Parser schreiben war meine erste Idee..das geht flott und unkompliziert, da bin ich sehr fit. Aber ich komm wiegesagt mit meinem Parser nicht an die Daten, die der User in seinem Browserfenster hat, ohne dass er mir das dezidiert übermittelt. Okay, dann war mein erster Hinweis ja gar nicht mal so übel. Mit jQuery den Inhalt der table an den Server zu schicken, ist ziemlich einfach $(document).ready(function() { //wird ausgeführt wenn das DOM fertig geladen ist var data = $(#gps_tbl).html(); //gibt dir den kompletten Inhalt der Tabelle. $.post("uebergabeUrl.asp", { data: data} ); //damit übergibst du den Inhalt der Tabelle per POST ans ServerSkript, in der Variable data steht der HTML-Code der Tabelle // du könntest auch noch eine callback-Funktion für Daten angeben die du als Antwort vom Server bekommst wenn du das benötigst }); Serverseitig musst du eben den Service definieren der die POST Daten entgegennimmt und parst. Du kannst aber die Daten aus der Tabelle auch relativ einfach direkt in jQuery auslesen: $(#gps_tbl tr td#tdId).html(); // gibt dir den Inhalt des td Elements mit der ID tdId... also exakt so wie bei einem CSS-Selektor bearbeitet 2. April 2011 von fronz 2000 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
mazunte Ω Beitrag melden Geschrieben 2. April 2011 http://de.wikipedia.org/wiki/Keyhole_Markup_Language Ev. für manche die es auch interessiert; 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 4. April 2011 Okay, dann war mein erster Hinweis ja gar nicht mal so übel. Mit jQuery den Inhalt der table an den Server zu schicken, ist ziemlich einfach $(document).ready(function() { //wird ausgeführt wenn das DOM fertig geladen ist var data = $(#gps_tbl).html(); //gibt dir den kompletten Inhalt der Tabelle. $.post("uebergabeUrl.asp", { data: data} ); //damit übergibst du den Inhalt der Tabelle per POST ans ServerSkript, in der Variable data steht der HTML-Code der Tabelle // du könntest auch noch eine callback-Funktion für Daten angeben die du als Antwort vom Server bekommst wenn du das benötigst }); Serverseitig musst du eben den Service definieren der die POST Daten entgegennimmt und parst. Du kannst aber die Daten aus der Tabelle auch relativ einfach direkt in jQuery auslesen: $(#gps_tbl tr td#tdId).html(); // gibt dir den Inhalt des td Elements mit der ID tdId... also exakt so wie bei einem CSS-Selektor Werd ich morgen gleichmal reinklopfen und mich damit spielen .. vielen Dank dir auf jeden Fall mal! @Maz: ja, das liegt noch vor mir... yayy. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
mazunte Ω Beitrag melden Geschrieben 5. April 2011 Werd ich morgen gleichmal reinklopfen und mich damit spielen .. vielen Dank dir auf jeden Fall mal! @Maz: ja, das liegt noch vor mir... yayy. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 5. April 2011 Im Prinzip sind Markuplanguages ja nix fürchterlich schlimmes, im Gegenteil, fühl mich relativ wohl darin. Aber trotzdem will ichs grad nicht machen. Hasse diesen Punkt in einem Projekt, wenn nurnoch Detailprobleme auftauchen, für die es keine schnelle Lösung gibt. Probleme, die den meisten nichtmal auffallen würden. Katastrophal. :aaarrrggghhh: Hey, hat jemand Lust ein Projekt zu übernehmen? 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
mazunte Ω Beitrag melden Geschrieben 6. April 2011 Hey, hat jemand Lust ein Projekt zu übernehmen? Um was gehts? Schreib mir eine PM; 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
fronz2000 Weltklassecoach Beitrag melden Geschrieben 6. April 2011 Hey, hat jemand Lust ein Projekt zu übernehmen? Nur wenns kein .NET Projekt ist 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 6. April 2011 Nur wenns kein .NET Projekt ist Kannstas gern neu schreiben, sind nur ~15.000 Zeilen Code. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
fronz2000 Weltklassecoach Beitrag melden Geschrieben 6. April 2011 In Java mach ich, bei gleicher Funktionalität, locker 20.000 daraus 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
StepDoWn Captain Awesome Beitrag melden Geschrieben 6. April 2011 In Java mach ich, bei gleicher Funktionalität, locker 20.000 daraus Vermutlich, mindestens. Hehe. Naja ne, die App war früher als Java Applet gelöst, war aber eben sehr veraltet und hat neu gemacht werden müssen. Und bevor ich mich hinsetz und ein Web Interface in Java zusammenbau, mach ichs mit .NET und bin der König. Eben mit kleineren Einbußen wie zB eben solchen Gschichten, oder GoogleMaps usw.. naja, wird scho werden. Jetzt erstmal in 2 Wochen eine ganze Bachelorarbeit zusammenstellen, schreiben, und abgeben. It is on. 0 Zitieren Diesen Beitrag teilen Link zum Beitrag Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.