我正在使用谷歌地理编码将地址转换为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
答案 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。