Google Maps API - Map.data scope issue

Google Maps API - Map.data scope issue

本文关键字:data scope issue Map Maps API Google      更新时间:2023-09-26

我正在尝试通过执行以下操作将GeoJSON层添加到Google地图(v3(:

imageActive = {
    url: "images/target_red.png",
    origin: new google.maps.Point(0,0),
    anchor: new google.maps.Point(11, 11),
} // ACTIVE marker image
jQuery.getJSON('home/gcpts/geojson.php', function(data){
    points = map.data.addGeoJson(data);
    console.log(points); //this works
});
map.data.setStyle({
  clickable: true,
  draggable: false,
});
map.data.addListener('click', function(event){
  setActiveImage(event);
})
function setActiveImage(event){
  for(var i = 0;i<points.length;i++){ //can't read "length" of undefined
    points[i].revertStyles();
  }
  map.data.overrideStyle(event.feature, {
    icon: imageActive,
  });
}

但是,当我尝试遍历"点"变量时,我似乎无法"看到"它。我主要是未定义,或者如果我尝试调用点的长度(points.length(,那么它就不存在。

如果我在 jQuery 函数中控制台.log(点(,那么我可以看到变量中的所有功能。如果我把它放在外面,那么我就看不到它。关于范围,我缺少什么吗?

我希望我可以设置一个"点击"事件并使用event.feature来覆盖Style。然后,单击其他要素时,该样式将从其他 geoJson 要素中移除并覆盖新单击的要素。

似乎

这应该可以正常工作,但我似乎无法弄清楚如何迭代这些功能。

谢谢!

(另外,我在"无冲突"模式下使用jQuery...

所有变量都是全局范围的,因为您没有使用 var 关键字。 似乎其他脚本正在寻找一个points变量并覆盖了你的变量。 假设您的代码已经包含在某种函数(例如 jQuery ready处理程序(中,您只需使用 var 即可解决问题。 在您调用getJSON()之前,我会添加以下代码行:

var points = [];

前面的答案指出,您需要确保"points"变量的作用域正确,但更好的答案是您根本不需要该变量: 由于您使用的是map.data,因此您可以直接使用它来访问您的要素,如下所示:

map.data.foreEch(function(feature) {console.log(feature);})

当然,请注意,您的"map"变量必须具有适当的作用域。

此外,你也不需要使用jQuery——你可以使用map.data.loadGeoJson(theUrl)加载数据,这将为你做ajax。