## 投影类型

在实例化 `qcharts.Map` 时可以设置不同的 `projection` 来制作不同投影类型的地图。`projection` 的可选值与 `d3` 保持一致。

:::demo

```javascript
fetch('http://s0.qhres.com/static/4e8ebcccf5b5ea78.json')
  .then(res => res.json())
  .then(mapData => {
    const { Chart, Tooltip, Text, Map } = qcharts

    const chart = new Chart({
      container: '#app'
    })

    const map = new qcharts.Map({
      projection: 'geoAlbersUsa'
    })

    map
      .setGeomData(mapData, {
        items: topojson.feature(mapData, mapData.objects.states).features
      })
      .style('normal', { fillColor: '#214882', color: '#479cd3' })

    chart.add(map).add(new Text({ text: '美国地图' }))

    chart.render()
  })

// https://github.com/topojson/topojson-client Version 1.8.0. Copyright 2016 Mike Bostock.
!(function(n, t) {
  'object' == typeof exports && 'undefined' != typeof module
    ? t(exports)
    : 'function' == typeof define && define.amd
    ? define(['exports'], t)
    : t((n.topojson = n.topojson || {}))
})(this, function(n) {
  'use strict'
  function t(n) {
    if (!n) return h
    var t,
      r,
      e = n.scale[0],
      o = n.scale[1],
      i = n.translate[0],
      u = n.translate[1]
    return function(n, f) {
      f || (t = r = 0),
        (n[0] = (t += n[0]) * e + i),
        (n[1] = (r += n[1]) * o + u)
    }
  }
  function r(n) {
    if (!n) return h
    var t,
      r,
      e = n.scale[0],
      o = n.scale[1],
      i = n.translate[0],
      u = n.translate[1]
    return function(n, f) {
      f || (t = r = 0)
      var c = Math.round((n[0] - i) / e),
        a = Math.round((n[1] - u) / o)
      ;(n[0] = c - t), (n[1] = a - r), (t = c), (r = a)
    }
  }
  function e(n, t) {
    for (var r, e = n.length, o = e - t; o < --e; )
      (r = n[o]), (n[o++] = n[e]), (n[e] = r)
  }
  function o(n, t) {
    for (var r = 0, e = n.length; r < e; ) {
      var o = (r + e) >>> 1
      n[o] < t ? (r = o + 1) : (e = o)
    }
    return r
  }
  function i(n, t) {
    var r = {
      type: 'Feature',
      id: t.id,
      properties: t.properties || {},
      geometry: u(n, t)
    }
    return null == t.id && delete r.id, r
  }
  function u(n, r) {
    function o(n, t) {
      t.length && t.pop()
      for (var r, o = l[n < 0 ? ~n : n], i = 0, u = o.length; i < u; ++i)
        t.push((r = o[i].slice())), s(r, i)
      n < 0 && e(t, u)
    }
    function i(n) {
      return (n = n.slice()), s(n, 0), n
    }
    function u(n) {
      for (var t = [], r = 0, e = n.length; r < e; ++r) o(n[r], t)
      return t.length < 2 && t.push(t[0].slice()), t
    }
    function f(n) {
      for (var t = u(n); t.length < 4; ) t.push(t[0].slice())
      return t
    }
    function c(n) {
      return n.map(f)
    }
    function a(n) {
      var t = n.type
      return 'GeometryCollection' === t
        ? {
            type: t,
            geometries: n.geometries.map(a)
          }
        : t in h
        ? {
            type: t,
            coordinates: h[t](n)
          }
        : null
    }
    var s = t(n.transform),
      l = n.arcs,
      h = {
        Point: function(n) {
          return i(n.coordinates)
        },
        MultiPoint: function(n) {
          return n.coordinates.map(i)
        },
        LineString: function(n) {
          return u(n.arcs)
        },
        MultiLineString: function(n) {
          return n.arcs.map(u)
        },
        Polygon: function(n) {
          return c(n.arcs)
        },
        MultiPolygon: function(n) {
          return n.arcs.map(c)
        }
      }
    return a(r)
  }
  function f(n, t, r) {
    function e(n) {
      var t = n < 0 ? ~n : n
      ;(a[t] || (a[t] = [])).push({
        i: n,
        g: c
      })
    }
    function o(n) {
      n.forEach(e)
    }
    function i(n) {
      n.forEach(o)
    }
    function u(n) {
      'GeometryCollection' === n.type
        ? n.geometries.forEach(u)
        : n.type in s && ((c = n), s[n.type](n.arcs))
    }
    var f = []
    if (arguments.length > 1) {
      var c,
        a = [],
        s = {
          LineString: o,
          MultiLineString: i,
          Polygon: i,
          MultiPolygon: function(n) {
            n.forEach(i)
          }
        }
      u(t),
        a.forEach(
          arguments.length < 3
            ? function(n) {
                f.push(n[0].i)
              }
            : function(n) {
                r(n[0].g, n[n.length - 1].g) && f.push(n[0].i)
              }
        )
    } else for (var l = 0, h = n.arcs.length; l < h; ++l) f.push(l)
    return {
      type: 'MultiLineString',
      arcs: v(n, f)
    }
  }
  function c(n) {
    var t = n[0],
      r = n[1],
      e = n[2]
    return Math.abs(
      (t[0] - e[0]) * (r[1] - t[1]) - (t[0] - r[0]) * (e[1] - t[1])
    )
  }
  function a(n) {
    for (var t, r = -1, e = n.length, o = n[e - 1], i = 0; ++r < e; )
      (t = o), (o = n[r]), (i += t[0] * o[1] - t[1] * o[0])
    return i / 2
  }
  function s(n, t) {
    function r(n) {
      n.forEach(function(t) {
        t.forEach(function(t) {
          ;(o[(t = t < 0 ? ~t : t)] || (o[t] = [])).push(n)
        })
      }),
        i.push(n)
    }
    function e(t) {
      return Math.abs(
        a(
          u(n, {
            type: 'Polygon',
            arcs: [t]
          }).coordinates[0]
        )
      )
    }
    var o = {},
      i = [],
      f = []
    return (
      t.forEach(function(n) {
        'Polygon' === n.type
          ? r(n.arcs)
          : 'MultiPolygon' === n.type && n.arcs.forEach(r)
      }),
      i.forEach(function(n) {
        if (!n._) {
          var t = [],
            r = [n]
          for (n._ = 1, f.push(t); (n = r.pop()); )
            t.push(n),
              n.forEach(function(n) {
                n.forEach(function(n) {
                  o[n < 0 ? ~n : n].forEach(function(n) {
                    n._ || ((n._ = 1), r.push(n))
                  })
                })
              })
        }
      }),
      i.forEach(function(n) {
        delete n._
      }),
      {
        type: 'MultiPolygon',
        arcs: f.map(function(t) {
          var r,
            i = []
          if (
            (t.forEach(function(n) {
              n.forEach(function(n) {
                n.forEach(function(n) {
                  o[n < 0 ? ~n : n].length < 2 && i.push(n)
                })
              })
            }),
            (i = v(n, i)),
            (r = i.length) > 1)
          )
            for (var u, f, c = 1, a = e(i[0]); c < r; ++c)
              (u = e(i[c])) > a &&
                ((f = i[0]), (i[0] = i[c]), (i[c] = f), (a = u))
          return i
        })
      }
    )
  }
  function l(n, t) {
    return n[1][2] - t[1][2]
  }
  var h = function() {},
    p = function(n, t) {
      return 'GeometryCollection' === t.type
        ? {
            type: 'FeatureCollection',
            features: t.geometries.map(function(t) {
              return i(n, t)
            })
          }
        : i(n, t)
    },
    v = function(n, t) {
      function r(t) {
        var r,
          e = n.arcs[t < 0 ? ~t : t],
          o = e[0]
        return (
          n.transform
            ? ((r = [0, 0]),
              e.forEach(function(n) {
                ;(r[0] += n[0]), (r[1] += n[1])
              }))
            : (r = e[e.length - 1]),
          t < 0 ? [r, o] : [o, r]
        )
      }
      function e(n, t) {
        for (var r in n) {
          var e = n[r]
          delete t[e.start],
            delete e.start,
            delete e.end,
            e.forEach(function(n) {
              o[n < 0 ? ~n : n] = 1
            }),
            f.push(e)
        }
      }
      var o = {},
        i = {},
        u = {},
        f = [],
        c = -1
      return (
        t.forEach(function(r, e) {
          var o,
            i = n.arcs[r < 0 ? ~r : r]
          i.length < 3 &&
            !i[1][0] &&
            !i[1][1] &&
            ((o = t[++c]), (t[c] = r), (t[e] = o))
        }),
        t.forEach(function(n) {
          var t,
            e,
            o = r(n),
            f = o[0],
            c = o[1]
          if ((t = u[f]))
            if ((delete u[t.end], t.push(n), (t.end = c), (e = i[c]))) {
              delete i[e.start]
              var a = e === t ? t : t.concat(e)
              i[(a.start = t.start)] = u[(a.end = e.end)] = a
            } else i[t.start] = u[t.end] = t
          else if ((t = i[c]))
            if ((delete i[t.start], t.unshift(n), (t.start = f), (e = u[f]))) {
              delete u[e.end]
              var s = e === t ? t : e.concat(t)
              i[(s.start = e.start)] = u[(s.end = t.end)] = s
            } else i[t.start] = u[t.end] = t
          else (t = [n]), (i[(t.start = f)] = u[(t.end = c)] = t)
        }),
        e(u, i),
        e(i, u),
        t.forEach(function(n) {
          o[n < 0 ? ~n : n] || f.push([n])
        }),
        f
      )
    },
    g = function(n) {
      return u(n, f.apply(this, arguments))
    },
    d = function(n) {
      return u(n, s.apply(this, arguments))
    },
    y = function(n) {
      function t(n, t) {
        n.forEach(function(n) {
          n < 0 && (n = ~n)
          var r = i[n]
          r ? r.push(t) : (i[n] = [t])
        })
      }
      function r(n, r) {
        n.forEach(function(n) {
          t(n, r)
        })
      }
      function e(n, t) {
        'GeometryCollection' === n.type
          ? n.geometries.forEach(function(n) {
              e(n, t)
            })
          : n.type in f && f[n.type](n.arcs, t)
      }
      var i = {},
        u = n.map(function() {
          return []
        }),
        f = {
          LineString: t,
          MultiLineString: r,
          Polygon: r,
          MultiPolygon: function(n, t) {
            n.forEach(function(n) {
              r(n, t)
            })
          }
        }
      n.forEach(e)
      for (var c in i)
        for (var a = i[c], s = a.length, l = 0; l < s; ++l)
          for (var h = l + 1; h < s; ++h) {
            var p,
              v = a[l],
              g = a[h]
            ;(p = u[v])[(c = o(p, g))] !== g && p.splice(c, 0, g),
              (p = u[g])[(c = o(p, v))] !== v && p.splice(c, 0, v)
          }
      return u
    },
    m = function() {
      function n(n, t) {
        for (; t > 0; ) {
          var r = ((t + 1) >> 1) - 1,
            o = e[r]
          if (l(n, o) >= 0) break
          ;(e[(o._ = t)] = o), (e[(n._ = t = r)] = n)
        }
      }
      function t(n, t) {
        for (;;) {
          var r = (t + 1) << 1,
            i = r - 1,
            u = t,
            f = e[u]
          if (
            (i < o && l(e[i], f) < 0 && (f = e[(u = i)]),
            r < o && l(e[r], f) < 0 && (f = e[(u = r)]),
            u === t)
          )
            break
          ;(e[(f._ = t)] = f), (e[(n._ = t = u)] = n)
        }
      }
      var r = {},
        e = [],
        o = 0
      return (
        (r.push = function(t) {
          return n((e[(t._ = o)] = t), o++), o
        }),
        (r.pop = function() {
          if (!(o <= 0)) {
            var n,
              r = e[0]
            return --o > 0 && ((n = e[o]), t((e[(n._ = 0)] = n), 0)), r
          }
        }),
        (r.remove = function(r) {
          var i,
            u = r._
          if (e[u] === r)
            return (
              u !== --o &&
                ((i = e[o]), (l(i, r) < 0 ? n : t)((e[(i._ = u)] = i), u)),
              u
            )
        }),
        r
      )
    },
    E = function(n, e) {
      function o(n) {
        f.remove(n), (n[1][2] = e(n)), f.push(n)
      }
      var i = t(n.transform),
        u = r(n.transform),
        f = m()
      return (
        null == e && (e = c),
        n.arcs.forEach(function(n) {
          var t,
            r,
            c,
            a,
            s = [],
            l = 0
          for (r = 0, c = n.length; r < c; ++r)
            (a = n[r]), i((n[r] = [a[0], a[1], 1 / 0]), r)
          for (r = 1, c = n.length - 1; r < c; ++r)
            (t = n.slice(r - 1, r + 2)), (t[1][2] = e(t)), s.push(t), f.push(t)
          for (r = 0, c = s.length; r < c; ++r)
            (t = s[r]), (t.previous = s[r - 1]), (t.next = s[r + 1])
          for (; (t = f.pop()); ) {
            var h = t.previous,
              p = t.next
            t[1][2] < l ? (t[1][2] = l) : (l = t[1][2]),
              h && ((h.next = p), (h[2] = t[2]), o(h)),
              p && ((p.previous = h), (p[0] = t[0]), o(p))
          }
          n.forEach(u)
        }),
        n
      )
    }
  ;(n.mesh = g),
    (n.meshArcs = f),
    (n.merge = d),
    (n.mergeArcs = s),
    (n.feature = p),
    (n.neighbors = y),
    (n.presimplify = E),
    Object.defineProperty(n, '__esModule', {
      value: !0
    })
})
```

:::

:::demo

```javascript
fetch('http://s0.qhres.com/static/10ae1d45499595ba.json')
  .then(res => res.json())
  .then(mapData => {
    const { Chart, Tooltip, Text, Map } = qcharts

    const chart = new Chart({
      container: '#app'
    })

    const map = new qcharts.Map({
      projection: 'geoOrthographic',
      scale: 0.4
    })

    map
      .setGeomData(mapData, {
        items: topojson.feature(mapData, mapData.objects.countries).features
      })
      .style('normal', { fillColor: '#214882', color: '#479cd3' })

    chart.add(map).add(new Text({ text: '地球' }))

    chart.render()
  })

// https://github.com/topojson/topojson-client Version 1.8.0. Copyright 2016 Mike Bostock.
!(function(n, t) {
  'object' == typeof exports && 'undefined' != typeof module
    ? t(exports)
    : 'function' == typeof define && define.amd
    ? define(['exports'], t)
    : t((n.topojson = n.topojson || {}))
})(this, function(n) {
  'use strict'
  function t(n) {
    if (!n) return h
    var t,
      r,
      e = n.scale[0],
      o = n.scale[1],
      i = n.translate[0],
      u = n.translate[1]
    return function(n, f) {
      f || (t = r = 0),
        (n[0] = (t += n[0]) * e + i),
        (n[1] = (r += n[1]) * o + u)
    }
  }
  function r(n) {
    if (!n) return h
    var t,
      r,
      e = n.scale[0],
      o = n.scale[1],
      i = n.translate[0],
      u = n.translate[1]
    return function(n, f) {
      f || (t = r = 0)
      var c = Math.round((n[0] - i) / e),
        a = Math.round((n[1] - u) / o)
      ;(n[0] = c - t), (n[1] = a - r), (t = c), (r = a)
    }
  }
  function e(n, t) {
    for (var r, e = n.length, o = e - t; o < --e; )
      (r = n[o]), (n[o++] = n[e]), (n[e] = r)
  }
  function o(n, t) {
    for (var r = 0, e = n.length; r < e; ) {
      var o = (r + e) >>> 1
      n[o] < t ? (r = o + 1) : (e = o)
    }
    return r
  }
  function i(n, t) {
    var r = {
      type: 'Feature',
      id: t.id,
      properties: t.properties || {},
      geometry: u(n, t)
    }
    return null == t.id && delete r.id, r
  }
  function u(n, r) {
    function o(n, t) {
      t.length && t.pop()
      for (var r, o = l[n < 0 ? ~n : n], i = 0, u = o.length; i < u; ++i)
        t.push((r = o[i].slice())), s(r, i)
      n < 0 && e(t, u)
    }
    function i(n) {
      return (n = n.slice()), s(n, 0), n
    }
    function u(n) {
      for (var t = [], r = 0, e = n.length; r < e; ++r) o(n[r], t)
      return t.length < 2 && t.push(t[0].slice()), t
    }
    function f(n) {
      for (var t = u(n); t.length < 4; ) t.push(t[0].slice())
      return t
    }
    function c(n) {
      return n.map(f)
    }
    function a(n) {
      var t = n.type
      return 'GeometryCollection' === t
        ? {
            type: t,
            geometries: n.geometries.map(a)
          }
        : t in h
        ? {
            type: t,
            coordinates: h[t](n)
          }
        : null
    }
    var s = t(n.transform),
      l = n.arcs,
      h = {
        Point: function(n) {
          return i(n.coordinates)
        },
        MultiPoint: function(n) {
          return n.coordinates.map(i)
        },
        LineString: function(n) {
          return u(n.arcs)
        },
        MultiLineString: function(n) {
          return n.arcs.map(u)
        },
        Polygon: function(n) {
          return c(n.arcs)
        },
        MultiPolygon: function(n) {
          return n.arcs.map(c)
        }
      }
    return a(r)
  }
  function f(n, t, r) {
    function e(n) {
      var t = n < 0 ? ~n : n
      ;(a[t] || (a[t] = [])).push({
        i: n,
        g: c
      })
    }
    function o(n) {
      n.forEach(e)
    }
    function i(n) {
      n.forEach(o)
    }
    function u(n) {
      'GeometryCollection' === n.type
        ? n.geometries.forEach(u)
        : n.type in s && ((c = n), s[n.type](n.arcs))
    }
    var f = []
    if (arguments.length > 1) {
      var c,
        a = [],
        s = {
          LineString: o,
          MultiLineString: i,
          Polygon: i,
          MultiPolygon: function(n) {
            n.forEach(i)
          }
        }
      u(t),
        a.forEach(
          arguments.length < 3
            ? function(n) {
                f.push(n[0].i)
              }
            : function(n) {
                r(n[0].g, n[n.length - 1].g) && f.push(n[0].i)
              }
        )
    } else for (var l = 0, h = n.arcs.length; l < h; ++l) f.push(l)
    return {
      type: 'MultiLineString',
      arcs: v(n, f)
    }
  }
  function c(n) {
    var t = n[0],
      r = n[1],
      e = n[2]
    return Math.abs(
      (t[0] - e[0]) * (r[1] - t[1]) - (t[0] - r[0]) * (e[1] - t[1])
    )
  }
  function a(n) {
    for (var t, r = -1, e = n.length, o = n[e - 1], i = 0; ++r < e; )
      (t = o), (o = n[r]), (i += t[0] * o[1] - t[1] * o[0])
    return i / 2
  }
  function s(n, t) {
    function r(n) {
      n.forEach(function(t) {
        t.forEach(function(t) {
          ;(o[(t = t < 0 ? ~t : t)] || (o[t] = [])).push(n)
        })
      }),
        i.push(n)
    }
    function e(t) {
      return Math.abs(
        a(
          u(n, {
            type: 'Polygon',
            arcs: [t]
          }).coordinates[0]
        )
      )
    }
    var o = {},
      i = [],
      f = []
    return (
      t.forEach(function(n) {
        'Polygon' === n.type
          ? r(n.arcs)
          : 'MultiPolygon' === n.type && n.arcs.forEach(r)
      }),
      i.forEach(function(n) {
        if (!n._) {
          var t = [],
            r = [n]
          for (n._ = 1, f.push(t); (n = r.pop()); )
            t.push(n),
              n.forEach(function(n) {
                n.forEach(function(n) {
                  o[n < 0 ? ~n : n].forEach(function(n) {
                    n._ || ((n._ = 1), r.push(n))
                  })
                })
              })
        }
      }),
      i.forEach(function(n) {
        delete n._
      }),
      {
        type: 'MultiPolygon',
        arcs: f.map(function(t) {
          var r,
            i = []
          if (
            (t.forEach(function(n) {
              n.forEach(function(n) {
                n.forEach(function(n) {
                  o[n < 0 ? ~n : n].length < 2 && i.push(n)
                })
              })
            }),
            (i = v(n, i)),
            (r = i.length) > 1)
          )
            for (var u, f, c = 1, a = e(i[0]); c < r; ++c)
              (u = e(i[c])) > a &&
                ((f = i[0]), (i[0] = i[c]), (i[c] = f), (a = u))
          return i
        })
      }
    )
  }
  function l(n, t) {
    return n[1][2] - t[1][2]
  }
  var h = function() {},
    p = function(n, t) {
      return 'GeometryCollection' === t.type
        ? {
            type: 'FeatureCollection',
            features: t.geometries.map(function(t) {
              return i(n, t)
            })
          }
        : i(n, t)
    },
    v = function(n, t) {
      function r(t) {
        var r,
          e = n.arcs[t < 0 ? ~t : t],
          o = e[0]
        return (
          n.transform
            ? ((r = [0, 0]),
              e.forEach(function(n) {
                ;(r[0] += n[0]), (r[1] += n[1])
              }))
            : (r = e[e.length - 1]),
          t < 0 ? [r, o] : [o, r]
        )
      }
      function e(n, t) {
        for (var r in n) {
          var e = n[r]
          delete t[e.start],
            delete e.start,
            delete e.end,
            e.forEach(function(n) {
              o[n < 0 ? ~n : n] = 1
            }),
            f.push(e)
        }
      }
      var o = {},
        i = {},
        u = {},
        f = [],
        c = -1
      return (
        t.forEach(function(r, e) {
          var o,
            i = n.arcs[r < 0 ? ~r : r]
          i.length < 3 &&
            !i[1][0] &&
            !i[1][1] &&
            ((o = t[++c]), (t[c] = r), (t[e] = o))
        }),
        t.forEach(function(n) {
          var t,
            e,
            o = r(n),
            f = o[0],
            c = o[1]
          if ((t = u[f]))
            if ((delete u[t.end], t.push(n), (t.end = c), (e = i[c]))) {
              delete i[e.start]
              var a = e === t ? t : t.concat(e)
              i[(a.start = t.start)] = u[(a.end = e.end)] = a
            } else i[t.start] = u[t.end] = t
          else if ((t = i[c]))
            if ((delete i[t.start], t.unshift(n), (t.start = f), (e = u[f]))) {
              delete u[e.end]
              var s = e === t ? t : e.concat(t)
              i[(s.start = e.start)] = u[(s.end = t.end)] = s
            } else i[t.start] = u[t.end] = t
          else (t = [n]), (i[(t.start = f)] = u[(t.end = c)] = t)
        }),
        e(u, i),
        e(i, u),
        t.forEach(function(n) {
          o[n < 0 ? ~n : n] || f.push([n])
        }),
        f
      )
    },
    g = function(n) {
      return u(n, f.apply(this, arguments))
    },
    d = function(n) {
      return u(n, s.apply(this, arguments))
    },
    y = function(n) {
      function t(n, t) {
        n.forEach(function(n) {
          n < 0 && (n = ~n)
          var r = i[n]
          r ? r.push(t) : (i[n] = [t])
        })
      }
      function r(n, r) {
        n.forEach(function(n) {
          t(n, r)
        })
      }
      function e(n, t) {
        'GeometryCollection' === n.type
          ? n.geometries.forEach(function(n) {
              e(n, t)
            })
          : n.type in f && f[n.type](n.arcs, t)
      }
      var i = {},
        u = n.map(function() {
          return []
        }),
        f = {
          LineString: t,
          MultiLineString: r,
          Polygon: r,
          MultiPolygon: function(n, t) {
            n.forEach(function(n) {
              r(n, t)
            })
          }
        }
      n.forEach(e)
      for (var c in i)
        for (var a = i[c], s = a.length, l = 0; l < s; ++l)
          for (var h = l + 1; h < s; ++h) {
            var p,
              v = a[l],
              g = a[h]
            ;(p = u[v])[(c = o(p, g))] !== g && p.splice(c, 0, g),
              (p = u[g])[(c = o(p, v))] !== v && p.splice(c, 0, v)
          }
      return u
    },
    m = function() {
      function n(n, t) {
        for (; t > 0; ) {
          var r = ((t + 1) >> 1) - 1,
            o = e[r]
          if (l(n, o) >= 0) break
          ;(e[(o._ = t)] = o), (e[(n._ = t = r)] = n)
        }
      }
      function t(n, t) {
        for (;;) {
          var r = (t + 1) << 1,
            i = r - 1,
            u = t,
            f = e[u]
          if (
            (i < o && l(e[i], f) < 0 && (f = e[(u = i)]),
            r < o && l(e[r], f) < 0 && (f = e[(u = r)]),
            u === t)
          )
            break
          ;(e[(f._ = t)] = f), (e[(n._ = t = u)] = n)
        }
      }
      var r = {},
        e = [],
        o = 0
      return (
        (r.push = function(t) {
          return n((e[(t._ = o)] = t), o++), o
        }),
        (r.pop = function() {
          if (!(o <= 0)) {
            var n,
              r = e[0]
            return --o > 0 && ((n = e[o]), t((e[(n._ = 0)] = n), 0)), r
          }
        }),
        (r.remove = function(r) {
          var i,
            u = r._
          if (e[u] === r)
            return (
              u !== --o &&
                ((i = e[o]), (l(i, r) < 0 ? n : t)((e[(i._ = u)] = i), u)),
              u
            )
        }),
        r
      )
    },
    E = function(n, e) {
      function o(n) {
        f.remove(n), (n[1][2] = e(n)), f.push(n)
      }
      var i = t(n.transform),
        u = r(n.transform),
        f = m()
      return (
        null == e && (e = c),
        n.arcs.forEach(function(n) {
          var t,
            r,
            c,
            a,
            s = [],
            l = 0
          for (r = 0, c = n.length; r < c; ++r)
            (a = n[r]), i((n[r] = [a[0], a[1], 1 / 0]), r)
          for (r = 1, c = n.length - 1; r < c; ++r)
            (t = n.slice(r - 1, r + 2)), (t[1][2] = e(t)), s.push(t), f.push(t)
          for (r = 0, c = s.length; r < c; ++r)
            (t = s[r]), (t.previous = s[r - 1]), (t.next = s[r + 1])
          for (; (t = f.pop()); ) {
            var h = t.previous,
              p = t.next
            t[1][2] < l ? (t[1][2] = l) : (l = t[1][2]),
              h && ((h.next = p), (h[2] = t[2]), o(h)),
              p && ((p.previous = h), (p[0] = t[0]), o(p))
          }
          n.forEach(u)
        }),
        n
      )
    }
  ;(n.mesh = g),
    (n.meshArcs = f),
    (n.merge = d),
    (n.mergeArcs = s),
    (n.feature = p),
    (n.neighbors = y),
    (n.presimplify = E),
    Object.defineProperty(n, '__esModule', {
      value: !0
    })
})
```

:::
