【问题标题】:Google maps markers with javascript and PHP谷歌使用 javascript 和 PHP 映射标记
【发布时间】:2012-03-10 13:31:31
【问题描述】:

我正在构建一个应用程序,该应用程序有一个包含人名、他们的信息和他们当前位置的数据库。 我设法使用 Google maps javascript API 创建了一个地图,并标记了您当前的位置。但是,我似乎无法使用 PHP 循环为我的数据库中的每个人放置一个带有信息窗口的标记。这是我的代码:

    lat = position.coords.latitude;
lon = position.coords.longitude;

//init map
myOptions = {
   center: new google.maps.LatLng(lat, lon),
   zoom: 15,
   mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var image = 'http://i43.tinypic.com/v48d1w.png';
var loca = new google.maps.LatLng(lat, lon);
var currnetLocationMarker = new google.maps.Marker({
position: loca,
map: map,
animation: google.maps.Animation.DROP,
icon: image
});
var contentString;
var marklatlng;
<?php
require("connect.php");
$query = mysql_query("SELECT * FROM gigs");
$i = 0;
while($data = mysql_fetch_array($query))
{
echo "
contentString = 'Name: <b>" . $data['name'] . "</b><br> Info: <b>" . $data['desc'] . "    </b>';
var infowindow" . $i . " = new google.maps.InfoWindow({
content: contentString
});
marklatlng = new google.maps.LatLng(" . $data['lat'] . ", " . $data['lng'] . ");
var marker" . $i . " = new google.maps.Marker({
position: markLatlng,
map: map,
});
google.maps.event.addListener(marker" . $i . ", 'click', function() {
infowindow" . $i . ".open(map,marker" . $i . ");
});

";
$i++;
}
?>

【问题讨论】:

    标签: javascript php google-maps


    【解决方案1】:

    最好对您的数据进行 json_encode,将其传递给 javascript 中的变量,然后使用 javascript 循环遍历它。更好的是使用 AJAX 请求来获取数据。

    <?php
    function fetchGigs() {
      $gigs = new Array();
      $query = mysql_query("SELECT * FROM gigs");
      while($gig = mysql_fetch_array($query)) {
        $gigs[] = $gig; 
      }
      return $gigs;
    }
    

    在你的 javascript 中:

    <script>
    // your other code...
    var gigs = <?php echo json_encode(fetchGigs()); ?>
    
    var createMarkerAt = function(lat, lng) {
      var latLng, marker;
      latLng = new google.maps.LatLng(lat, lng);
      marker = new google.maps.Marker({
        position: latLng,
        map: map,
      });
      return marker;
    }
    
    var createMarkerForGig = function (gig) {
      var marker, info;
      marker = createMarkerAt(gig.lat, gig.lng);
      info = new google.maps.InfoWindow({
        content: 'Name: <b>"' + gig.name + '"</b><br>Info: <b>"' + gig.desc + '"</b>'
      });
      google.maps.event.addListener(marker, 'click', function() {
        info.open(map, marker);
      });
      return marker;
    }
    
    // Add markers for all the gigs.
    var len = gigs.length;
    for (var i = 0; i<len; i++) {
      createMarkerForGig(gigs[i]);
    }
    </script>
    

    Documentation for php_encode()

    【讨论】:

    • 对不起,我对javascript不是很熟悉。你能给我一个代码示例吗?
    • 正在处理它,但如果你打算用一张大桌子而不用 ajax 来尝试这个,你会得到一个非常慢的网站..
    • 应该可以。但我强烈建议使用 AJAX 和 PDO 而不是 mysql_query 的东西。
    • 由于某种原因这不起作用,它会返回一个白屏..也许是循环中的问题?
    • 您能看到任何错误吗?确保在 php 中开启 error_reporting (error_reporting(E_ALL | E_STRICT); ini_set("display_errors", 1);
    【解决方案2】:

    当我编写一个类似的应用程序时,我使用 php 编写表示我的数据的 javascript 数组的字符串,然后在我为 api 构建字符串时使用直接 js。然而,因为我发现编写一个 PHP 驱动的 API 来返回我的数据库的 JSON 对象是多么容易,所以我只使用 jQuery 来查询我的自制 API 以获取 json 数据,然后使用它。使用 SLIM 确实非常容易做到。这是一个链接http://codingthis.com/programming/php/using-the-slim-php-framework-for-developing-rest-apis/

    【讨论】:

    • 对不起,我只是没明白你在说什么。我只是想一遍又一遍地循环一些javascript代码,直到我为我的数据库中的每一条数据都这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 2012-07-09
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多