Adaptador Leaflet¶
geoworld-leaflet en npm:
helpers que ponen un nivel del cliente JavaScript en un mapa
Leaflet. Cero dependencias en runtime: Leaflet se
recibe por parámetro, nunca se importa, así que el mismo paquete funciona con
window.L de una etiqueta <script>, con un bundler y, cuando llegue, con
Leaflet 2. El código vive en
packages/js/geoworld-leaflet.
Una llamada por nivel¶
import { createClient } from "geoworld";
import { withLeaflet } from "geoworld-leaflet";
const world = createClient({ version: "1.0.0" });
const gw = withLeaflet(L); // window.L, o import * as L from "leaflet"
const regions = await gw.addBoundaries(map, world, "CHL", "ADM1", {
fit: true, // fitBounds con el bbox del índice
onEachFeature: (feature, layer) => layer.bindTooltip(feature.properties.shapeName),
});
regions.remove(); // es un L.GeoJSON normal
withLeaflet(L) devuelve tres funciones:
| Función | Devuelve |
|---|---|
bounds(bbox) |
new L.LatLngBounds a partir de un bbox del índice (client.bbox(iso3, level)) |
boundaries(client, iso3, level, options?) |
una capa L.GeoJSON, aún fuera del mapa |
addBoundaries(map, client, iso3, level, options?) |
la misma capa añadida al mapa, encuadrada si hay fit |
Las opciones son las GeoJSONOptions de Leaflet (style, onEachFeature,
filter, …) más:
| Opción | Por defecto | Significado |
|---|---|---|
part |
— | Una parte de un nivel dividido ("US-CA", "unassigned") |
preview |
false |
El preview simplificado en vez del archivo completo |
fit |
false |
true o FitBoundsOptions para encuadrar con el bbox del índice |
Sin style, la capa usa el del sitio de documentación:
{ weight: 1, color: "#00695c", fillColor: "#00695c", fillOpacity: 0.12 }.
Un nivel publicado solo en partes (los municipios de Brasil) se concatena
salvo que se indique part.
Subcapas por id estable¶
import { layerById } from "geoworld-leaflet";
const santiago = layerById(regions, "CHL:ADM1:CL-RM");
santiago?.setStyle({ fillOpacity: 0.5 });
santiago?.openTooltip();
layerById recorre layer.getLayers() buscando la subcapa cuya feature
lleva ese id; devuelve undefined si no hay ninguna.
Bounds sin Leaflet¶
toLatLngBounds(bbox) convierte un bbox del índice en el literal
[[sur, oeste], [norte, este]] que acepta map.fitBounds, así que el mapa
puede encuadrarse antes de descargar ningún GeoJSON:
import { toLatLngBounds } from "geoworld-leaflet";
map.fitBounds(toLatLngBounds(await world.bbox("CHL", "ADM3")), { padding: [8, 8] });
collection(client, iso3, level, { part?, preview? }) trae un nivel igual
que el adaptador, para usarlo con tus propias opciones de L.GeoJSON.
Ejemplo¶
examples/leaflet.html
es una página completa con Leaflet desde una etiqueta script, selector de
territorio y nivel, tooltips y estilo al pasar el ratón. just examples la
sirve.