Javascript 使用PHP的多个google地图标记

Javascript 使用PHP的多个google地图标记,javascript,php,mysql,google-maps,google-maps-api-3,Javascript,Php,Mysql,Google Maps,Google Maps Api 3,我环顾四周,发现了一些类似的情况,但没有找到解决办法。 我正在学习PHP和Javascript,因此代码可能有点不对劲,但下面是: 我有一个带有邮政编码搜索功能的谷歌地图——邮政编码和Lat/Long存储在Mysql数据库中。我现在需要的是一个功能,可以在地图上为特定的邮政编码放置任意数量的标记-我希望及时扩展该功能,根据缩放级别允许邮政编码+10英里等。下面的代码将返回标记的lat/long,但它在每个结果的末尾都会粘贴一个“,”,因此,当我将其传递到javascript时,它是一个无效参数-

我环顾四周,发现了一些类似的情况,但没有找到解决办法。 我正在学习PHP和Javascript,因此代码可能有点不对劲,但下面是:

我有一个带有邮政编码搜索功能的谷歌地图——邮政编码和Lat/Long存储在Mysql数据库中。我现在需要的是一个功能,可以在地图上为特定的邮政编码放置任意数量的标记-我希望及时扩展该功能,根据缩放级别允许邮政编码+10英里等。下面的代码将返回标记的lat/long,但它在每个结果的末尾都会粘贴一个“,”,因此,当我将其传递到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;
    }
}
<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>
Javascript:

// 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;
    }
}
<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>

//邮政编码函数调用
var myCenter=new google.maps.LatLng();
//标记函数调用
var locations=new google.maps.LatLng();
函数初始化()
{
var mapProp={
中心:迈森特,
缩放:14,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var mymap=new google.maps.Map(document.getElementById(“googleMap”),mapProp);
//要将标记添加到地图,请使用“地图”属性
var标记,i;
对于(i=0;i
任何帮助或建议都将不胜感激——我目前的知识只有PHP和Javascript(如前所述,这是初学者的知识)

忘记添加了,当我在Chrome中使用google developer工具分析页面时,我可以看到以下内容,确认它正在拾取lat/long,但末尾有一个逗号(我认为这与它是一个数组有关,但不确定如何处理它):


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

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

PHP代码

您仅回显所获取的最后一对lat/lng:

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代码中,您将坐标数组存储在
位置中

Javascript代码

现在在javascript代码中:

var locations = <?php getMarkers(); ?>
然后在循环中,您应该以数组的形式访问坐标:

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));
    }

}
var标记,i;
对于(i=0;i
不确定这是否是一种粗糙的方法,但我在PHP echo中做了以下操作:echo trim($Tlat.,“$Tlng,,”);这删除了逗号和我的地图显示-但是,我的标记没有出现,没有错误。。。我想我的javascript循环可能是问题所在?谢谢你的输入Pedro,我已经按照你的建议重新编写了代码。该函数可以工作,但是输出如下:53.60081497210000,-2.27129547711000[,],[,],[,],[,],[,],[,],[,]如果我将SQL结果限制为仅显示一个lat/lng,结果如下所示:53.60081497210000,-2.271295471100[]看起来像
getMarkers()
首先回显最后一个结果坐标,然后回显
$locations
数组。你能检查一下是否有两个回声吗?另外,在
$locations[]
作业中,您能检查两个变量
$Tlng
$Tlat
是否有数据吗?对于迟来的回复,佩德罗表示歉意-妻子正在进行化疗,这会对时间造成影响。我已经重新编写了SQL脚本,根据我的lat/long将半径恢复到5英里-并且在测试时可以正常工作。$locations数组现在在一个测试示例中看起来像这样:[[53.60081497210000,-2.27129547711000],[53.60081497210000,-2.27129547711000],[53.59287004000000,-2.28641317514000]]。因此,从这一点来看,我们似乎需要删掉正在传递的[],然后在Java中迭代它们?如果我错了,请纠正我。再次为迟来的响应道歉。明白了-你的代码最终死机了,我只是不得不在开发人员控制台中玩弄一些我错过的学生错误-难以捉摸的}符号四处浮动,忘记将我的地图从mymap重新命名为map。。。无论哪种方式,代码现在都可以完美地工作:-)非常感谢您花时间和耐心来处理这个Pedro-再次感谢