In [49]:
filter_template = "\t\tvar zoom{level} = L.geoJson(data, {{\n\t\t\tstyle: defaultStyle,\n\t\t\tonEachFeature: onEachFeature,\n\t\t\tfilter: function(feature,layer) {{\n\t\t\t\tvar big_enough = feature.properties.lat_extent >= {dmin} || feature.properties.lng_extent >= {dmin};\n\t\t\t\tvar small_enough = feature.properties.lat_extent < {dmax} || feature.properties.lng_extent < {dmax};\n\t\t\t\treturn big_enough && small_enough\n\t\t\t}}\n\t\t}});"
In [50]:
zoom_template = "\t\tmap.on('zoomend ', function(e) {{\n\t\t\tif ( map.getZoom() != {zmin} ){{ map.removeLayer( zoom{level} )}}\n\t\t\telse if ( map.getZoom() == {zmin} ){{ map.addLayer( zoom{level} )}}\n\t\t}});"
In [54]:
zoomVals = []
zoomVals.append({"level": 0,"zmax": 0,"zmin": 0,"dmax": 99999999,"dmin": 180,})
zoomVals.append({"level": 1,"zmax": 1,"zmin": 1,"dmax": 99999999,"dmin": 180,})
for n in range(1,19):
base = 360/2**n
val = {"level":n+1,\
"zmax":n+1,\
"zmin":n+1,\
"dmax":base+base/2,\
"dmin":base-base/4}
zoomVals.append(val)
In [52]:
for z in zoomVals:
print(filter_template.format(**z))
var zoom0 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 180 || feature.properties.lng_extent >= 180;
var small_enough = feature.properties.lat_extent < 99999999 || feature.properties.lng_extent < 99999999;
return big_enough && small_enough
}
});
var zoom1 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 180 || feature.properties.lng_extent >= 180;
var small_enough = feature.properties.lat_extent < 99999999 || feature.properties.lng_extent < 99999999;
return big_enough && small_enough
}
});
var zoom2 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 135.0 || feature.properties.lng_extent >= 135.0;
var small_enough = feature.properties.lat_extent < 270.0 || feature.properties.lng_extent < 270.0;
return big_enough && small_enough
}
});
var zoom3 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 67.5 || feature.properties.lng_extent >= 67.5;
var small_enough = feature.properties.lat_extent < 135.0 || feature.properties.lng_extent < 135.0;
return big_enough && small_enough
}
});
var zoom4 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 33.75 || feature.properties.lng_extent >= 33.75;
var small_enough = feature.properties.lat_extent < 67.5 || feature.properties.lng_extent < 67.5;
return big_enough && small_enough
}
});
var zoom5 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 16.875 || feature.properties.lng_extent >= 16.875;
var small_enough = feature.properties.lat_extent < 33.75 || feature.properties.lng_extent < 33.75;
return big_enough && small_enough
}
});
var zoom6 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 8.4375 || feature.properties.lng_extent >= 8.4375;
var small_enough = feature.properties.lat_extent < 16.875 || feature.properties.lng_extent < 16.875;
return big_enough && small_enough
}
});
var zoom7 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 4.21875 || feature.properties.lng_extent >= 4.21875;
var small_enough = feature.properties.lat_extent < 8.4375 || feature.properties.lng_extent < 8.4375;
return big_enough && small_enough
}
});
var zoom8 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 2.109375 || feature.properties.lng_extent >= 2.109375;
var small_enough = feature.properties.lat_extent < 4.21875 || feature.properties.lng_extent < 4.21875;
return big_enough && small_enough
}
});
var zoom9 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 1.0546875 || feature.properties.lng_extent >= 1.0546875;
var small_enough = feature.properties.lat_extent < 2.109375 || feature.properties.lng_extent < 2.109375;
return big_enough && small_enough
}
});
var zoom10 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.52734375 || feature.properties.lng_extent >= 0.52734375;
var small_enough = feature.properties.lat_extent < 1.0546875 || feature.properties.lng_extent < 1.0546875;
return big_enough && small_enough
}
});
var zoom11 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.263671875 || feature.properties.lng_extent >= 0.263671875;
var small_enough = feature.properties.lat_extent < 0.52734375 || feature.properties.lng_extent < 0.52734375;
return big_enough && small_enough
}
});
var zoom12 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.1318359375 || feature.properties.lng_extent >= 0.1318359375;
var small_enough = feature.properties.lat_extent < 0.263671875 || feature.properties.lng_extent < 0.263671875;
return big_enough && small_enough
}
});
var zoom13 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.06591796875 || feature.properties.lng_extent >= 0.06591796875;
var small_enough = feature.properties.lat_extent < 0.1318359375 || feature.properties.lng_extent < 0.1318359375;
return big_enough && small_enough
}
});
var zoom14 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.032958984375 || feature.properties.lng_extent >= 0.032958984375;
var small_enough = feature.properties.lat_extent < 0.06591796875 || feature.properties.lng_extent < 0.06591796875;
return big_enough && small_enough
}
});
var zoom15 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.0164794921875 || feature.properties.lng_extent >= 0.0164794921875;
var small_enough = feature.properties.lat_extent < 0.032958984375 || feature.properties.lng_extent < 0.032958984375;
return big_enough && small_enough
}
});
var zoom16 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.00823974609375 || feature.properties.lng_extent >= 0.00823974609375;
var small_enough = feature.properties.lat_extent < 0.0164794921875 || feature.properties.lng_extent < 0.0164794921875;
return big_enough && small_enough
}
});
var zoom17 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.004119873046875 || feature.properties.lng_extent >= 0.004119873046875;
var small_enough = feature.properties.lat_extent < 0.00823974609375 || feature.properties.lng_extent < 0.00823974609375;
return big_enough && small_enough
}
});
var zoom18 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.0020599365234375 || feature.properties.lng_extent >= 0.0020599365234375;
var small_enough = feature.properties.lat_extent < 0.004119873046875 || feature.properties.lng_extent < 0.004119873046875;
return big_enough && small_enough
}
});
var zoom19 = L.geoJson(data, {
style: defaultStyle,
onEachFeature: onEachFeature,
filter: function(feature,layer) {
var big_enough = feature.properties.lat_extent >= 0.00102996826171875 || feature.properties.lng_extent >= 0.00102996826171875;
var small_enough = feature.properties.lat_extent < 0.0020599365234375 || feature.properties.lng_extent < 0.0020599365234375;
return big_enough && small_enough
}
});
In [53]:
for z in zoomVals:
print(zoom_template.format(**z))
map.on('zoomend ', function(e) {
if ( map.getZoom() != 0 ){ map.removeLayer( zoom0 )}
else if ( map.getZoom() == 0 ){ map.addLayer( zoom0 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 1 ){ map.removeLayer( zoom1 )}
else if ( map.getZoom() == 1 ){ map.addLayer( zoom1 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 2 ){ map.removeLayer( zoom2 )}
else if ( map.getZoom() == 2 ){ map.addLayer( zoom2 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 3 ){ map.removeLayer( zoom3 )}
else if ( map.getZoom() == 3 ){ map.addLayer( zoom3 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 4 ){ map.removeLayer( zoom4 )}
else if ( map.getZoom() == 4 ){ map.addLayer( zoom4 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 5 ){ map.removeLayer( zoom5 )}
else if ( map.getZoom() == 5 ){ map.addLayer( zoom5 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 6 ){ map.removeLayer( zoom6 )}
else if ( map.getZoom() == 6 ){ map.addLayer( zoom6 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 7 ){ map.removeLayer( zoom7 )}
else if ( map.getZoom() == 7 ){ map.addLayer( zoom7 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 8 ){ map.removeLayer( zoom8 )}
else if ( map.getZoom() == 8 ){ map.addLayer( zoom8 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 9 ){ map.removeLayer( zoom9 )}
else if ( map.getZoom() == 9 ){ map.addLayer( zoom9 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 10 ){ map.removeLayer( zoom10 )}
else if ( map.getZoom() == 10 ){ map.addLayer( zoom10 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 11 ){ map.removeLayer( zoom11 )}
else if ( map.getZoom() == 11 ){ map.addLayer( zoom11 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 12 ){ map.removeLayer( zoom12 )}
else if ( map.getZoom() == 12 ){ map.addLayer( zoom12 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 13 ){ map.removeLayer( zoom13 )}
else if ( map.getZoom() == 13 ){ map.addLayer( zoom13 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 14 ){ map.removeLayer( zoom14 )}
else if ( map.getZoom() == 14 ){ map.addLayer( zoom14 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 15 ){ map.removeLayer( zoom15 )}
else if ( map.getZoom() == 15 ){ map.addLayer( zoom15 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 16 ){ map.removeLayer( zoom16 )}
else if ( map.getZoom() == 16 ){ map.addLayer( zoom16 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 17 ){ map.removeLayer( zoom17 )}
else if ( map.getZoom() == 17 ){ map.addLayer( zoom17 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 18 ){ map.removeLayer( zoom18 )}
else if ( map.getZoom() == 18 ){ map.addLayer( zoom18 )}
});
map.on('zoomend ', function(e) {
if ( map.getZoom() != 19 ){ map.removeLayer( zoom19 )}
else if ( map.getZoom() == 19 ){ map.addLayer( zoom19 )}
});
Content source: HarvardMapCollection/seaAtlasExplorer
Similar notebooks: