我需要在Leaflet地图中加载WFS服务(点)。
我知道如何在我的地图中加载WFS服务,但我还要检查地图当前的比例/范围,因为我已经限制了我要求的功能数量。服务器并在我的地图上渲染。
我的服务有很多要点,我只想在我的底图(OpenStreetMap)等级为18时限制我的图层的可视化。
有没有办法检查地图当前范围/比例,从而决定是否调用我的WFS服务?
任何一个例子?
非常感谢您提前,任何建议都很感激!!!!
切萨雷
答案 0 :(得分:0)
我以这种方式解决了
.....
.....
.....
function onEachFeature(feature, layer) {
if (feature.properties && feature.properties.popupContent) {
layer.bindPopup(feature.properties.popupContent);
}
};
myGeoJSONLayeraddressPCN3 = L.geoJson(myGeoJSON, {
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng, geojsonMarkerOptions);
},
onEachFeature: onEachFeature
});
var baseLayers = {
"OSM": background
};
var overlays = {
"My GeoJSON Layer name": myGeoJSONLayer
};
map = new L.Map('map', {
center: [42, 12],
zoom: 6,
layers: [background]
});
// *** add base layers and overlay layers list to map ... ***
TOC = L.control.layers(baseLayers, overlays);
TOC.addTo(map);
map.on('overlayadd', function(e) {
map.removeLayer(myGeoJSONLayer);
TOC.removeLayer(myGeoJSONLayer);
if ((e.name == "My GeoJSON Layer name") && (map.getZoom() < 18)){
alert('To view the layer zoom at max details ...');
TOC.addOverlay(myGeoJSONLayer, "My GeoJSON Layer name");
isOnMap = 0;
}
if ((e.name == "My GeoJSON Layer name") && (map.getZoom() >= 18)){
var currentExtent = map.getBounds().toBBoxString();
invokeService(currentExtent);
}
});
map.on('overlayremove', function(e) {
if (e.name == "My GeoJSON Layer name"){
isOnMap = 0;
}
});
map.on('dragend', function(e) {
if ((map.getZoom() >= 18) && (isOnMap == 1)){
map.removeLayer(myGeoJSONLayer);
TOC.removeLayer(myGeoJSONLayer);
var currentExtent = map.getBounds().toBBoxString();
invokeService(currentExtent);
}
});
map.on('zoomend', function(e) {
if (map.getZoom() < 18) {
map.removeLayer(myGeoJSONLayer);
TOC.removeLayer(myGeoJSONLayer);
TOC.addOverlay(myGeoJSONLayer, "My GeoJSON Layer name");
}
});
我还有一个函数invokeService()我在哪里......
function invokeService (extent) {
.....
.....
.....
function onEachFeature(feature, layer) {
if (feature.properties && feature.properties.popupContent) {
layer.bindPopup(feature.properties.popupContent);
}
}
myGeoJSONLayeraddressPCN3 = L.geoJson(MyGeoJSON, {
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng, geojsonMarkerOptions);
},
onEachFeature: onEachFeature
});
addressPCN3.addTo(map);
TOC.addOverlay(addressPCN3, "My GeoJSON Layer name");
isOnMap = 1;
}
.....
.....
.....
}
现在正在运作!