1

我目前有这段代码,可以按我想要的方式运行。我将使用 mapbox 地图加载的 JSON 清空,从本地文件加载一个 JSON 集并过滤掉一些点。由于之前的帖子,能够解决这个问题。

现在,我想自动平移/缩放地图以仅包含可见且没有运气的标记。我已经尝试了 fitBounds 和 map.extent 的几种变体,并使用 map.markerLayer.getGeoJSON 或 markerLayer.getGeoJSON 提供给它。前者抛出“lat”未定义的控制台错误,这让我在 console.log 搜索中,似乎当您使用 loadURL 时,getGeoJSON 不再返回任何结果?

谢谢您的帮助。这是代码。

var statestring = String(Request.QueryString("location"));
var map = L.mapbox.map('map', 'aam.map-ryzdcons');

map.markerLayer.setGeoJSON([]);
var markerLayer = L.mapbox.markerLayer()
.loadURL('markers.geojson.txt')
.setFilter(function(f) {
return f.properties['coverage'].toLowerCase().indexOf(statestring.toLowerCase()) > -1 ; })
.addTo(map);

在这之间我试图把 map.fitBounds(markerLayer.getBounds()); w/没有成功和其他一些变化。

  markerLayer.on('mouseover', function(e) {
      e.layer.openPopup();
  });
  markerLayer.on('mouseout', function(e) {
      e.layer.closePopup();
  });

编辑#2:我刚试过这个,证明我的理论 getGeoJSON 在首先设置 loadURL 时确实不起作用。它有点工作,但显然没有完成我想要的。

$.getJSON("markers.geojson.txt", function (data) {
map.markerLayer.setGeoJSON(data);                           
map.fitBounds(markerLayer.getBounds());
if (markers.length == '1') {
map.setZoom(8);
}
map.markerLayer.setGeoJSON([]);
}); 

编辑#3,因为它不会让我再过几个小时回答我的问题:

答案是:至少在我的情况下,您必须等待就绪事件。将编辑#2 中的内容移至 markerLayer.on 就绪事件。

var markers = [];   
markerLayer.on('ready', function(e) {
this.eachLayer(function(marker) { markers.push(marker); });
map.fitBounds(markerLayer.getBounds());
if (markers.length == '1') {
    map.setZoom(8);
    }
//alert(markers.length);
}); 
4

1 回答 1

1

答案是:至少在我的情况下,您必须等待就绪事件。将编辑#2 中的内容移至 markerLayer.on 就绪事件。

var markers = [];   
markerLayer.on('ready', function(e) {
this.eachLayer(function(marker) { markers.push(marker); });map.fitBounds(markerLayer.getBounds());
if (markers.length == '1') {
map.setZoom(8);
}
//alert(markers.length);
}); 
于 2013-11-15T14:08:25.607 回答