2017-11-18 1 views
-2

내가 MySQL의 DB에서 위도 긴 값을 가져오고지도에 표시 위치 마커 구글 맵에 그 값을 전달하려고해야

하지만, 현재 나는 마지막 행 데이터 만 가져 왔으므로 마커 하나만 나타냅니다. 지도의 모든 위치를 표시하는 방법 ??

<?php 
include "config.php"; 
$result="select * from ds_duty_history"; 
$a=mysqli_query($conn,$result); 
// $count_row = mysqli_num_rows($a); 
while ($b = mysqli_fetch_array($a)) { 
    $long_d=$b['lng']; 
    $lat_d=$b['lat']; 
    $result = array(array('latitude'=>$lat_d,'longitude'=>$long_d)); 
} 
?> 
<!doctype html> 
<html> 
    <head> 
     <script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=YOURKEY&callback=initMap"> 
    </script> 
     <script type="text/javascript"> 
     var map; 
     function initialize() { 
      // Set static latitude, longitude value 
      var latlng = new google.maps.LatLng(<?php echo $lat_d; ?>, <?php echo $long_d; ?>); 
      // Set map options 
      var myOptions = { 
       zoom: 16, 
       center: latlng, 
       panControl: true, 
       zoomControl: true, 
       scaleControl: true, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      } 
      // Create map object with options 
      map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
     <?php 
      // uncomment the 2 lines below to get real data from the db 
      // $result = mysql_query("SELECT * FROM parkings"); 
      // while ($row = mysql_fetch_array($result)) 
      foreach($result as $row){ // <- remove this line 
       echo "addMarker(new google.maps.LatLng(".$row['latitude'].", ".$row['longitude']."), map);";} 
     ?> 
     } 
     function addMarker(latLng, map) { 
      var marker = new google.maps.Marker({ 
       position: latLng, 
       map: map, 
       draggable: true, // enables drag & drop 
       animation: google.maps.Animation.DROP 
      }); 

      return marker; 
     } 
     </script> 

    </head> 
    <body onload="initialize()"> 
     <div style="float:left; position:relative; width:550px; border:0px #000 solid;"> 
      <div id="map_canvas" style="width:550px;height:400px;border:solid black 1px;"></div> 
     </div> 

    </body> 
</html> 

현재 마지막 위도 기록을 가져 오는 하나 개의 마커 즉를 표시하고 긴 방법 LAT MySQL을 사용지도, long 값의 모든 장소를 표시하는지도 에 지정?

+0

"마지막 행"이란 'ORDER BY datetime DESC LIMIT 10'과 같은 것을 의미합니까? –

+0

에는 위도와 경도 값이 있으며 그 위치는 다른 장소와 같은 하나 이상의 레코드이며이 위도와 경도 값을 사용하여지도에 표시 위치가 있습니다 .....이 코드를 사용하면 단 하나의 장소 만 표시 할 수 있습니다. .. 그래서지도의 모든 장소를 어떻게 표시해야 하느냐? –

답변

0

여기가 가장 큰 문제는 당신이 실제로 $result 변수에 다른 결과를 수집하지 않을 것입니다지도

<script type="text/javascript"> 
     var LocationData = <?php echo json_encode($result); ?>; 
     function initialize() 
     { 
     var myOptions = {zoom:12,mapTypeId: google.maps.MapTypeId.ROAD}; 
     var map = 
     new google.maps.Map(document.getElementById('map-canvas'), myOptions); 
     var bounds = new google.maps.LatLngBounds(); 
     var infowindow = new google.maps.InfoWindow(); 
     for (var i in LocationData) 
     { 
      var p = LocationData[i]; 
      var latlng = new google.maps.LatLng(p[0], p[1]); 
      bounds.extend(latlng); 

      var icon = { url: '<?php echo base_url();?>assets/frontend/assets/images/location_pin1.png', // url  
      scaledSize: new google.maps.Size(40, 70), // scaled size  
      origin: new google.maps.Point(0,0), // origin  
      anchor: new google.maps.Point(0, 0) // anchor 
      }; 

      var marker = new google.maps.Marker({ 
      position: latlng, 
      map: map, 
      draggable: true, // enables drag & drop 
      animation: google.maps.Animation.DROP 
      icon: icon 
      }); 


      google.maps.event.addListener(marker, 'click', function() { 
      window.location.href = this.url; 
      }); 

     } 
     map.fitBounds(bounds); 
     } 
     google.maps.event.addDomListener(window, 'load', initialize); 
    </script> 
+0

코드를 답으로 덤핑하지 않도록하고 코드의 용도와 이유에 대해 설명하십시오. 관련 코딩 경험이없는 사람들에게는 귀하의 코드가 명확하지 않을 수 있습니다. [설명, 컨텍스트를 포함하고 답안에 제한, 가정 또는 단순화를 언급하여 답변을 편집하십시오.] (https://stackoverflow.com/help/how-to-answer) –

+0

var LocationData = ; 귀하의 답변 코드에서? .. 메신저 데이터베이스에서 다른 위치 위도 및 경도 값을 가져오고 모든 장소 표시를지도에보십시오. ..하지만 현재지도에서 단 하나의 장소 마커 디플레이 ..., 나는지도의 모든 장소를 표시하기 위해 루프를 사용해보십시오 –

1

에 표시 여러 마커이 코드를 시도하지만, 가장 최근으로 덮어주십시오. 또한 변수 $result을 악용하는 것으로 보이는데 이는 귀하의 혼란을 야기 할 수 있습니다. 새 array을 선언하고 $rows이라고합시다. 그런 다음 우리는 (첫 번째 조각을 대체하기 위해) 다음 코드로 모든 행을 수집 할 수 있습니다 : 디스플레이 코드에서 이제

<?php 
include "config.php"; 

$sql = "SELECT * FROM ds_duty_history"; 
$result = mysqli_query($conn, $sql); 
$rows = []; 
while ($row = mysqli_fetch_array($result)) { 
    $lon_d = $row['lng']; 
    $lat_d = $row['lat']; 
    // Use short-cut append syntax here so we add row and don't overwrite $rows 
    $rows[] = ['latitude' => $lat_d, 'longitude' => $long_d]; 
} 
?> 

(두 번째 조각을) 당신이 좋아하는 거의 $rows을 반복 할 수있을 것입니다 :

foreach ($rows as $row){ 
    // Do work with each $row here 
} 

그냥 여담으로, 가능한 한 의미하고 당신이 할 수있는만큼 새로운 변수를 사용하여 변수 이름을 사용에 익숙해하려고합니다. $a과 같이 짧고 일반적인 변수 이름을 사용하려고하면 매번 선언 한 위치를 찾지 않으면 그 변수가 무엇을 나타내는 지 알 수 없으므로 항상 혼란을 겪을 수 있습니다. 변수를 다시 사용하려고하면 (예 : $result과 같이) 변수에 대한 할당을 찾더라도 많은 다른 시간이 할당되고 완전히 다른 방식으로 나타납니다 (사용했던 방식). 유형마다. 이 한 가지를하면 적어도 프로그래밍이 어려워 지므로 자신의 코드를 읽을 때 최소한 자신의 의도를 읽고 이해할 수 있어야합니다.

관련 문제