dongqi3533 2017-02-07 07:35
浏览 39

从MySQL数据库在Google Maps上添加多个标记

I am trying to display multiple markers on Google maps using data (lat and lng) from a MySQL database. When I run a foreach loop to return these markers on the map, it returns only the last row. What might be the problem?

<?php
require_once "db/db_handle.php";
$select = "SELECT * FROM map";
$data = $db->query($select);
?>
<!DOCTYPE html>
<html>
  <head>
    <style>
      #map {
        height: 400px;
        width: 100%;
       }
    </style>
  </head>
  <body>
    <h3>My Google Maps Demo</h3>
    <div id="map"></div>
    <?php foreach ($data as $key) {
      echo $key['lat'];
    ?>
    <script>
      function initMap() {
        var uluru = {lat: <?php echo $key['lat']; ?>, lng: <?php echo $key['lng']; ?>};
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 12,
          center: uluru
        });
        var marker = new google.maps.Marker({
          position: uluru,
          map: map
        });
        var contentString = '<?php echo $key['address']; ?>';

        var infowindow = new google.maps.InfoWindow({
          content: contentString
        });

        var marker = new google.maps.Marker({
          position: uluru,
          map: map,
          title: 'Uluru (Address)'
        });
        marker.addListener('click', function() {
          infowindow.open(map, marker);
        });
      }
    </script>
    <?php  } ?>
    <script async defer
    src="https://maps.googleapis.com/maps/api/js?key=myKey&callback=initMap">
    </script>
  </body>
</html>
  • 写回答

1条回答 默认 最新

  • doq70020 2017-02-07 07:49
    关注

    It will be very easy to fetch all the lat and long.

    require_once "db/db_handle.php";
    $select = "SELECT * FROM map";
    $data = $db->query($select);
    foreach ($data as $key)
                $locations[]=array( 'name'=>'Location Name', 'lat'=>$key['lat'], 'lng'=>$key['lng'] );
    }
    /* Convert data to json */
    $markers = json_encode( $locations ); 
    

    Then set the google map markers using the php variable markers.

    <script type='text/javascript'>
            <?php
                echo "var markers=$markers;
    ";
    
            ?>
         function initMap() {
    
                var latlng = new google.maps.LatLng(-33.92, 151.25); // default location
                var myOptions = {
                    zoom: 10,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    mapTypeControl: false
                };
    
                var map = new google.maps.Map(document.getElementById('map'),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 ) );
                }
            }
    

    Overall code will be :

     require_once "db/db_handle.php";
        $select = "SELECT * FROM map";
        $data = $db->query($select);
        foreach ($data as $key)
                    $locations[]=array( 'name'=>'Location Name', 'lat'=>$key['lat'], 'lng'=>$key['lng'] );
        }
        /* Convert data to json */
        $markers = json_encode( $locations );
        ?>
        <!DOCTYPE html>
        <html>
          <head>
            <style>
              #map {
                height: 400px;
                width: 100%;
               }
            </style>
          </head>
          <body>
            <h3>My Google Maps Demo</h3>
            <div id="map"></div>
            <script type='text/javascript'>
            <?php
                echo "var markers=$markers;
    ";
    
            ?>
    
            function initMap() {
    
                var latlng = new google.maps.LatLng(-33.92, 151.25); // default location
                var myOptions = {
                    zoom: 10,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    mapTypeControl: false
                };
    
                var map = new google.maps.Map(document.getElementById('map'),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>
            <script async defer
            src="https://maps.googleapis.com/maps/api/js?key=myKey&callback=initMap">
            </script>
          </body>
        </html>
    
    评论

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号