```{code-cell} ipython3
---
nbsphinx: hidden
---
import folium
```
# Advanced GeoJSON Customization with on_each_feature
The `on_each_feature` parameter in `folium.GeoJson` provides powerful customization capabilities by allowing you to execute JavaScript code for each feature in your GeoJSON data. This is particularly useful for:
- Custom tooltip and popup handling for complex geometries like MultiPoint
- Adding custom event listeners
- Implementing advanced styling logic
- Working with geometry types that need special handling
## Understanding on_each_feature
The `on_each_feature` parameter accepts a `folium.utilities.JsCode` object containing JavaScript code that will be executed for each feature. The JavaScript function receives two parameters:
- `feature`: The GeoJSON feature object
- `layer`: The Leaflet layer object representing the feature
## Basic Example
```{code-cell} ipython3
import folium
from folium.utilities import JsCode
import json
# Simple point data
geojson_data = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {"name": "Location 1", "value": 100},
"geometry": {"type": "Point", "coordinates": [77.5946, 12.9716]} # Central Bangalore
},
{
"type": "Feature",
"properties": {"name": "Location 2", "value": 200},
"geometry": {"type": "Point", "coordinates": [77.6200, 12.9800]} # Northeast Bangalore
}
]
}
# Custom JavaScript to add popups
on_each_feature = JsCode("""
function(feature, layer) {
layer.bindTooltip(
'' + feature.properties.name + '
' +
'Value: ' + feature.properties.value
);
layer.bindPopup(
'' + ' This is popup ' + '
' +
'' + feature.properties.name + '
' +
'Value: ' + feature.properties.value
);
}
""")
m = folium.Map(location=[12.9716, 77.5946], zoom_start=10)
folium.GeoJson(
geojson_data,
on_each_feature=on_each_feature
).add_to(m)
m
```
The `on_each_feature` parameter provides the flexibility needed to handle complex GeoJSON scenarios that the standard tooltip and popup classes cannot address, particularly for MultiPoint geometries and advanced interactive features.
## References
- [Leaflet GeoJSON Tutorial](https://leafletjs.com/examples/geojson/) - Comprehensive guide to using GeoJSON with Leaflet, including the `onEachFeature` option that inspired folium's `on_each_feature` parameter.