Javascript 用JSON标记填充google地图
我正在尝试用标记填充谷歌地图。每个标记的信息都包含在此数组中:Javascript 用JSON标记填充google地图,javascript,php,json,google-maps,google-maps-api-3,Javascript,Php,Json,Google Maps,Google Maps Api 3,我正在尝试用标记填充谷歌地图。每个标记的信息都包含在此数组中: [{"id":"1","name":"toler","lng":"110.33929824829102","lat":"-7.779369982234709","created_at":"2014-02-21 16:19:28","updated_at":"2014-02-21 16:19:28"},{"id":"2","name":"hallo :)","lng":"110.36865234375","lat":"-7.79773
[{"id":"1","name":"toler","lng":"110.33929824829102","lat":"-7.779369982234709","created_at":"2014-02-21 16:19:28","updated_at":"2014-02-21 16:19:28"},{"id":"2","name":"hallo :)","lng":"110.36865234375","lat":"-7.797738383377609","created_at":"2014-02-21 16:19:49","updated_at":"2014-02-21 16:19:49"}]
但是,我的地图没有显示标记。我在javascript中使用以下代码:
getLocations();
function getLocations() {
alert('hello');
$.ajax({
type: "GET",
url: "http://localhost:8888/public/test",
dataType: "jsonp",
success: function(json){
$.each(json, function(i, entry){
PlotMarker(json[i].lat, json[i].long);
});
},
error: function(err){
console.log(err);
}
});
}
function PlotMarker(lat, long){
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, long),
map: map,
draggable: false,
animation: google.maps.Animation.DROP
});
markerLocations.push(marker);
}
有没有办法解决这个问题?调用此url
http://localhost:8888/public/test
返回上面显示的JSON
任何帮助都将不胜感激
谢谢
编辑:
尝试更改:
PlotMarker(entry.location.lat,entry.location.lng)代码>
致:
PlotMarker(entry.lat、entry.lng)代码>尝试更改此选项:
PlotMarker(entry.location.lat, entry.location.lng);
致:
我认为这是由于外部[]的原因。在initialize
函数之外声明map变量。这是其他函数能够看到它的唯一方式:
var map;
function initialize() {
var markers = [];
var latLng = new google.maps.LatLng(-7.8,110.3666667);
map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom: 13,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
}
主要问题是在启动initialize()
之前调用了getLocations()
。您必须注释掉getLocations()
并将其移动到initialize()
函数的末尾
这还不够:map
定义必须移动到initialize()
函数之外,不应在initialize()
函数内部重新定义
未定义在PlotMarker()
中使用的markerlocation
。应定义为全局类map
var map;
var markerLocations = [];
function initialize() {
...
map = new google.maps.Map(document.getElementById('map-canvas'), {
zoom: 13,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
...
getLocations();
}
PlotMarker()
的调用方式如下:
PlotMarker(entry.lat, entry.lng);
您是否调用过初始化函数?当页面加载时调用它
google.maps.addDomListener(window, 'load', initialize);
如图所示。这些功能的顺序是什么?你先叫哪个,然后叫哪个
我遇到过这种问题,发生的情况是,地图还没有加载完所有的瓷砖,因此无法在这些瓷砖上放置标记,因此它们不会出现。但是当您在控制台中检查时,标记对象就在那里
我就是这样解决的:
google.maps.event.addListener(map, 'tilesloaded', function() {
plotMarkers();
google.maps.event.clearListeners(map, 'tilesloaded');
});
它确保在打印标记之前完全加载地图分幅。在这种情况下,标记肯定是可见的。哪里声明了gmap
?您是指初始化函数吗?如果您在initialize
中声明了gmap
,使用var
则其他函数将无法看到它。在函数外部声明gmap
,比如:var gmap
,然后在函数内部声明initialize
只要执行gmap=whatever
。如果我提取出这个变量,我的映射就不再显示了。是的,从您更新的问题来看,map
是局部初始化。其他函数无法看到它。不幸的是,这似乎没有帮助。我已经用更新后的代码编辑了这个问题。把你所有的代码放在一个JSFIDLE中,我将接受一个squiz。这是我完整的js代码。这些功能的大部分都是为了让用户能够将一个新点保存到数据库中。您正在初始化中重新说明map
。它应该是map=new google.maps.map(…
而不是var-map=new google.maps.map(…
这里是一个JSFIDLE,除了json数组外,还有完整的代码。
google.maps.addDomListener(window, 'load', initialize);
google.maps.event.addListener(map, 'tilesloaded', function() {
plotMarkers();
google.maps.event.clearListeners(map, 'tilesloaded');
});