addMap = (proj, zoom = false, dimensions = [width, 400]) => {
const id = d3.randomInt(100)()
const outline = ({type: "Sphere"})
const path = d3.geoPath(proj.fitSize(dimensions, outline))
const map = htl.svg
`<svg width="${dimensions[0]}" height="${dimensions[1]}" style="display: block;">
<defs>
<clipPath id="clip-outline-${id}"><path d=${path(outline)} /></clipPath>
<clipPath id="clip-${id}""><path d=${path(land)} /></clipPath>
</defs>
<g id="zoom">
<g clip-path="url(#clip-outline-${id})">
<path id="outline" d=${path(outline)} />
<path id="land" d=${path(land)} />
<g id="relief" clip-path="url(#clip-${id})" >
${relief_LatLon.map(d => svg`<path class="levelRelief" d=${path(d)}/>`)}
</g>
</g>
</g>
</svg>`
const addZoom = d3
.zoom()
.scaleExtent([1, 20])
.translateExtent([[0, 0], dimensions])
.on("zoom", ({ transform }) => {
d3.select(map).select("g#zoom").attr("transform", transform)
mutable k = transform.k
})
if (zoom) d3.select(map).call(addZoom)
return map
}