2017-05-11 85 views
-2

我已嘗試幾乎所有內容,但我無法更正我的代碼。我的代碼未顯示Google地圖和標記。我有一個sqlite3數據庫canberra.db我從哪裏獲取數據。爲什麼我的谷歌地圖不顯示?

canberra.db:

CREATE TABLE `markers` (
    `city_id` INTEGER, 
    `name` TEXT, 
    `latitude` TEXT, 
    `longitude` TEXT, 
    `type` TEXT 
    ) 

任何幫助將提前得到高度讚賞感謝。

test.php的:

<!DOCTYPE html> 
    <html> 
    <head> 
    <style> 
      #map { 
      height: 400px; 
     width: 100%; 
      } 
     </style> 
     </head> 
     <body> 
    <h3>My Google Maps Demo</h3> 
    <div id="map"></div> 

    <?php 
     class MyDB extends SQLite3 
     { 
     function __construct() 
    { 
     $this->open('canberra.db'); 
    } 
    } 
    $db = new MyDB(); 
    if(!$db){ 
    echo $db->lastErrorMsg(); 
    } else { 
    echo "Opened database successfully\n"; 
    } 

    $sql=<<<EOF 
     SELECT * from markers; 
    EOF; 
    $result = $db->query($sql); 

    $json = array(); 
    while($row = $result->fetchArray(SQLITE3_ASSOC)){ 


     echo $json[]['lat'] = $row['latitude']; 
     echo $json[]['lon'] = $row['longitude']; 
     echo $json[]['name'] = $row['name']; 
     echo $json[]['type'] = $row['type']; 



     } 

$db->close(); 


     echo "Operation done successfully\n"; 


    ?> 



    <script type="text/javascript"> 
    function initMap() { 
    var locationsJSON = '<?php echo json_encode($json) ?>'; 
    var locations = JSON.parse(locationsJSON); 

    var bounds = new google.maps.LatLngBounds(); 
    var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 2, 
    center: new google.maps.LatLng(0, 0), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    var marker, i; 
    for (i = 0; i < locations.length; i++) { 
    console.log(locations[i]); 
     var myLatLng = new google.maps.LatLng(locations[i].lat, locations[i].lon); 
     bounds.extend(myLatLng); 
     map.fitBounds(bounds); 
     marker = new google.maps.Marker({ 
     position: myLatLng, 
     map: map 
    }); 
    } 


    } 
    </script> 
    <script async defer 
     src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDooxT39owZBkpRXCGKPbRuQd5fSkr0Xvk&callback=initMap"> 
     </script> 
+0

在控制檯中的任何JavaScript錯誤? 'console.log(locations [i]);'給你什麼? – duncan

+1

爲什麼位置[i] [1],位置[i] [2]?你不是把你的屬性叫做經緯度和名字嗎? –

+0

console.log給我什麼都沒有:(@duncan –

回答

1

嘗試var_dumping您$ JSON數組,你會看到什麼是錯的。

您可以替換while循環的內容:

$json[] = array(
    'lat' => $row['latitude'], 
    'lon' => $row['longitude'], 
    'name' => $row['name'] 
); 
+0

我的時間是正確的問題是地圖沒有顯示:( –

+0

隨着你的實際代碼,你正在爲每個緯度/經度組合創建3行你是while循環,所以訪問你的方式你的JavaScript的方式不會工作 – alpadev

+0

我已經試過你的方法,但沒有顯示:(請幫我 –

0

您與

echo $json[]['lat'] = $row['latitude']; 
echo $json[]['lon'] = $row['longitude']; 
echo $json[]['name'] = $row['name']; 

創建數組但後來你指的座標與:

var myLatLng = new google.maps.LatLng(locations[i][1], locations[i][2]); 

將其更改爲:

var myLatLng = new google.maps.LatLng(locations[i].lat, locations[i].lon); 
+0

仍然沒有工作 –

+0

我必須改變在更新部分的代碼,但它仍然沒有工作:( –

1

我必須改變這種功能,我的代碼工作:)

function initMap() { 

    debugger; 
    var locationsJSON = <?php echo json_encode($json, JSON_PRETTY_PRINT) ?>; 

    var locations = locationsJSON; 

    var map = new google.maps.Map(document.getElementById('map'), { 
    zoom: 2, 
    center: new google.maps.LatLng(0, 0), 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}); 
var marker, i; 
for (i = 0; i < locations.length; i++) { 

    console.log(locations[i]); 
    var myLatLng = new google.maps.LatLng(locations[i].lat, locations[i].lon); 

    marker = new google.maps.Marker({ 
     position: myLatLng, 
     map: map 
    }); 
} 


    } 

還有一件事我也上方張貼的PHP腳本。

<?php 
    class MyDB extends SQLite3 


?> 
    <!DOCTYPE html> 
    <html> 

    </html> 

我希望這會幫助別人。