如何使用多个标记?该代码仅显示一个标记。
我知道我需要使用循环,但是如何?
此代码将标记与来自Google Maps数据库中的信息一起放置
我的问题是,一旦将标记放在屏幕上,数据库中的其他标记就不会出现。
<?php
$connectmaps=$db->prepare("select title,longt,latit,description from pages where onmap = 1");
$connectmaps->execute();
$loadmaps=$connectmaps->fetch(PDO::FETCH_ASSOC);
$loadmap_json = json_encode($loadmaps);
?>
<script>
jQuery(function ($) {
// Google Maps
var script = document.createElement('script');
script.src = "http://maps.googleapis.com/maps/api/js?sensor=false&callback=initialize&key=MY_GOOGLE_MAPS_API_KEY";
document.body.appendChild(script);
});
function initialize() {
var map;
var bounds = new google.maps.LatLngBounds();
var mapOptions = {
mapTypeId: 'roadmap'
};
// Sayfada Haritayı Göster
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
map.setTilt(45);
// Multiple Markers
var phpden = <?php echo $loadmap_json; ?>;
var longt= parseFloat(phpden.longt)
var title= phpden.title
var description = phpden.description
var boylam = parseFloat(phpden.latit)
var markers = [
[title, longt, latit],
];
// İnfo Windows
var infoWindowContent = [
['<div class="info_content">' + '<h3>' + title+ '</h3>' + '<p>' + description + '</p>' + '</div>' + ''],
];
// Show multiple markers
var infoWindow = new google.maps.InfoWindow(), marker, i;
// İşaretçi Dizisini Döngüye Sok ve Harita Üzerine Yerleştir
for (i = 0; i < markers.length; i++) {
var position = new google.maps.LatLng(markers[i][1], markers[i][2]);
bounds.extend(position);
marker = new google.maps.Marker({
position: position,
map: map,
title: markers[i][0]
});
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infoWindow.setContent(infoWindowContent[i][0]);
infoWindow.open(map, marker);
}
})(marker, i));
// Tüm İşaretçileri Otomatik Olarak Ekrana Sığdır
map.fitBounds(bounds);
}
答案 0 :(得分:1)
fetch()
方法仅获取第一条记录。而是使用fetchAll()
方法。这将为您提供集合中每个记录的多维数组。
还请注意, 如果您没有将任何变量传递到查询中 ,则PDO确实有一种query()
方法;无需准备和执行。
<?php
$connectmaps = $db->query(
"SELECT title, longt, latit, description FROM pages WHERE onmap = 1"
);
$loadmaps = $connectmaps->fetchAll(\PDO::FETCH_ASSOC);
$loadmaps_json = json_encode($loadmaps);
答案 1 :(得分:0)
$loadmaps=$connectmaps->fetch(PDO::FETCH_ASSOC);
行本身仅会获取结果集的第一条记录,因此,您可能需要遍历结果集并将每个结果附加到数组中,例如
$mapMarkers = [];
while($marker=$connectmaps->fetch(PDO::FETCH_ASSOC)){
array_push($mapMarkers, $marker);
}
$loadmap_json = json_encode($mapMarkers);
您还需要修改JavaScript,以期望包含一组标记,因为您的当前代码期望获得单个结果。您还应该预期没有结果的可能性(空JSON数组)。
for(var i = 0; i < phpden.length(); i++) {
//Do you process of each marker here... e.g. phpden[i].longt
//Or better... create a function that you call for each marker to add them
}
这只是最后的建议,但如上所述,您应该考虑使用更具描述性的变量名。如果您在团队中工作,不仅适合他人,还适合您自己。缩写和不相关的命名变量使您的代码更难以理解。当您在复杂性增加之后再回来时,您或其他人将浪费时间试图找出“ phpden”和“ boylam”是什么。