PlanetGMaps Forum

planetGMaps

Die deutsche Google Maps Community.
Die Möglichkeiten sind da!

Forum

Forum Suche | Forum Übersicht | Anmerkung: registrierte Benutzer können sich über neue Einträge benachrichtigen lassen | Anmerkung: registrierte Benutzer können sich über neue Einträge benachrichtigen lassen


zum vorhergehenden Thema Thema drucken zum nächsten Thema

Übersicht ::  Google Maps API ::  Google Maps API ::  Mit SQL erstellte Marker/map(s) "beißen" sich mit geocode via Form
moderiert von: Steffen

Zum aktuellsten Beitrag 

Mit SQL erstellte Marker/map(s) "beißen" sich mit geocode via Form

hansi-r6 verfasst: 13.05.2008, 00:07
Neu hier
Neu hier
hansi-r6

registriert: Mai. 2008
Beiträge: 6

Status: offline
letzter Besuch: 23.05.08
Grüßt Euch.

Ich bastel hier grade an einem kleineren Projekt herum. Bin rel. weit gekommen aber nun bräuchte ich eine kleine Hilfe.

Zur Sache bzw zum aktuellen Aufbau: es werden Marker via SQL eingelesen und dargestellt sobald die Seite geladen wird(Umkreis 5 km um einen fixen Punkt).
Dieser wird auch als map.center festgelegt(akt. Karlsruhe) in meiner load Funktion.

Eine Form am top der Seite ermöglicht die Eingabe einer Adresse welche dann via Geocoder als neuer map.center umgesetzt werden soll.

Hier liegt nun das Problem. Ich hab bei Google auf der Seite geschaut und ein Beispiel implementiert...nur hab ich das Problem das sobald ich Suche die aktuellen Marker verschwinden.

Was nach kurzem überlegen auch klar ist, da in der "Geocode" funktion eine neue Map definiert ist. da er ja sonst meckert das dass Objekt 'map' leer ist.

Hat jemand eine Idee wie ich die Map aus meiner load Funktion, in der ja auch meiner Marker geladen werden, an diese Fkt übergeben kann, damit die Marker ehalten bleiben?

Quasi "var map = new GMap2(document.getElementById("map"));" gloabl definieren. Und nicht in jeder Funktion neu, damit alle Fkt. die es brauchen Zugriff haben.

Es soll dann später so sein, dass die Marker nicht mehr am Start geladen werden sondern nur noch nach dem Geocode. Von diesem werden dann lat, lng an das PHP-File übergeben welches die SQL Abfrage mit integrierter Umkreissuche macht und nur diese Marker in einem XML zurück liefert. Welches dann geparsed wird und die Marker anzeigt.

Gruß & Danke schon mal

Hannes
Nach oben  Profil PM senden
 
micker verfasst: 13.05.2008, 22:02
Häufiger hier
Häufiger hier
micker

registriert: Jun. 2007
Beiträge: 23

Status: offline
letzter Besuch: 16.07.08
Hallo Hannes,

ehrlich gesagt versteht ich das Problem nicht ganz, denn der Clint-Geocoder benötigt nicht zwangsweise Karte, und weil das Erzeugen einer neuen Karte für jedes Ergebnis einer Suchanfrage absolut keinen Sinn macht.

Allerdings muss man sich dann Gedanken machen wie die Marker (die bei Dir jetzt verschwinden) bei einer neuen Anfrage entfernen will oder nicht.

Prinzipell ist es möglich Variablen die Karten referenzieren zu kopieren.
Könntest Du mal die Geocode Funktion posten?

Nach oben  Profil PM senden
 
micker verfasst: 13.05.2008, 22:13
Häufiger hier
Häufiger hier
micker

registriert: Jun. 2007
Beiträge: 23

Status: offline
letzter Besuch: 16.07.08
oder machen wir's kurz... steht irgendwo map.clearOverlays(); ?
Wenn ja bitte auskommentieren, wenn nein bitte, die geocode funktion mit callback funktion, in der die marker geadded werden, posten.
Nach oben  Profil PM senden
 
hansi-r6 verfasst: 13.05.2008, 23:39
Neu hier
Neu hier
hansi-r6

registriert: Mai. 2008
Beiträge: 6

Status: offline
letzter Besuch: 23.05.08
Das mit dem clear overlay hatte ich schon gemacht. Hatte ich vergessen zu erwähnen. Hier mal der Code

also akutell sieht es so aus:
Diese Fkt. wird geladen beim Start:

function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(49.006290,8.529502), 10);

GDownloadUrl("asuche.php?wert=49.006290", function(data)
{
var XML = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var address = markers[i].getAttribute("address");
var stadt = markers[i].getAttribute("stadt");
var offenwo = markers[i].getAttribute("offenwo");
var type = markers[i].getAttribute("type");
var sonstiges = markers[i].getAttribute("sonstiges");
var tel = markers[i].getAttribute("tel");
var fax = markers[i].getAttribute("fax");
var lat2 = parseFloat(markers[i].getAttribute("lat"));
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, stadt, address, type, offenwo, sonstiges, tel, fax, lat2);
map.addOverlay(marker);

}
});
}
}

Und diese wird durch den Geocoder bedient nachdem man auf den "such" Button clickt.

function addAddressToMap(response) {
//map.clearOverlays();
if (!response || response.Status.code != 200) {
alert("Sorry, we were unable to geocode that address");
} else {
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1],
place.Point.coordinates[0]);
map.setCenter(point, 13);
marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(place.address + '
' +
'Country code: ' + place.AddressDetails.Country.CountryNameCode);
}

}




function createMarker(point, stadt, address, type, offenwo,sonstiges, tel, fax, lat2) {
var markersq = new GMarker(point, customIcons[type]);
var HTML = "" + stadt + "
" + address + "

" + offenwo + "
" + sonstiges +"
"+ tel+ "
" + fax + "
" + lat2;
GEvent.addListener(markersq, 'click', function() {
markersq.openInfoWindowHtml((this.getPoint().lng().toFixed(5) )+(HTML));
});
return markersq;
}

// showLocation() is called when you click on the Search button
// in the form. It geocodes the address entered into the form
// and adds a marker to the map at that location.
function showLocation() {
var address = document.forms[0].q.value;
geocoder.getLocations(address, addAddressToMap);
}


Danke
Nach oben  Profil PM senden
 
micker verfasst: 14.05.2008, 12:16
Häufiger hier
Häufiger hier
micker

registriert: Jun. 2007
Beiträge: 23

Status: offline
letzter Besuch: 16.07.08
also ich vermute mal:
dass die load() funktion beim Laden der Seite ausgeführt wird, in der die Karte erzeugt wird.
UND die Funktion(-sdefiniton von) GDownloadUrl enthält, die dann aufgerufen wird.
Hier wird dann für das Sucherergebnis mit createMarker(...) die Marker erzeugt und zur Karte hinzugfügt.

Dein "Such"-Button ruft wahrscheinlich die Funktion showLocation auf, deren callbackfunktion addAddressToMap
ist.
Diese Zentriert zwar die Karte auf das Element des Suchergebnisse mit zoomlvl 13,
aber added keine Marker...
(ich denke hier müsste eigentlich diese GDownloadUrl stehen oder aufgerufen werden)

Also woher kommen deine Marker wenn Du auf den "Such"-Button klickst?
Nach oben  Profil PM senden
 
micker verfasst: 14.05.2008, 12:30
Häufiger hier
Häufiger hier
micker

registriert: Jun. 2007
Beiträge: 23

Status: offline
letzter Besuch: 16.07.08
versuch das mal, ist aber logischerweise ungetestet
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(49.006290,8.529502), 10);
}
}

function addAddressToMap(response) {
//map.clearOverlays();
if (!response || response.Status.code != 200) {
alert("Sorry, we were unable to geocode that address");
} else {
place = response.Placemark[0];
point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
map.setCenter(point, 13);
marker = new GMarker(point);
map.addOverlay(marker);
marker.openInfoWindowHtml(place.address + '
' +
'Country code: ' + place.AddressDetails.Country.CountryNameCode);
GDownloadUrl("asuche.php?wert="+place.Point.coordinates[1]", function(data)
{
var XML = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var address = markers[i].getAttribute("address");
var stadt = markers[i].getAttribute("stadt");
var offenwo = markers[i].getAttribute("offenwo");
var type = markers[i].getAttribute("type");
var sonstiges = markers[i].getAttribute("sonstiges");
var tel = markers[i].getAttribute("tel");
var fax = markers[i].getAttribute("fax");
var lat2 = parseFloat(markers[i].getAttribute("lat"));
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, stadt, address, type, offenwo, sonstiges, tel, fax, lat2);
map.addOverlay(marker);
}
});

}

}

Nach oben  Profil PM senden
 
hansi-r6 verfasst: 17.05.2008, 00:59
Neu hier
Neu hier
hansi-r6

registriert: Mai. 2008
Beiträge: 6

Status: offline
letzter Besuch: 23.05.08
Also danke erstmal für deine Mühen... hab leider wegen Job wenig Zeit gehabt, aber heute doch noch gebastelt... Egal wie ich es dreh und wende es kommt nicht vorran. In einem Document macht er die Marker aus der DB im Anderen setzt er das Center richtig zeigt aber keine Marker an. Isch wärd noch narrisch.

Hier mal der Code welche Center macht aber keine Icons zeigt:

[code]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>

<title>Google Maps API Example: Simple Geocoding</title>





var map = null;
var geocoder = null;

function initialize() {
if (GBrowserIsCompatible()) {

map = new GMap2(document.getElementById("map_canvas"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(49.006290,8.529502), 10);
geocoder = new GClientGeocoder();
var coord = GLatLng(" ");

}
}

Search.setOnLoadCallback(initialize);
var clusterer = new Clusterer(map);

function showAddress(address) {


if (geocoder) {
geocoder.getLatLng(
address,
function(point) {
if (!point) {
alert(address + " not found");
} else {
map.setCenter(point, 13);
var marker = new GMarker(point);
GEvent.addListener ( marker , 'dragend' , function () { alert
( this.getPoint().lng().toFixed(5) ); });
map.addOverlay(marker);
marker.openInfoWindowHtml(address);

GDownloadUrl("asuche.php?wert=49.006290", function(data)
{
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var address = markers[i].getAttribute("address");
var stadt = markers[i].getAttribute("stadt");
var offenwo = markers[i].getAttribute("offenwo");
var type = markers[i].getAttribute("type");
var sonstiges = markers[i].getAttribute("sonstiges");
var tel = markers[i].getAttribute("tel");
var fax = markers[i].getAttribute("fax");
var lat2 = parseFloat(markers[i].getAttribute("lat"));
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var marker = createMarker(point, stadt, address, type, offenwo, sonstiges, tel, fax, lat2);
map.addOverlay(marker);

}
})

}
}
);
}
}
function createMarker(point, stadt, address, type, offenwo,sonstiges, tel, fax, lat2) {
var marker = new GMarker(point, customIcons[type]);
var html = "" + stadt + "
" + address + "

" + offenwo + "
" + sonstiges +"
"+ tel+ "
" + fax + "
" + lat2;
GEvent.addListener(marker, 'click', function() {
marker.openInfoWindowHtml((this.getPoint().lng().toFixed(5) )+(html));
});
return marker;
}



</head>

<body onload="initialize()" onunload="GUnload()">
<form action="#" onsubmit="showAddress(this.address.value); return false">


<input type="text" size="60" name="address" value="Karlsruhe Germany" />
<input type="submit" value="Go!" />



</form>

</body>
</html>
[/code]
kann doch net so schwer sein ein Center bei ner Map zu erreichen und dann Icons ein zu blenden. Mit ner reinen XML Datei hab ich es übrigens schon mal geschafft...nur wo es jetzt dynamisch werden soll gibts Ärger.

Gruß mit der Bitte um Hilfe

Hannes
Nach oben  Profil PM senden
 
micker verfasst: 17.05.2008, 18:39
Häufiger hier
Häufiger hier
micker

registriert: Jun. 2007
Beiträge: 23

Status: offline
letzter Besuch: 16.07.08
könnte es sein dass der die Icons nur um Karlsruhe macht, aber nicht an anderen Orten?
das wäre dadurch begründet, dass du bei der
asuche.php immer den gleichen Lat-Wert mitgibst.
GDownloadUrl("asuche.php?wert=49.006290", function(data)
{
Nach oben  Profil PM senden
 
hansi-r6 verfasst: 17.05.2008, 18:50
Neu hier
Neu hier
hansi-r6

registriert: Mai. 2008
Beiträge: 6

Status: offline
letzter Besuch: 23.05.08
Jo is richtig... weil wegen ich such auch zum testen nur um Karlsruhe ;-)
Nach oben  Profil PM senden
 
micker verfasst: 17.05.2008, 19:04
Häufiger hier
Häufiger hier
micker

registriert: Jun. 2007
Beiträge: 23

Status: offline
letzter Besuch: 16.07.08
ok das sagt der debugger? springt er in die
GDownloadUrl funktion?
wird dort die Schleife durchlaufen?
Weiss Du wie oft er die Schleife beim Ergebnis in KA durchlaufen müsste?
mach mal in die for-Schleife ein alert(i);
und schau was passiert
Nach oben  Profil PM senden
 
hansi-r6 verfasst: 17.05.2008, 20:54
Neu hier
Neu hier
hansi-r6

registriert: Mai. 2008
Beiträge: 6

Status: offline
letzter Besuch: 23.05.08
Also hab es jetzt anders gelöst:

Hab mich am Shop findr Bsp von Google orientiert. Das läuft nun Top genau so wie ich es wollte...hat ja auch nur 3h Anpassung und umschreiben in Anspruch genommen ;-)

Danke an alle

anbei noch der Link zum Example von Google

http://code.google.com/su...134&topic=&ctx=sibling
Nach oben  Profil PM senden
 
nethaase verfasst: 02.06.2008, 23:47
Neu hier
Neu hier
nethaase

registriert: Jun. 2008
Beiträge: 1

Status: offline
letzter Besuch: 02.06.08
Aloa ihr GMapler.

Bin ganz junges Küken auf diesem Gebiet, dennoch nicht abgeneigt und schon ein begeistert, wie schnell man so schöne Karten basteln kann. Egal....

Nun zur Frage. ich weiß nicht obs dir noch weiterhilft oder ob dus überhaupt noch benötigst. nur der vollständigkeit halber:

[quote=hansi-r6]Quasi "var map = new GMap2(document.getElementById("map"));" gloabl definieren. Und nicht in jeder Funktion neu, damit alle Fkt. die es brauchen Zugriff haben.[/quote]

einfach das "var" vor map weglassen. mit "var" deklariert man in js innerhalb einer funktion LOKALE variablen, d.h. sie sind nur innerhalb dieser gültig. außerhalb einer funktion definiert man mit "var" GLOBALE variablen, d.h. diese sind im gesamten script gültig. lässt man bei der variablendeklaration innerhalb einer funktion "var" weg, erhält man ebenfalls eine globale variable.
nachzulesen in der HTML+js bibel: http://de.selfhtml.org/ja.../sprache/variablen.htm

moral von der geschicht': lässt du das "var" vor map weg, müsstest du eigentlich in allen funktionen auf ein und die selbe "map" zugreifen können.


gruß,
nethaase
Nach oben  Profil PM senden
 
micker verfasst: 04.06.2008, 14:34
Häufiger hier
Häufiger hier
micker

registriert: Jun. 2007
Beiträge: 23

Status: offline
letzter Besuch: 16.07.08
@nethaase
Hi junger GoogleMaps-Jedi :-)
Vielen Dank für den Hinweis, der sehr gut ist, denn man hat in der Regel nur eine map, und das sollte die gleiche sein.
Aber diese mit dem weglassen von var ist eine Eigenheit von JS. Wenn Du die "lokale Variable" ausserhalb definiert, wird sie global und das ist in fast jeder Programmiersprache so.
Generell sollte man aber Globale Variablen vermeiden, da es durch sogenannte Seiteneffekte zu Fehlern kommen kann, die nicht mehr nachvollbar sind.



editiert von: micker, 04.06.2008, 01:35 Uhr
Nach oben  Profil PM senden
 


User online:

Diese Angaben basieren auf den Useraktivitäten der letzten 10 Minuten

^ Top | © 2006 planet-gmaps.de | css | xhtml