
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
A Python package for creating interactive maps with anywidget using TypeScript. Supports multiple mapping libraries including MapLibre GL JS, Mapbox GL JS, Leaflet, OpenLayers, DeckGL, Cesium, KeplerGL, and Potree.
| Library | Description | Use Case |
|---|---|---|
| MapLibre GL JS | Open-source vector maps | Default, general-purpose mapping |
| Mapbox GL JS | Commercial vector maps | Advanced styling, 3D terrain |
| Leaflet | Lightweight, mobile-friendly | Simple maps, broad compatibility |
| OpenLayers | Feature-rich, enterprise | WMS/WMTS, projections |
| DeckGL | GPU-accelerated | Large-scale data visualization |
| Cesium | 3D globe | 3D Tiles, terrain, global views |
| KeplerGL | Data exploration | Interactive data analysis |
| Potree | Point clouds | LiDAR visualization |
pip install anymap-ts
conda install -c conda-forge anymap-ts
git clone https://github.com/opengeos/anymap-ts.git
cd anymap-ts
pip install -e ".[dev]"
# For vector data support (GeoDataFrame)
pip install anymap-ts[vector]
# For local raster support (localtileserver)
pip install anymap-ts[raster]
# All optional dependencies
pip install anymap-ts[all]
from anymap_ts import Map
# Create a map centered on a location
m = Map(center=[-122.4, 37.8], zoom=10)
m.add_basemap("OpenStreetMap")
m.add_draw_control()
m
import os
from anymap_ts import MapboxMap
# Set your Mapbox token (or use MAPBOX_TOKEN env var)
m = MapboxMap(center=[-122.4, 37.8], zoom=10)
m.add_basemap("OpenStreetMap")
m
from anymap_ts import LeafletMap
m = LeafletMap(center=[-122.4, 37.8], zoom=10)
m.add_basemap("OpenStreetMap")
m.add_marker(-122.4194, 37.7749, popup="San Francisco")
m
from anymap_ts import OpenLayersMap
m = OpenLayersMap(center=[-122.4, 37.8], zoom=10)
m.add_basemap("OpenStreetMap")
# Add WMS layer
m.add_wms_layer(
url="https://example.com/wms",
layers="layer_name",
name="WMS Layer"
)
m
from anymap_ts import DeckGLMap
m = DeckGLMap(center=[-122.4, 37.8], zoom=10)
m.add_basemap("CartoDB.DarkMatter")
# Add scatterplot layer
points = [{"coordinates": [-122.4, 37.8], "value": 100}]
m.add_scatterplot_layer(data=points, get_radius=100)
# Add hexagon aggregation
m.add_hexagon_layer(data=points, radius=500, extruded=True)
m
from anymap_ts import CesiumMap
# Set CESIUM_TOKEN env var for terrain/3D Tiles
m = CesiumMap(center=[-122.4, 37.8], zoom=10)
m.add_basemap("OpenStreetMap")
m.set_terrain() # Enable Cesium World Terrain
m.fly_to(-122.4194, 37.7749, height=50000, heading=45, pitch=-45)
m
from anymap_ts import KeplerGLMap
import pandas as pd
m = KeplerGLMap(center=[-122.4, 37.8], zoom=10)
# Add DataFrame data
df = pd.DataFrame({
'latitude': [37.7749, 37.8044],
'longitude': [-122.4194, -122.2712],
'value': [100, 200]
})
m.add_data(df, name='points')
m
from anymap_ts import PotreeViewer
viewer = PotreeViewer(
point_budget=1000000,
edl_enabled=True
)
viewer.load_point_cloud("path/to/pointcloud/cloud.js", name="lidar")
viewer
geojson = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {"type": "Point", "coordinates": [-122.4, 37.8]},
"properties": {"name": "San Francisco"}
}
]
}
# Works with MapLibre, Mapbox, Leaflet, OpenLayers
m.add_vector(geojson, name="points")
# Or with GeoDataFrame (requires geopandas)
import geopandas as gpd
gdf = gpd.read_file("path/to/data.geojson")
m.add_vector(gdf, name="polygons")
# Fly to location with animation
m.fly_to(-122.4, 37.8, zoom=14)
# Fit to bounds [west, south, east, north]
m.fit_bounds([-123, 37, -122, 38])
# All map types support HTML export
m.to_html("map.html", title="My Map")
| Variable | Library | Description |
|---|---|---|
MAPBOX_TOKEN | Mapbox, KeplerGL | Mapbox access token |
CESIUM_TOKEN | Cesium | Cesium Ion access token |
| Class | Base Library | Key Features |
|---|---|---|
Map / MapLibreMap | MapLibre GL JS | Vector tiles, drawing, layer control |
MapboxMap | Mapbox GL JS | 3D terrain, Mapbox styles |
LeafletMap | Leaflet | Lightweight, plugins |
OpenLayersMap | OpenLayers | WMS/WMTS, projections |
DeckGLMap | DeckGL + MapLibre | GPU layers, aggregations |
CesiumMap | Cesium | 3D globe, terrain, 3D Tiles |
KeplerGLMap | KeplerGL | Data exploration UI |
PotreeViewer | Potree | Point cloud visualization |
| Method | Description |
|---|---|
add_basemap(name) | Add a basemap layer |
add_vector(data, name) | Add vector data (GeoJSON/GeoDataFrame) |
add_geojson(data, name) | Add GeoJSON data |
add_tile_layer(url, name) | Add XYZ tile layer |
fly_to(lng, lat, zoom) | Fly to location |
fit_bounds(bounds) | Fit map to bounds |
set_visibility(layer, visible) | Set layer visibility |
set_opacity(layer, opacity) | Set layer opacity |
to_html(filepath) | Export to HTML |
| Method | Description |
|---|---|
add_scatterplot_layer() | Point visualization |
add_arc_layer() | Origin-destination arcs |
add_path_layer() | Polylines |
add_polygon_layer() | Polygons |
add_hexagon_layer() | Hexbin aggregation |
add_heatmap_layer() | Density heatmap |
add_grid_layer() | Grid aggregation |
add_geojson_layer() | GeoJSON rendering |
| Method | Description |
|---|---|
set_terrain() | Enable terrain |
add_3d_tileset(url) | Add 3D Tiles |
add_imagery_layer(url) | Add imagery |
set_camera(lng, lat, height) | Set camera position |
| Method | Description |
|---|---|
load_point_cloud(url) | Load point cloud |
set_point_budget(budget) | Set max points |
add_measurement_tool(type) | Add measurement |
add_annotation(position, title) | Add annotation |
See the examples/ folder for Jupyter notebooks demonstrating each library:
maplibre.ipynb - MapLibre GL JS basicsmapbox.ipynb - Mapbox GL JS with terrainleaflet.ipynb - Leaflet markers and GeoJSONopenlayers.ipynb - OpenLayers and WMSdeckgl.ipynb - DeckGL visualization layerscesium.ipynb - Cesium 3D globekeplergl.ipynb - KeplerGL data explorationpotree.ipynb - Potree point cloudsgit clone https://github.com/opengeos/anymap-ts.git
cd anymap-ts
pip install -e ".[dev]"
npm install --legacy-peer-deps
# Build all libraries
npm run build:all
# Build specific library
npm run build:maplibre
npm run build:mapbox
npm run build:leaflet
npm run build:deckgl
npm run build:openlayers
npm run build:cesium
# Watch mode
npm run watch
anymap-ts/
├── src/ # TypeScript source
│ ├── core/ # Base classes
│ ├── maplibre/ # MapLibre implementation
│ ├── mapbox/ # Mapbox implementation
│ ├── leaflet/ # Leaflet implementation
│ ├── openlayers/ # OpenLayers implementation
│ ├── deckgl/ # DeckGL implementation
│ ├── cesium/ # Cesium implementation
│ └── types/ # Type definitions
├── anymap_ts/ # Python package
│ ├── maplibre.py # MapLibreMap class
│ ├── mapbox.py # MapboxMap class
│ ├── leaflet.py # LeafletMap class
│ ├── openlayers.py # OpenLayersMap class
│ ├── deckgl.py # DeckGLMap class
│ ├── cesium.py # CesiumMap class
│ ├── keplergl.py # KeplerGLMap class
│ ├── potree.py # PotreeViewer class
│ ├── static/ # Built JS/CSS
│ └── templates/ # HTML export templates
└── examples/ # Example notebooks
MIT License - see LICENSE for details.
FAQs
TypeScript frontend for anymap-ts interactive maps
The npm package anymap-ts receives a total of 177 weekly downloads. As such, anymap-ts popularity was classified as not popular.
We found that anymap-ts demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.