如何在地图加载后向谷歌地图添加标记
How to add markers to Google Maps after the map has already been loaded?
我正在开发一个简单的PhoneGap应用程序 - 我在家里踱步收集坐标:
var positions = [
{lat:123.12313123, lng:123.123345131},
{lat:123.12313123, lng:123.123345131}
]
我正在查看此处的文档,该文档完美无缺。在该示例中,脚本defer async
我所理解的内容在创建initMap()
时触发。 initMap()
有一个标记。这在我的应用程序中完美运行,在 Straya 中显示标记。
首先,我创建地图:
var map; // making it global
function initMap() {
var myLatLng = {lat: 39.909736, lng: -98.522109}; // center US
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 2,
center: myLatLng
});
}
这将绘制地图。现在,我想像这样遍历我的坐标:
// Remember, the map has already loaded at this point
$(positions).each(function(i, item) {
var marker = new google.maps.Marker({
position: item,
map: map,
title: 'Route item ' + i
});
})
这行不通。我不能在循环中运行initMap()
,而且无论如何它都不起作用。我不能使用预设数量的坐标运行initMap()
,因为在我完成之前我还不知道它们是什么。我在这里做错了什么?
这是一个范围问题。当你初始化map时,你说的是var map
,这会在initMap函数中产生一个名为map
的局部变量。这意味着全局map
变量仍未初始化,并且当您创建标记时,它不会将其放在地图上,因为您传递给标记的map
变量未定义。删除 var
关键字,您的新 Map 将被分配给函数外部的原始全局map
变量,如下所示:
var map; // making it global
function initMap() {
myLatLng = {lat: 39.909736, lng: -98.522109}; // center US
map = new google.maps.Map(document.getElementById('map'), {
zoom: 2,
center: myLatLng
});
}
同样作为一个不相关的说明,我认为您误解了异步延迟的作用。当您加载具有async
和defer
属性的脚本时,您告诉浏览器等待整个页面加载完毕,然后加载脚本。在谷歌地图的情况下,在脚本的实际网址中,您还会传递加载脚本时要调用的函数的名称:&callback=initMap
。
脚本使谷歌地图代码全部准备就绪供您使用,然后该代码调用initMap
。
我可能会看到问题 - 您声明map
两次,一次在initMap
函数外部,一次在内部。这意味着全局map
变量将保持undefined
。从作业前面删除var
:
map = new google.maps.Map(document.getElementById('map'), {
zoom: 2,
center: myLatLng
});
现在,您将把映射实例分配给函数作用域之外的map
变量,而不是创建一个与全局变量冲突的新映射变量。
另外,不要忘记,尽可能避免使用这些全局变量通常更好:)
- 使用ASP.NET将谷歌地图添加到项目中,并从数据库中检索位置
- Javascript/谷歌图表-为谷歌地图添加标记过滤器
- 如何在地图加载后向谷歌地图添加标记
- AngularJS与角度谷歌地图:添加标记通过fomr和查找我
- 向谷歌地图添加自定义标记
- 谷歌地图添加了多个圆圈
- 谷歌地图:添加硬编码标记到循环
- 谷歌地理编码器+谷歌地图添加标记
- 谷歌地图添加监听器点击获取XML数据
- 如何向谷歌地图添加标记 - JavaScript
- 谷歌地图添加侦听器无法正常工作
- 将两个谷歌地图添加到一个HTML页面上
- Spring MVC - 从数据库向谷歌地图添加多个标记
- 如何使用jQuery和JSON向谷歌地图添加pin
- 谷歌地图添加多条多段线
- 仅在需要时向谷歌地图添加标记
- 谷歌地图-添加新的标记,而无需每次初始化地图
- 使用MapInnovations将谷歌地图添加到网站
- 使用数组向谷歌地图添加多个自定义标记
- Angularjs谷歌地图添加标记