Google Maps API 标记未显示 - 使用 MySQL 和 JSON

Posted

技术标签:

【中文标题】Google Maps API 标记未显示 - 使用 MySQL 和 JSON【英文标题】:Google Maps API markers not showing - with MySQL and JSON 【发布时间】:2014-04-23 14:31:18 【问题描述】:

我正在构建一个应用程序,将地点显示为谷歌地图上的标记。我得到了地理定位标记,但我无法让带有数据库坐标的标记显示出来。

这是我连接到数据库并执行查询的 places.php 文件。

header('Content-Type: application/json');
$response['success'] = false;
$link = new PDO('mysql:host=HOST;dbname=DATABASE', 'USERNAME', 'PASSWORD');
    $stmt = $link->prepare("SELECT name, description, lat, lng FROM places");
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    
    if(!empty($result)) 
        $response['success'] = true;
        $response['data'] = $result;
    
    echo json_encode($response);

Places.php 输出:

"success":true,"data":["name":"Wim's Camping spot","description":"Large garden with nice grass. Shower available.","lat":"51.00199890137","lng":"4.47925186157","name":"Bij Laurens & Kenzo","description":"Large garden with nice grass.","lat":"50.97788238525","lng":"4.47482204437","name":"Oxford Street","description":"Large garden with nice grass. Shower available.","lat":"51.51498031616","lng":"-0.14432799816"]

这是我在初始化地图的文件中使用的脚本。 基于本教程:http://wsnippets.com/responsive-airbnb-style-google-map-property-listing-using-ajax-php-mysql-and-twitter-bootstrap/

var i = 1,
bounds,
marker,
markersArray = Array();

$(window).ready(function(e)
    initialize();
);

function initialize() 
    navigator.geolocation.getCurrentPosition(function(position) 
        var mapOptions = 
            center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude), 
            mapTypeId: google.maps.MapTypeId.ROADMAP
        ;
        var map = new google.maps.Map(document.getElementById('js-map-container'), mapOptions);
        map.setZoom(10);


        var image = 'images/marker-current.png';
        var myLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
          var currentPosMarker = new google.maps.Marker(
              position: myLatLng,
              map: map,
              icon: image
          );
          getMapData();
     )  


function getMapData()
    $.getJSON('places.php',function(data)
    if(data.success == true) 
        if(data.data.length > 0)
            $.each(data.data,function(index, value)
                name = data.data[index].name;
                description = data.data[index].description;
                lat = data.data[index].latitude;
                lng = data.data[index].longitude;
                addMarker(i, name, description, lat, lng);
                i++;
            );
        
    
); 





function addMarker(i, name, description, lat, lng) 
if (lat != null && lng != null) 
    myLatLng = new google.maps.LatLng(lat, lng);
    bounds = new google.maps.LatLngBounds();
    eval('var marker' + i + ' = new google.maps.Marker( position: myLatLng,  map: map, zIndex: i);');
    var marker_obj = eval('marker' + i);
    bounds.extend(marker_obj.position);
    markersArray.push(eval('marker' + i));
    marker_obj.title = name;
    var li_obj = '.js-map-num' + i;
    var content = '<div class=""><h4>' + name + '</h4><h4><span class="label label-danger"> $'+ description +'</span></h4></div>';
    eval('var infowindow' + i + ' = new google.maps.InfoWindow( content: content,  maxWidth: 370);');
    var infowindow_obj = eval('infowindow' + i);
    var marker_obj = eval('marker' + i);
    google.maps.event.addListener(marker_obj, 'click', function () 
        infowindow_obj.open(map, marker_obj);
    );
  

【问题讨论】:

【参考方案1】:

mapinitialize() 函数中定义为本地。因此您不能在addMarker() 函数中使用它。解决方案是使其全球化:

var i = 1,
bounds,
map,
marker,
markersArray = Array();
...

initialize()函数中:

var mapOptions = 
    center: new google.maps.LatLng(position.coords.latitude, position.coords.longitude), 
    mapTypeId: google.maps.MapTypeId.ROADMAP
;

map = new google.maps.Map(document.getElementById('js-map-container'), mapOptions);
map.setZoom(10);
...

【讨论】:

谢谢,但没有解决。地图上仍然没有标记。 浏览器控制台是否有错误日志?还有一个问题,你为什么要使用 eval?只需定义为var marker = ...,不需要marker1marker2,因为您将它们推入数组。

以上是关于Google Maps API 标记未显示 - 使用 MySQL 和 JSON的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps API 标记点击事件未触发 [重复]

Google Maps API v2:如何使标记可点击?

Google Maps API v3:未删除标记

Google Maps API v3:在Firefox中未触发自定义标记的点击事件

Google Maps API 3 - 根据缩放级别显示/隐藏标记

使用 Google Maps API v2 时,签名的 APK 崩溃,未签名的 APK