Ergebnis 1 bis 5 von 5
  1. #1
    iceman_fx ist offline Jungspund
    registriert
    30-10-2006
    Beiträge
    21

    Wie Titel+Link an geocodierte Marker übergeben ?

    Hi,

    ich habe einige Positionen, welche ich nun schon erfolgreich in Google Maps geocodiert habe.
    Nun sollen dazu Marker mit Titel und Link gesetzt werden.
    Ich erhalte zwar die Markerpositionen, aber alle haben den gleichen Titel und keinen Link.

    Könnte sich bitte einer mal meinen Code anschauen, und mir sagen, warum der Titel und die Links nicht richtig erstellt werden?

    Code:
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
    <script type="text/javascript">
                    var addr_a1e0c827b2f5c184bf72b0eb843db611 = [["Straße 1, 01111 Stadt 1, DE", "Titel 1", "seite1.html"], ["Straße 2, 02222 Stadt 2, DE", "Titel 2", "seite2.html"], ["Straße 3, 03333 Stadt 3, DE", "Titel 3", ""], ["Straße 4, 04444 Stadt 4, DE", "Titel 4", ""], ["Straße 5, 05555 Stadt 5, DE", "Titel 5", ""], ["Straße 6, 06666 Stadt 6, DE", "Titel 6", ""], ["Straße 7, 07777 Stadt 7, DE", "Titel 7", ""]];
            
            function createGeocodeMultiMap(usr_addresses, usr_zoom, usr_map, usr_id) {
                    if (usr_addresses.length > 0) {
                            usr_zoom = parseInt(usr_zoom);
    
                            var map;
                            var geocoder = new google.maps.Geocoder();
                            if (geocoder) {
                                    geocoder.geocode({'address': usr_addresses[0][0]}, function(results, status){
                                            if (status == google.maps.GeocoderStatus.OK) {
                                                    map.setCenter(results[0].geometry.location);
                                                    switch (usr_map) {
                                                            case "ROADMAP"          : map.setMapTypeId(google.maps.MapTypeId.ROADMAP); break;
                                                            case "SATELLITE"        : map.setMapTypeId(google.maps.MapTypeId.SATELLITE); break;
                                                            case "TERRAIN"          : map.setMapTypeId(google.maps.MapTypeId.TERRAIN); break;
                                                            default                         : break;
                                                    }
                                                    
                                                    for (var i=0; i < usr_addresses.length; i++)
                                                    {       var address = usr_addresses[i];
                                                    
                                                            geocoder.geocode({'address': address[0]}, function(results, status){
                                                                    if (status == google.maps.GeocoderStatus.OK) {
                                                                            var marker = new google.maps.Marker({
                                                                                    map: map,
                                                                                    position: results[0].geometry.location,
                                                                                    title: address[1]
                                                                            });
                                                                                    if (address[2] != "") {
                                                                                            google.maps.event.addListener(marker, "click", function(){
                                                                                                    top.location.href = "index.php?article_id=" + address[2];
                                                                                            });
                                                                                    }
                                                                                    
                                                                            alert(i);
                                                                    }
                                                            });
                                                    }
                                                    
                                            } else {
                                                    alert("Geocode was not successful for the following reason: " + status);
                                            }
                                    });
                            }
            
                            var myOptions = {
                                    zoom: usr_zoom,
                                    mapTypeId: google.maps.MapTypeId.HYBRID
                            }
                            map = new google.maps.Map(document.getElementById(usr_id), myOptions);
                    }
            }
        </script>
        
    <div id="map_canvasa1e0c827b2f5c184bf72b0eb843db611" class="gmaps_container" style="width: 100%; height: 300px"></div> 
    <script type="text/javascript"> 
    createGeocodeMultiMap(addr_a1e0c827b2f5c184bf72b0eb843db611, "13", "HYBRID", "map_canvasa1e0c827b2f5c184bf72b0eb843db611");
    </script>

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.672

    AW: Wie Titel+Link an geocodierte Marker übergeben ?

    In der Closure (deine anonyme Funktion, die du geocoder.geocode() übergibst) wird die Variable address nicht per Value an die Funktion gebunden, sondern wirklich als Variable - d.h. wenn du die Variable änderst (was du bei jedem Schleifendurchgang tust) wirkt sich das auch auf alle vorher erzeugten Funktionen aus.
    Dass dann kein Link vorhanden ist, liegt einfach daran, dass die letzte Adresse keinen Link hat...

    Um das zu umgehen, kannst du folgenden Trick verwenden:
    Code:
    var wrong = [];
    for (var i = 0; i < 2; i++){
    	wrong.push(function(){
    		alert(i);
    	});
    }
    for (var j = 0; j < 2; j++){
    	wrong[j]();
    }
    
    var right = [];
    for (var i = 0; i < 2; i++){
    	right.push(function(i){
    		return function(){
    			alert(i);
    		}
    	}(i));
    }
    for (var j = 0; j < 2; j++){
    	right[j]();
    }
    - musst du nur an dein Problem anpassen.

  3. #3
    iceman_fx ist offline Jungspund
    registriert
    30-10-2006
    Beiträge
    21

    AW: Wie Titel+Link an geocodierte Marker übergeben ?

    Ich geb's zu, ich kapiere es nicht.
    Wie übergebe ich eine Variable an solch eine Closure-Funktion ?

    Wenn ich einfach das address als weiteren Funktionsparameter angebe passiert rein gar nicht: undefined.
    Auch habe ich jetzt mitbekommen, dass die Werte schon da sind, aber aufgrund der zeitlichen Verzögerung der geocodierung dann nicht mehr gültig sind.

  4. #4
    iceman_fx ist offline Jungspund
    registriert
    30-10-2006
    Beiträge
    21

    AW: Wie Titel+Link an geocodierte Marker übergeben ?

    Ich hab's hinbekommen, indem ich einfach die Geocodierung der Marker in eine externe Funktion ausgelagert habe und dieser nun in der Schleife einfach das Teilarray übergebe.
    Nun entsteht auch keine zeitliche Verzögerung mehr.

    Falls es einen interessiert:

    Code:
    	function createGeocodeMultiMap(usr_addresses, usr_zoom, usr_map, usr_id) {
    		if (usr_addresses.length > 0) {
    			usr_zoom = parseInt(usr_zoom);
    
    			var map;
    			var geocoder = new google.maps.Geocoder();
    			if (geocoder) {
    				geocoder.geocode({'address': usr_addresses[0][0]}, function(results, status){
    					if (status == google.maps.GeocoderStatus.OK) {
    						map.setCenter(results[0].geometry.location);
    						switch (usr_map) {
    							case "ROADMAP" 		: map.setMapTypeId(google.maps.MapTypeId.ROADMAP); break;
    							case "SATELLITE" 	: map.setMapTypeId(google.maps.MapTypeId.SATELLITE); break;
    							case "TERRAIN" 		: map.setMapTypeId(google.maps.MapTypeId.TERRAIN); break;
    							default 			: break;
    						}
    					} else {
    						alert("Adresse konnte nicht gecodiert werden: " + status);
    					}
    				});
    			}
    	
    			var myOptions = {
    				zoom: usr_zoom,
    				mapTypeId: google.maps.MapTypeId.HYBRID
    			}
    			map = new google.maps.Map(document.getElementById(usr_id), myOptions);
    			
    			for (var i=0; i < usr_addresses.length; i++)
    			{	createGeocodeMarker(map, usr_addresses[i]);
    			}
    			
    		}
    	}	
    	function createGeocodeMarker(map, address) {
    		var geocoder = new google.maps.Geocoder();
    			geocoder.geocode({'address': address[0]}, function(results, status){
    				if (status == google.maps.GeocoderStatus.OK) {
    					
    					var marker = new google.maps.Marker({
    						map: map,
    						position: results[0].geometry.location,
    						title: address[1]
    					});
    						if (address[2] != "") {
    							google.maps.event.addListener(marker, "click", function(){
    								top.location.href = "index.php?article_id=" + address[2];
    							});
    						}
    				}
    			});	
    	}

  5. #5
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.672

    AW: Wie Titel+Link an geocodierte Marker übergeben ?

    Das ist das gleiche, was ich vorgeschlagen habe - nur in grün...

Ähnliche Themen

  1. titel übergeben
    Von gecko im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 16-06-2009, 09:09
  2. Antworten: 2
    Letzter Beitrag: 31-08-2008, 18:35
  3. Parameter per Link übergeben???
    Von petz_e im Forum Serverseitige Programmierung
    Antworten: 4
    Letzter Beitrag: 15-03-2006, 15:47
  4. link an function übergeben?
    Von Gamer20 im Forum JavaScript
    Antworten: 6
    Letzter Beitrag: 29-06-2005, 06:27
  5. formulardaten per link übergeben
    Von jogo im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 03-10-2001, 11:41

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •