MapView
implements IView
Unified map view with 2D/3D mode switching. Creates a WebGPU canvas, manages layers, handles user interaction, and provides coordinate conversion. This is the main entry point for the library.
Constructor
new MapView(options: MapViewOptions) | Parameter | Type | Description | |
|---|---|---|---|
options | MapViewOptions | required | View configuration |
MapViewOptions
| Field | Type | Description | |
|---|---|---|---|
container | HTMLElement | string | null | required | DOM element or CSS selector for the map container |
mode | '2d' | '3d' | optional | Initial rendering mode Default: '2d' |
center | [number, number] | optional | Initial center as [longitude, latitude] Default: [0, 0] |
zoom | number | optional | Initial zoom level Default: 2 |
rotation | number | optional | Initial rotation in degrees (2D only) Default: 0 |
pitch | number | optional | Initial pitch in degrees (3D only) Default: 0 |
bearing | number | optional | Initial bearing in degrees (3D only) Default: 0 |
minZoom | number | optional | Minimum allowed zoom level Default: 0 |
maxZoom | number | optional | Maximum allowed zoom level Default: 22 |
renderEngine | IRenderEngine | optional | WebGPU render engine instance (e.g. new RenderEngine()) |
backgroundColor | string | optional | Canvas background color Default: 'black' |
interaction | InteractionHandlerOptions | GlobeInteractionOptions | false | optional | Interaction config, or false to disable |
Properties
| Name | Type | Access | Description |
|---|---|---|---|
id | string | readonly | Unique view identifier |
type | '2d' | '3d' | readonly | Active rendering mode |
map | GameMap | readonly | Layer collection (add/remove/reorder layers here) |
canvas | HTMLCanvasElement | null | readonly | WebGPU canvas element |
center | [number, number] | readonly | Current center [longitude, latitude] |
zoom | number | readonly | Current zoom level |
pitch | number | readonly | Current pitch in degrees |
bearing | number | readonly | Current bearing in degrees |
rotation | number | readonly | Current rotation in degrees (2D only) |
mode | '2d' | '3d' | readonly | Active mode string |
ready | boolean | readonly | True when GPU + canvas initialized |
gpuReady | boolean | readonly | True when WebGPU device ready |
toolManager | ToolManager | readonly | Tool manager (lazy-initialized on first access) |
Methods
switchTo()
switchTo(mode: '2d' | '3d'): Promise<void> Switch between 2D flat map and 3D globe mode. Preserves center/zoom.
| Parameter | Type | Description | |
|---|---|---|---|
mode | '2d' | '3d' | required | Target mode |
Promise<void> goTo()
goTo(target: GoToTarget): Promise<void> Animated navigation to a target view state.
| Parameter | Type | Description | |
|---|---|---|---|
target | GoToTarget | required | { center?, zoom?, pitch?, bearing?, rotation?, duration? } |
Promise<void> toMap()
toMap(screenX: number, screenY: number): [number, number] | null Convert screen pixel coordinates to geographic [lon, lat].
[number, number] | null toScreen()
toScreen(lon: number, lat: number): [number, number] | null Convert geographic coordinates to screen pixels.
[number, number] | null hitTest()
hitTest(screenX: number, screenY: number): Promise<HitTestResult[]> Query features at a screen position using GPU picking.
Promise<HitTestResult[]> when()
when(): Promise<void> Promise that resolves when the map is fully initialized (GPU + canvas ready).
Promise<void> on()
on<K extends keyof MapViewEvents>(event: K, handler: (data: MapViewEvents[K]) => void): void Register an event listener.
void off()
off<K extends keyof MapViewEvents>(event: K, handler: (data: MapViewEvents[K]) => void): void Remove an event listener.
void loadIcon()
loadIcon(id: string, source: string | ImageBitmap): Promise<void> Load an icon image for use with PointSymbol type="icon".
Promise<void> loadSvgIcon()
loadSvgIcon(id: string, svgMarkup: string, width: number, height: number): Promise<void> Load an SVG string as an icon.
Promise<void> loadModel()
loadModel(id: string, source: string | ArrayBuffer): Promise<void> Load a GLTF/GLB 3D model for use with ModelSymbol.
Promise<void> getBounds()
getBounds(): Extent | null Get the current visible extent as an Extent.
Extent | null getViewState()
getViewState(): ViewState Get the full view state (center, zoom, pitch, bearing, rotation).
ViewState setHeightExaggeration()
setHeightExaggeration(factor: number): void Set terrain height exaggeration factor.
void destroy()
destroy(): void Release all GPU resources, detach canvas, stop render loop.
void Events
| Event | Payload | Description |
|---|---|---|
'view-change' | { center, zoom, pitch, bearing, rotation, mode } | Fires on any camera/view state change |
'mode-change' | { from: '2d'|'3d', to: '2d'|'3d' } | Fires when switching between 2D and 3D |
'ready' | void | Fires when GPU + canvas fully initialized |
'error' | MapError | Fires on any error (GPU lost, shader compile, etc.) |
'layer-add' | { layer: ILayer } | Fires when a layer is added to the map |
'layer-remove' | { layer: ILayer } | Fires when a layer is removed |
'click' | { screenX, screenY, mapPoint } | Fires on map click |
'pointer-move' | { screenX, screenY, mapPoint } | Fires on pointer move over the map |
'frame' | { frameNumber, fps } | Fires every rendered frame |
'destroy' | void | Fires when the view is destroyed |
Example
import { MapView } from '@mapgpu/core';
import { RenderEngine } from '@mapgpu/render-webgpu';
import { RasterTileLayer } from '@mapgpu/layers';
const view = new MapView({
container: '#map',
center: [28.97, 41.01],
zoom: 10,
renderEngine: new RenderEngine(),
});
view.map.add(new RasterTileLayer({
id: 'osm',
urlTemplate: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png',
}));
await view.when();
console.log('Map ready!');