【问题标题】:mysql markers not showing on mapmysql标记未显示在地图上
【发布时间】:2018-03-30 23:36:57
【问题描述】:

晚安,我试图用 JSON 在地图上显示标记,但我不能,我不知道为什么,我可以看到地图并可以在地图上移动,但甚至没有一个标记显示,

<?php
require("config.php");
/* lat/lng data will be added to this array */
$locations=array();
$query =  $db->query('SELECT * FROM inmuebles');
    while( $row = $query->fetch() ){

        $longitude = $row['long'];                              
        $latitude = $row['lat'];

        /* Each row is added as a new array */
        $locations[]=array('lat'=>$latitude, 'long'=>$longitude );
    }
    /* Convert data to json */
    $markers = json_encode( $locations );

    echo $markers;
  ?>
 <script type='text/javascript'>
<?php
    echo "var markers=$markers;\n";

?>
var map;
    var markersArray = [];

function initMap() {

    var latlng = new google.maps.LatLng(-16.5338955,-68.0656364);
    var myOptions = {
        zoom: 13,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
    };

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

    for( var o in json ){

        lat = json[ o ].lat;
        long=json[ o ].long;

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

$markers 的输出是

[{"lat":"-16.52629052070058","long":"-68.0797004699707"},{"lat":"-16.500122130208325","long":"-68.12089920043945"},{"lat":"-16.54307592346882","long":"-68.06425094604492"}]

提前感谢我一直在努力找出错误在哪里

编辑

<?php
$con = mysqli_connect('localhost','waru','olairhead154','inmueble');
?>
 <?php
require("config.php");
/* lat/lng data will be added to this array */
$locations=array();
$query =  $db->query('SELECT * FROM inmuebles');
    while( $row = $query->fetch() ){

        $longitude = $row['long'];                              
        $latitude = $row['lat'];

        /* Each row is added as a new array */
        $locations[]=array('lat'=>$latitude, 'long'=>$longitude );
    }
    /* Convert data to json */
    $markers = json_encode( $locations );


    echo $markers;
 ?>
 <script type='text/javascript'>
 <?php
    echo "var markers=$markers;\n";

?>
var map;
    var markersArray = [];

function initMap() {

    var latlng = new google.maps.LatLng(-16.5338955,-68.0656364);
    var myOptions = {
        zoom: 13,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
    };
    var markers = '<?= json_encode($markers) ?>';
    var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
    var infowindow = new google.maps.InfoWindow(), marker, lat, long;
    var json=markers;
    for( var o in json ){

        lat = json[ o ].lat;
        long=json[ o ].long;

        marker = new google.maps.Marker({
            position: new google.maps.LatLng(lat,long),
            map: map
        }); 
        google.maps.event.addListener( marker, 'click', function(e){
            infowindow.setContent( this.name );
            infowindow.open( map, this );
        }.bind( marker ) );
    }
}
google.maps.event.addDomListener(window, "load", initMap);
</script>

这是我所做的更改,但仍然没有显示标记,我对此真的很陌生,请耐心等待

谢谢

【问题讨论】:

  • “$markers 的输出”不是 JSON 字符串,它是一个 javascript 数组,JSON.parse 无法处理它。将其直接传递到您的循环中。 (Proof of concept fiddle)
  • @geocodezip 试过你告诉我的,但我还是看不到标记,你能帮我多一点吗? var 标记 = '= json_encode($markers) ?>'; var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions); var infowindow = new google.maps.InfoWindow(), marker, lat, long; var json=标记; for( var o in json ){ lat = json[ o ].lat;长=json[o].long; marker = new google.maps.Marker({ position: new google.maps.LatLng(lat,long), map: map });
  • 1.请不要在 cmets 中发布(大量)代码,它不可读(edit 你的问题是解决 cmets 的问题)。 2.如果我读到你发布的内容,那不是我“告诉你”的,请看小提琴。
  • @geocodezip 我编辑了帖子,现在可以更好地显示代码请帮助我,我似乎找不到该怎么做
  • 设法做到了,这是我的一个愚蠢的错误......非常感谢你的回答

标签: javascript php mysql google-maps google-maps-api-3


【解决方案1】:

最好将 $markersjson_encode() 函数一起在 var 标记 中回显。之后,你可以创建一个新的js变量var markersJson,其值为JSON.parse(markers)(你需要将它解析为JSON,否则它会给出你一个错误)。从那里,您可以使用 javascript .map() 函数(高阶函数)遍历数组并将其显示为 Google 地图标记。

有关 Google 地图标记的更多信息,请查看 this 链接。

表格中的坐标示例:

<?php 
   $markers = array( 
         array( 'lat' => -16.52629052070058, 'lng' => -68.0797004699707 ),
         array( 'lat' => -16.500122130208325, 'lng' => -68.12089920043945 ),
         array( 'lat' => -16.54307592346882, 'lng' => -68.06425094604492 )
   );
?> 

使用 json_encode() 将 $markers 回显到 var 标记:

var markers = '<?= json_encode($markers) ?>';

将标记解析为 json:

var markersJson = JSON.parse(markers);

遍历数组并将坐标显示为谷歌地图标记

var plotMarkers = markersJson.map(function(value, index){
 var marker = new google.maps.Marker({
   position : new google.maps.LatLng( value.lat, value.lng ),
   map: map,
   title : 'Hello'
 });
 return marker;
});

完整代码在这里:

<!DOCTYPE html>
<html>
    <head>
        <title>Google Maps - PHP Markers Implementation</title>
        <style type="text/css">
            html,body {
                height:100%;
            }
            body {
                width:100%;
            }
            #map_canvas {
                width:100%;
                height:100%;
            }
        </style>
    </head>
    <body>
        <div id="map_canvas"></div>
         <script async defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"></script>
         <script type="text/javascript">
            <?php 
                $markers = array( 
                    array( 'lat' => -16.52629052070058, 'lng' => -68.0797004699707 ),
                    array( 'lat' => -16.500122130208325, 'lng' => -68.12089920043945 ),
                    array( 'lat' => -16.54307592346882, 'lng' => -68.06425094604492 )
                );
            ?>  
            function initMap() {
                var markers = '<?= json_encode($markers) ?>';
                var markersJson = JSON.parse(markers);
                var latlng = new google.maps.LatLng(-16.5338955,-68.0656364);
                var myOptions = {
                    zoom: 13,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                };  
                var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
                var plotMarkers = markersJson.map(function(value, index){
                    var marker = new google.maps.Marker({
                        position : new google.maps.LatLng( value.lat, value.lng ),
                        map: map,
                        title : 'Hello'
                    });
                    return marker;
                });
            }
         </script>
    </body>
</html>

【讨论】:

  • 如何使用 for 循环和 mysql 数据库来做到这一点?打扰了
  • 您是否从查询中获得结果?
  • 当我回显 $markers 变量时,我得到 [{"lat":"-16.52629052070058","long":"-68.0797004699707"},{"lat":"-16.500122130208325","long ":"-68.12089920043945"},{"lat":"-16.54307592346882","long":"-68.06425094604492"}] 但看起来它没有进入脚本提前谢谢
  • 设法做到了,两次声明 $markers 是一个愚蠢的错误,非常感谢您的回答
  • 哈哈哈哈!没问题的伙伴。
猜你喜欢
  • 2017-01-09
  • 1970-01-01
  • 2021-07-07
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多