function svgPath(projection, graph, isArea) {
    const cache = {};
    const project = projection.stream;
    const clip = paddedClipExtent(projection, isArea);
    const path = d3_geoPath()
        .projection({stream: function(output) { return project(clip(output)); }});

    const svgpath = function(entity) {
        if (entity.id in cache) {
            return cache[entity.id];
        } else {
            return cache[entity.id] = path(entity.asGeoJSON(graph));
        }
    };

    svgpath.geojson = function(d) {
        if (d.__featurehash__ !== undefined) {
            if (d.__featurehash__ in cache) {
                return cache[d.__featurehash__];
            } else {
                return cache[d.__featurehash__] = path(d);
            }
        } else {
            return path(d);
        }
    };

    return svgpath;
}
@param {iD.Projection} projection
@param {iD.Graph} graph
@param {Boolean} isArea