npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

topohelper

v0.5.1

Published

TopoJSON helper help you manipulate topoJSON files with ease

Downloads

5

Readme

topohelper

TopoJSON Helper is a javascript library that will help you manipulate topoJSON with ease. From a geoJSON or a topoJSON, apply precise operations to take full advantage of this great format.

See it in action on Observable

Install

In browser

<script src="https://cdn.jsdelivr.net/npm/topohelper@latest/+esm"></script>

In ObservableHQ

topohelper = require("topohelper");

In Node.js or Application Bundles

After installing topohelper as a dependency.

CommonJS module

const topohelper = require("topohelper@latest");

ES module

import * as topohelper from "topohelper";

Build Instructions

To build and develop topohelper locally:

  • git clone https://github.com/AtelierCartographie/topohelper.git
  • Run pnpm install to install dependencies for all packages.
  • Run pnpm build

Usage

Docs

Import geofile (topojson or geojson)

from(topojson) - source

Instantiate a topohelper class of a topojson.
A deep copy of the topojson can be made.

  • options.deep {Boolean} - create a deep copy of the topojson. Default is false.
topohelper.from(topojson_file);

fromGeojson(geojson) - source

Instantiate a topohelper class from a geojson or an array of geojson.
Before inputs are convert to a single topojson.

  • options.name {String|String[]} - name of the new layer

Operations

lines(options) - source

Convert to a single MultiLineString a topojson or a topojson geometry object.
Point and MultiPoint geometry object are ignore.

  • options.layer {String|Number} - a single target layer (name or index), if "all", all layers are used. Default: last layer created or first layer on first operation
  • options.name {String} - name of the new layer; default: operation name "lines"
  • options.addLayer {Boolean} - if true add a layer to existing ones; default: true
topohelper.from(topojson_file).lines();

innerlines(options) - source

Keep share arcs of adjacent Polygon|MultiPolygon as a single MultiLineString.
A group by a property can be applied at the same time.
Point and MultiPoint geometry object are ignore.

  • options.layer {String|Number} - a single target layer (name or index); default: last layer created or first layer on first operation
  • options.groupby {String} - group by a data property before
  • options.name {String} - name of the new layer; default: operation name "innerlines"
  • options.addLayer {Boolean} - if true add a layer to existing ones; default: true
topohelper.from(topojson_file).innerlines({ groupby: "property_name" });

outerlines(options) - source

Remove share arcs of adjacent Polygon|MultiPolygon and transform the rest as a single MultiLineString.
Point and MultiPoint geometry object are ignore.

  • options.layer {String|Number} - a single target layer (name or index); default: last layer created or first layer on first operation
  • options.name {String} - name of the new layer; default: operation name "outerlines"
  • options.addLayer {Boolean} - if true add a layer to existing ones; default: true
topohelper.from(topojson_file).outerlines();

merge(options) - source

Union all Polygon|MultiPolygon of a layer. Share arcs of adjacent Polygon|MultiPolygon are removed.
A group by a property can be applied at the same time.

  • options.layer {String|Number} - a single target layer (name or index); default: last layer created or first layer on first operation
  • options.groupby {String} - group by a data property before
  • options.name {String} - name of the new layer; default: operation name "merge"
  • options.addLayer {Boolean} - if true add a layer to existing ones; default: true
topohelper.from(topojson_file).merge({
  groupby: "property_name",
  rollup: { sum: aq.op.sum("property_name") },
});

filter(options) - source

Filter a topojson on a condition. The condition function expose geometry object (type and arcs) and his properties if any.

  • options.layer {String|Number} - a single target layer (name or index); default: last layer created or first layer on first operation
  • options.condition {Function} - function or arrow function.
  • options.name {String} - name of the new layer; default: operation name "filter"
  • options.addLayer {Boolean} - if true add a layer to existing ones; default: true
topohelper
  .from(topojson_file)
  .filter({ condition: (d) => d.properties.dep == "76" });

centroids(options) - source

Get centroids of each Polygon|MultiPolygon of a topojson layer.
Point|MultiPoint and LineString|MultiLineString geometry object are ignore.

  • options.layer {String|Number} - a single target layer (name or index); default: last layer created or first layer on first operation
  • options.name {String} - name of the new layer; default: operation name "centroids"
  • options.addLayer {Boolean} - true add a layer to existing ones
  • options.better {Boolean} - if true calcul a pole of inaccessibility instead of a centroid; default: false
topohelper.from(topojson_file).centroids({ layer: 0 });

simplify(options) - source

Simplify all layers of a topojson. Intensity of simplification is control by the level option.

  • options.level {Number} - a level of simplification between 0 and 1. 1 = no simplification, 0 = maximum. Default 0.5
topohelper.from(topojson_file).simplify({ level: 0.3 });

properties(options) - source

Manipulate properties of a topojson layer.
Four types of operations are available: select, rename, derive and join.
Manipulation order of the verbs respect options object order. {select, rename}{rename, select}

  • options.layer {String|Number} - a single target layer (name or index); default: last layer created or first layer on first operation
  • options.select {String|String[]} - Select properties to keep.
  • options.rename {Object} - Rename some or all properties. ex: {'oldName': 'newName'}.
  • options.derive {Object} - Add or modify properties. ex: {newColumn: (d) => d.oldColumn + 1}
  • options.join {Object} - Join left an external table (array of objects). ex: {'data': 'table', on: 'id'} or {'data': 'table', on: ['source_id', 'target_id']}.
topohelper.from(topojson_file).properties({
  select: ["ID", "POPULATION"],
  rename: { ID: "id", POPULATION: "pop" },
  derive: { pop1000: (d) => d.pop / 1000 },
});

Preview

view(options) - source

Preview a topojson in Canvas. Zoom and tooltip are built in as option.
Multiple layers can be shown at the same time.

  • options.layer {String[]|Number[]} - one or several layer (name or index). If "last", render the last layer created. If omit or "all" render all layers. Default: "all".
  • options.zoom {Boolean} - if true add a tooltip; default: false
  • options.tooltip {Boolean} - if true add a tooltip; default: false
  • options.size {Number[]} - canvas dimensions as [width, height]
topohelper.from(topojson_file).view({ zoom: true });

Export

toTopojson(options) - source

Convert a topohelper topojson to a classic topojson with option to select layers and quantize result (good size reduction).

  • options.layer {String[]|Number[]} - targets layers (name or index). If omit or "all" use all layers.
  • options.q {Boolean|Number} - level of quantization. if true quantization is applied with a value of 1e4. Default: true.
topohelper.from(topojson_file)
          .innerlines()
          .toTopojson({layer: "innerlines}) // export a single layer

toGeojson(options) - source

Convert a topohelper topojson to a geojson or an array of geojson.

  • options.layer {String[]|Number[]} - targets layers (name or index). If omit or "all" use all layers.
topohelper.from(topojson_file).innerlines().centroids({ layer: 0 }).toGeojson(); // export all layers as an array of geojson

toObjects(options) - source

Export properties of a layer.

  • options.layer {String|Number} - target layer (name or index).
topohelper.from(topojson_file).toObjects();