2009-09-02 4 views
0

J'ai demandé dans deux questions précédentes de placer plusieurs marqueurs à partir d'un fichier XML créé à partir de Lightroom, qui devait être transformé en degrés au lieu de degrés, minutes, secondes. Cette partie j'ai réussi, mais alors ...Encore une autre question de mon problème googlemaps

Les réponses à la question précédente étaient très instructives mais c'est ma faible compétence de programmation (premier projet) que je n'arrive pas à résoudre.

Le problème est que je veux montrer plusieurs marqueurs.

le code complet:

<?php 
    require('GoogleMapAPI.class.php'); 

$objDOM = new DOMDocument("1.0", 'utf-8'); 

$objDOM->preserveWhiteSpace = false; 

$objDOM->load("googlepoints.xml"); //make sure path is correct 

$photo = $objDOM->getElementsByTagName("photo"); 
foreach ($photo as $value) { 

    $album = $value->getElementsByTagName("album"); 
    $albu = $album->item(0)->nodeValue; 

    $description = $value->getElementsByTagName("description"); 
    $descriptio = $description->item(0)->nodeValue; 

    $title = $value->getElementsByTagName("title"); 
    $titl = $title->item(0)->nodeValue; 

    $link = $value->getElementsByTagName("link"); 
    $lin = $link->item(0)->nodeValue; 

    $guid = $value->getElementsByTagName("guid"); 
    $gui = $guid->item(0)->nodeValue; 

    $gps = $value->getElementsByTagName("gps"); 
    $gp = $gps->item(0)->nodeValue; 

$Deglon = str_replace("'", "/", $gp); 
$Deglon = str_replace("°", "/", $Deglon); 
$Deglon = str_replace("", "/", $Deglon); 


$str = $Deglon; 

$arr1 = str_split($str, 11); 

$date = $arr1[0]; // Delimiters may be slash, dot, or hyphen 
list ($latdeg, $latmin, $latsec, $latrichting) = split ('[°/".-]', $date); 

$Lat = $latdeg + (($latmin + ($latsec/60))/60); 

    $latdir = $latrichting.$Lat; 
If (preg_match("/N /", $latdir)) {$Latcoorl = str_replace(" N ", "+",$latdir);} 
     else {$Latcoorl = str_replace ("S ", "-",$latdir);} 
//$Latcoord=$Latcoorl.","; 

$date1 = $arr1[1]; // Delimiters may be slash, dot, or hyphen 
list ($londeg, $lonmin, $lonsec, $lonrichting) = split ('[°/".-]', $date1); 

$Lon = $londeg + (($lonmin + ($lonsec/60))/60); 

$londir = $lonrichting.$Lon; 

If (preg_match("/W /", $londir)) {$Loncoorl = str_replace("W ", "+",$londir);} 
     else {$Loncoorl = str_replace ("E", "-",$londir);} 


$Lonarr = array($Loncoorl); 
foreach ($Lonarr as &$LonArray); 

$Latarr = array($Latcoorl); 
foreach ($Latarr as &$LatArray); 

$titarr = array($titl); 
foreach ($titarr as &$titArray); 

$guarr = array($gui); 
foreach ($guarr as &$guaArray); 

$albuarr = array($albu); 
foreach ($albuarr as &$albuArray); 

print_r ($LonArray); 
print_r ($LatArray); 

print_r ($guaArray); 
print_r ($albuArray); 


    $map = new GoogleMapAPI('map'); 
    // setup database for geocode caching 
// $map->setDSN('mysql://USER:[email protected]/GEOCODES'); 
    // enter YOUR Google Map Key 
    $map->setAPIKey('ABQIAAAAiA4e9c1IW0MDrtoPQRaLgRQmsvD_kVovrOh_CkQEnehxpBb-yhQq1LkA4BJtjWw7lWmjfYU8twZvPA'); 

    $map->addMarkerByCoords($LonArray,$LatArray,$albuArray,$guaArray); 
} 
?> 

Le problème est que le "$ carte-> addMarkerByCoords (LonArray $, $ LatArray, $ albuArray, $ guaArray);" affiche seulement la dernière valeur des 4 tableaux.

Et donc il n'y a qu'un seul marqueur créé.

La sortie (print_r) de par exemple $ guaArray est IMG_3308IMG_3309IMG_3310IMG_3311IMG_3312 (5 noms de fichiers sont tirés de photographies).

La fonction addMarkersByCoords de la 'GoogleMapAPI.class.php' est comme ceci:

function addMarkerByCoords($lon,$lat,$title = '',$html = '',$tooltip = '') { 
     $_marker['lon'] = $lon; 
     $_marker['lat'] = $lat; 
     $_marker['html'] = (is_array($html) || strlen($html) > 0) ? $html : $title; 
     $_marker['title'] = $title; 
     $_marker['tooltip'] = $tooltip; 
     $this->_markers[] = $_marker; 
     $this->adjustCenterCoords($_marker['lon'],$_marker['lat']); 
     // return index of marker 
     return count($this->_markers) - 1; 
    } 

J'espère que quelqu'un peut me aider?

Répondre

0

Vous devez créer la nouvelle instance de la carte Google au-dessus du foreach

comme celui-ci

$map = new GoogleMapAPI('map'); 
    // setup database for geocode caching 
// $map->setDSN('mysql://USER:[email protected]/GEOCODES'); 
    // enter YOUR Google Map Key 
    $map->setAPIKey('ABQIAAAAiA4e9c1IW0MDrtoPQRaLgRQmsvD_kVovrOh_CkQEnehxpBb-yhQq1LkA4BJtjWw7lWmjfYU8twZvPA'); 

foreach() 
{ 
} 

maintenant, vous créez chaque boucle une nouvelle carte avec la dernière coord

+0

Comment puis-je coller un exemple de code? – Marco

+0

Déjà trouvé :) – Marco

0

Vos foreach boucles ne sont pas accomplissaient annything utiles:

$Lonarr = array($Loncoorl); 
foreach ($Lonarr as &$LonArray); 

$LonArray est juste un élément du tableau $Lonarr. Je pense que la boucle foreach ajoute chaque élément du tableau sur une grande chaîne ($ LonArray).

+0

Quand je fais print_r $ guaArray la sortie est IMG_3308IMG_3309IMG_3310IMG_3311IMG_3312 (5 noms de fichiers sont tirés de photographies). Donc le tableau est rempli ou devrait-il faire le tableau [0], [1], [2] etc., etc? – Plumbum7

+1

Ce n'est pas un tableau. Si c'était le cas, print_r montrerait quelque chose comme ceci: "Array ([0] => x [1] => y [2] => z)" –

+0

OK, je dois travailler dessus. – Plumbum7

Questions connexes