Google会在数据库

时间:2015-12-04 03:21:29

标签: php google-maps laravel-5.1

我正在使用谷歌地理编码将地址转换为lat / lng坐标,然后在我的数据库中搜索附近的其他文章(实际存储地址)。这是有效的,我的地点' foreach循环工作正常(如果我看到控制台,我看到一个数组)。但是当我去添加我的标记时,没有任何显示。我在下面的代码中没有收到任何错误,但如果我在console.log(lat)中显示NaN。

地图显示并且根据var' myLatlng'正确居中,但没有制作者正在展示。我在SO(HERE)上看到地理编码创建了一个字符串,因此您需要将字符串解析为float。但我下面的尝试不起作用。

我正在使用laravel 5。 如果你想看看我如何得到我的lat / lng坐标,请看我自己的问题HERE。 我的template.blade.php页面包含:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=MYKEY&signed_in=true&libraries=places"></script>

我有地图的页面下面有这些脚本标签的脚本。

这是我有地图的页面的相关代码。 articles.index.blade.php

@section('footer')
<script>
function initialize() {

var map_canvas = document.getElementById('map_canvas');

var myLatlng = new google.maps.LatLng(parseFloat({{ $article->lat }}),parseFloat({{ $article->lng }}));

var map_options = {
    center: myLatlng,
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(map_canvas, map_options)

var locations = [
@foreach($articles as $article)
  [{{$article->lat}}, {{$article->lng}}]
@endforeach
];

var lat = parseFloat(locations[0]);
var lon = parseFloat(locations[1]);

for (i = 0; i < locations.length; i++) {
    var location = new google.maps.LatLng(lat, lon);

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

}

google.maps.event.addDomListener(window, "load", initialize);
</script>
@stop

1 个答案:

答案 0 :(得分:1)

如果我理解得当。你有这个'locations'数组。对?那些是标记出现的位置。但如果我没错,你可能会在这一行中出现语法错误:

var locations = [
@foreach($articles as $article)
  [{{$article->lat}}, {{$article->lng}}], //YOU NEED A COMMA TO SEPARATE EACH ELEMENT
@endforeach
];

可能是API不理解奇怪的数组,没有逗号分隔每个子节点:P

我希望你尝试这种不同的逻辑,看看它是否适用于这一部分:

//var lat = parseFloat(locations[0]); REMOVE THIS
//var lon = parseFloat(locations[1]); AND THIS

for (i = 0; i < locations.length; i++) {
    var location = new google.maps.LatLng(locations[i][0], locations[i][1]);

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

将类型保留为String,无需转换为float。