Live update feature
Update a feature in realtime
Change an existing feature on your map in real-time by updating its data.
This source code of this example is adapted from the MapLibre GL JS example - Update a feature in realtime.
Uncomment the following line to install leafmap if needed.
In [ ]:
Copied!
# %pip install "leafmap[maplibre]"
# %pip install "leafmap[maplibre]"
In [ ]:
Copied!
import time
import geopandas as gpd
import leafmap.maplibregl as leafmap
import time
import geopandas as gpd
import leafmap.maplibregl as leafmap
In [ ]:
Copied!
# import os
# os.environ["MAPTILER_KEY"] = "YOUR_API_KEY"
# import os
# os.environ["MAPTILER_KEY"] = "YOUR_API_KEY"
In [ ]:
Copied!
m = leafmap.Map(center=[-122.019807, 45.632433], zoom=14, pitch=60, style="3d-terrain")
m
m = leafmap.Map(center=[-122.019807, 45.632433], zoom=14, pitch=60, style="3d-terrain")
m
In [ ]:
Copied!
url = "https://maplibre.org/maplibre-gl-js/docs/assets/hike.geojson"
gdf = gpd.read_file(url)
coordinates = list(gdf.geometry[0].coords)
print(coordinates[:5])
url = "https://maplibre.org/maplibre-gl-js/docs/assets/hike.geojson"
gdf = gpd.read_file(url)
coordinates = list(gdf.geometry[0].coords)
print(coordinates[:5])
In [ ]:
Copied!
source = {
"type": "geojson",
"data": {
"type": "Feature",
"geometry": {"type": "LineString", "coordinates": [coordinates[0]]},
},
}
m.add_source("trace", source)
layer = {
"id": "trace",
"type": "line",
"source": "trace",
"paint": {"line-color": "yellow", "line-opacity": 0.75, "line-width": 5},
}
m.add_layer(layer)
m.jump_to({"center": coordinates[0], "zoom": 14})
m.set_pitch(30)
source = {
"type": "geojson",
"data": {
"type": "Feature",
"geometry": {"type": "LineString", "coordinates": [coordinates[0]]},
},
}
m.add_source("trace", source)
layer = {
"id": "trace",
"type": "line",
"source": "trace",
"paint": {"line-color": "yellow", "line-opacity": 0.75, "line-width": 5},
}
m.add_layer(layer)
m.jump_to({"center": coordinates[0], "zoom": 14})
m.set_pitch(30)
In [ ]:
Copied!
for coord in coordinates:
time.sleep(0.005)
source["data"]["geometry"]["coordinates"].append(coord)
m.set_data("trace", source["data"])
m.pan_to(coord)
for coord in coordinates:
time.sleep(0.005)
source["data"]["geometry"]["coordinates"].append(coord)
m.set_data("trace", source["data"])
m.pan_to(coord)