@affino/world-map-core
v0.1.0
Published
Headless world map core types and utilities for Affino map features
Maintainers
Readme
@affino/world-map-core
Headless world map core types and utilities for reusable Affino world map features.
This package has no UI, renderer, Vue, React, DOM, SVG, Canvas, WebGL, MapLibre, D3, topojson, or chart dependencies.
Core
import { createWorldMapCore } from "@affino/world-map-core"
const core = createWorldMapCore()
// { version: "0.1.0" }Country Features
import type { WorldMapCountryFeature } from "@affino/world-map-core"
const feature: WorldMapCountryFeature = {
id: "US",
name: "United States",
iso2: "US",
iso3: "USA",
geometry: {
type: "Polygon",
coordinates: [[
{ lon: -124.7844, lat: 24.7433 },
{ lon: -66.9514, lat: 24.7433 },
{ lon: -66.9514, lat: 49.3458 },
]],
},
}Projection
import { projectWorldMapPosition } from "@affino/world-map-core"
const point = projectWorldMapPosition(
{ lon: 0, lat: 0 },
{ viewport: { width: 360, height: 180 } },
)
// { x: 180, y: 90 }The default projection is equirectangular.
Path Data
import { createWorldMapPath } from "@affino/world-map-core"
const pathFeature = createWorldMapPath(feature, {
viewport: { width: 360, height: 180 },
precision: 2,
antimeridianStrategy: "break-lines",
})
// { id, name, iso2, iso3, path, properties }Polygon and MultiPolygon rings are projected with the selected projection and emitted as SVG path data. Empty rings are skipped.
By default, paths use antimeridianStrategy: "break-lines" to unwrap rings that cross the antimeridian. Compact edge-crossing rings may emit shifted copies at the map edges to preserve local closure, while larger mainland rings keep the primary visible copy to avoid duplicating whole countries outside the viewport. Use antimeridianStrategy: "none" to preserve direct line commands across the antimeridian.
Non-Goals For v0.1
- No renderer components.
- No DOM, SVG, Canvas, or WebGL integration.
- No MapLibre, D3, topojson, or chart dependencies.
- No Mercator projection yet.
- No fit-to-bounds, zoom, pan, or topology processing yet.
