来自php和mysql的googlemaps上的多个标记

Posted

技术标签:

【中文标题】来自php和mysql的googlemaps上的多个标记【英文标题】:multiple marker on googlemaps from php and mysql 【发布时间】:2017-03-30 07:12:06 【问题描述】:

我尝试在 googlemaps 上制作多个标记并从数据库中获取数据。 这是我的代码

<script>
<?php 


$query =  $db->query('SELECT * FROM tbl_kabkot WHERE 1=1 AND latitude !=0 AND longitude !=0');
  while($row = $query->fetch())                            

                               $nama_kabkot = $row[nama_kabkot];
                               $longitude = $row[longitude];                              
                               $latitude = $row[latitude]; 


 ?>
      var markers = [
                      [<?= $nama_kabkotv ?>, <?= $latitude ?>, <?= $longitude ?>]
];
<?php  ?>

function initMap() 
    var latlng = new google.maps.LatLng(-33.92, 151.25);
    var myOptions = 
        zoom: 10,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        mapTypeControl: false
    ;
    var map = new google.maps.Map(document.getElementById("peta"),myOptions);
    var infowindow = new google.maps.InfoWindow(), marker, i;
    for (i = 0; i < markers.length; i++)   
        marker = new google.maps.Marker(
            position: new google.maps.LatLng(markers[i][1], markers[i][2]),
            map: map
        );
        google.maps.event.addListener(marker, 'click', (function(marker, i) 
            return function() 
                infowindow.setContent(markers[i][0]);
                infowindow.open(map, marker);
            
        )(marker, i));
    

</script>

但是这段代码只显示了数据库中的一个值。 如何在数据库中显示多个标记?

【问题讨论】:

请不要只链接到您的代码,而是包含一个可以在问题中显示您的问题的代码的 sn-p。 【参考方案1】:

由于1=1,初始 sql 查询有一个多余的where 子句,但我认为这是为了测试。原始代码中的 markers 变量在循环的每次迭代中都会被覆盖,因此数组将只有一项。

<?php
    /* lat/lng data will be added to this array */
    $locations=array();
    $query =  $db->query('SELECT * FROM tbl_kabkot WHERE 1=1 AND latitude !=0 AND longitude !=0');
        while( $row = $query->fetch() )

            $nama_kabkot = $row['nama_kabkot'];
            $longitude = $row['longitude'];                              
            $latitude = $row['latitude'];

            /* Each row is added as a new array */
            $locations[]=array( 'name'=>$nama_kabkot, 'lat'=>$latitudem, 'lng'=>$longitude );
        
        /* Convert data to json */
        $markers = json_encode( $locations );
?>
<script type='text/javascript'>
    <?php
        echo "var markers=$markers;\n";

    ?>

    function initMap() 

        var latlng = new google.maps.LatLng(-33.92, 151.25);
        var myOptions = 
            zoom: 10,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControl: false
        ;

        var map = new google.maps.Map(document.getElementById("peta"),myOptions);
        var infowindow = new google.maps.InfoWindow(), marker, lat, lng;
        var json=JSON.parse( markers );

        for( var o in json )

            lat = json[ o ].lat;
            lng=json[ o ].lng;
            name=json[ o ].name;

            marker = new google.maps.Marker(
                position: new google.maps.LatLng(lat,lng),
                name:name,
                map: map
            ); 
            google.maps.event.addListener( marker, 'click', function(e)
                infowindow.setContent( this.name );
                infowindow.open( map, this );
            .bind( marker ) );
        
    
    </script>

【讨论】:

如何将默认加载位置设置为我的地理位置 你可以使用分配给navigator.geolocation.getCurrentPosition的回调函数~更多developer.mozilla.org/en-US/docs/Web/API/Geolocation_API见这里 谢谢,我还有一个疑问,在设置信息窗口时遇到问题,我从数据库中检索到多个数据,它们是每个位置提供的服务名称。但只有第一个服务名称显示在信息窗口中。我该怎么做 你能做的最好的事情是用所有相关代码问你自己的问题,而不是作为对别人的问题和答案的评论......但是在这里回答你 - 不可能说因为没人知道你的数据结构! 这个问题我已经问过了,没人帮我,这是链接***.com/questions/60544486/…【参考方案2】:
<script>

  // The following example creates complex markers to indicate beaches near
  // Sydney, NSW, Australia. Note that the anchor is set to (0,32) to correspond
  // to the base of the flagpole.

  function initMap() 


     var markerscenter = [
    ['Bondi Beach', -33.890542, 151.274856,],
    ['Bondi Beach2', -33.90542, 151.2748,]

  ];

    var map = new google.maps.Map(document.getElementById('map_canvas'), 
      zoom: 10,
      center: lat:Number(markerscenter[0][0]), lng:Number(markerscenter[0][1])
    );

    setMarkers(map);
  

  // Data for the markers consisting of a name, a LatLng and a zIndex for the
  // order in which these markers should display on top of each other.


   var markers = [
    ['Bondi Beach', -33.890542, 151.274856,],
    ['Bondi Beach2', -33.90542, 151.2748,]

  ];                        
// Info Window Content
var infoWindowContent = [
   'desc1','desc2'

  ];               

  function setMarkers(map) 

    var image = 'markeimage.png';



     var infoWindow = new google.maps.InfoWindow(), marker, i;
    for (var i = 0; i < markers.length; i++) 


      //var beach = beaches[i];
      var marker = new google.maps.Marker(
        position: lat:Number(markers[i][0]), lng: Number(markers[i][1]),
        map: map,
        icon: image,

      );

    google.maps.event.addListener(marker, 'mouseover', (function(marker, i) 
        return function() 
            infoWindow.setContent(infoWindowContent[i][0]);
            infoWindow.open(map, marker);
        
    )(marker, i));
    

  
</script>

【讨论】:

以上是关于来自php和mysql的googlemaps上的多个标记的主要内容,如果未能解决你的问题,请参考以下文章

mysql - 来自桥接表的多对多查询[关闭]

无法使用外部服务器上的 php 文件连接数据库(mysql)

php Laravel中的多对多关系来自一系列ID Raw

针对标签上的多对多连接优化 MySQL 查询

用于颤振的 GoogleMaps 插件仅显示 ios 模拟器上的标记

PHP/MySQL 连接语句