2014-02-17 257 views
2

我已经看过周围所以发现了一些类似于我的情况,但还没有找到解决方案。 我正在学习PHP,Javascript,所以代码可能有点关闭,但这里有:多个谷歌地图标记与PHP

我有一个带有邮政编码搜索功能的谷歌地图工作 - 邮政编码和纬度/长度存储在Mysql DB。我现在需要的是为地图上的任何数量的标记放置特定的邮政编码的功能 - 我希望能够根据缩放级别扩展功能以允许邮政编码+ 10英里等等。下面的代码将带回标记的纬度/经度,但它在每个结果的末尾都粘上一个“,”,因此当我将它传递给javascript时,它是一个无效参数 - 请确保我知道方式我做的这一切都是在效率 - 我学习,我沿着:)

PHP函数去:

// get markers Function 
if(!function_exists("getMarkers")) 
{ 

//Get Markers Function 
function getMarkers() 
    { 
//prep the query 
include ('../../secure/db_conn.php'); 

$currentPcode = searchPostcode($_POST['postcode']); 

$tsearch = $con->prepare("SELECT t.CompanyName, p.lat, p.lng FROM Traders t, cpo_data p WHERE t.Postcode LIKE p.Postcode"); 
$tsearch->bindParam(1,$currentPcode, PDO::PARAM_STR); 
$tsearch->execute(); 
$tresults = $tsearch->fetchAll(PDO::FETCH_ASSOC); 

foreach ($tresults as $row) 
{ 

$Company = $row['CompanyName']; 
$Tlat = (string)$row['p.lat']; 
$Tlng = (string)$row['p.lng']; 

} 
echo $Tlat .", " .$Tlng; 
    } 
} 

的Javascript:

<script src="http://maps.googleapis.com/maps/api/js?sensor=false"> 
</script> 

<script> 

//postcode function call 
var myCenter=new google.maps.LatLng(<?php echo searchPostcode($_POST['postcode']); ?>); 

//markers function call 
var locations=new google.maps.LatLng(<?php echo getMarkers(); ?>); 

function initialize() 
{ 
var mapProp = { 
    center:myCenter, 
    zoom:14, 
    mapTypeId:google.maps.MapTypeId.ROADMAP 
    }; 

var mymap=new google.maps.Map(document.getElementById("googleMap"),mapProp); 

// To add the marker to the map, use the 'map' property 
var marker, i; 
for (i = 0; i < locations.length; i++) 
    { 
    marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(locations[i]), 
    map: mymap 
    }); 

    google.maps.event.addListener(marker, 'click', (function(marker, i) { 
    return function() { 
     infowindow.setContent(locations[i]); 
     infowindow.open(mymap, marker); 
    } 
    })(marker, i)); 
    } 

} 
google.maps.event.addDomListener(window, 'load', initialize); 

</script> 

任何帮助或建议将不胜感激 - 我目前的知识只有PHP和Javascript(如前所述,它是初学者的知识)。

忘了补充,当我在Chrome中使用谷歌开发者工具来分析页面时,我可以看到以下证明它正在拾取纬度/长度,但在最后用逗号(我认为这是做它是一个数组,但不知道如何处理它):

var locations=new google.maps.LatLng(53.51139969260000, -2.54091408438000,);

+0

不知道这是否是一种粗糙的做法,但我在PHP回声中做了以下操作:echo trim($ Tlat。“,”。$ Tlng,',');这删除了逗号和我的地图显示 - 但是,我的标记没有出现,没有错误...我想我的JavaScript循环可能是问题? –

回答

2

如果要放置从数据库中获取的标记,你有两个问题:

PHP代码

您呼应只有最后一对纬度/经度牵强:

foreach ($tresults as $row) 
{ 

    $Company = $row['CompanyName']; 
    $Tlat = (string)$row['p.lat']; 
    $Tlng = (string)$row['p.lng']; 

} 
echo $Tlat .", " .$Tlng; 

一个解决办法是:

$locations = array(); 
foreach ($tresults as $row) 
{ 

    $Company = $row['CompanyName']; 
    $Tlat = (string)$row['p.lat']; 
    $Tlng = (string)$row['p.lng']; 

    $locations[] = "[" . $Tlat .", " .$Tlng . "]"; 
} 
echo srpintf("[%s]", implode(", ", $locations); 

然后在你的JavaScript代码你存储坐标的数组中locations

JavaScript代码JavaScript代码

现在:

var locations = <?php getMarkers(); ?> 

您现在的位置有数组是这样的:

[[53.51139969260000, -2.54091408438000], [...], ...] 

然后在循环中,你应该访问坐标如下:

var marker, i; 
for (i = 0; i < locations.length; i++) 
    { 
    marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(locations[i][0], locations[i][1]), 
    map: mymap 
    }); 

    google.maps.event.addListener(marker, 'click', (function(marker, i) { 
    return function() { 
     infowindow.setContent(locations[i][0] + ", " + locations[i][1]); 
     infowindow.open(mymap, marker); 
    } 
    })(marker, i)); 
    } 

} 
+0

感谢您的输入Pedro,我已按照您的建议重新处理了我的代码。该函数可以工作,但输出如下所示:53.60081497210000,-2.27129547711000 [[,],[,],[,],[,],[,]]如果我限制我的SQL结果只显示一个纬度/ lng,结果如下所示:53.60081497210000,-2.27129547711000 [] –

+0

看起来'getMarkers()'首先回显最后的结果坐标,后面会回显'$ locations'数组。你可以检查是否有两个“回声”?并且,在'$ locations []'赋值中,你能检查两个变量'$ Tlng'' $ Tlat'是否有数据吗? –

+0

对于迟到的回复道歉Pedro--妻子正在经历Chemo,准时付费。 –