node package manager
Painless code sharing. npm Orgs help your team discover, share, and reuse code. Create a free org ยป

nyc-bytes

node-nyc-bytes

A node.js module for working with NYC's BYTES of the BIG APPLE datasets.

nyc-bytes automatically downloads, extracts, and exposes a stream of objects from any of the supported datasets. Most datasets return object representations of the records. MapPluto returns GeoJSON Polygons converted from New York - Long Island State Plane Coordinate System (NAD83) to standard Latitude/Longitude (WGS84) for easy mapping use.

Currently Supported Datasets

  • PLUTO
  • MapPluto
  • NYC Zoning Tax Lot Database
  • PAD (Property Address Directory)

Usage

npm install nyc-bytes

Each dataset is exposed as a singleton object that must be initialized. This ensures that the underlying files are downloaded, extracted, and ready for use. Initializing the dataset returns a Promise that returns once the dataset has finished initializing.

const Bytes = require('nyc-bytes');

const dataset = Bytes.Pluto;
dataset.init().then(() => {
  console.log('Dataset ready.');
  const stream = dataset.stream();
  // do something with stream
}).catch((err) => {
  console.error(err);
});
Datasets
  • Pluto - var dataset = Bytes.Pluto;
  • MapPluto - var dataset = Bytes.MapPluto; (requires ogr2ogr)
  • NYC Zoning Tax Lot Database - var dataset = Bytes.ZoningTaxLot;
  • PAD (Property Address Directory) - var dataset = Bytes.PAD;

dataset.stream([options])

The dataset's underlying data is accessible like any other standard node stream.

const stream = dataset.stream();
stream.on('readable', () => {
  const record = stream.read();
  // do something with the record
});
stream.on('end', () => {
  console.log('finished');
});

You can also use the stream in flowing mode by attaching a data event listener.

const stream = dataset.stream();
stream.on('data', (record) => {
  // do something with the record
});
stream.on('end', () => {
  console.log('finished');
});

Lastly, you can also pipe the stream like you would any other readable stream.

const stream = dataset.stream();
const writableStream = somehowGetWritableStream();
stream.pipe(writableStream);

options

  • boroughs - default: ['MN','BX','BK','QN','SI'] - Array of boroughs to return in the stream.
  • table - default: 'BOTH' - Which table ('BBL'|'ADR') to return (only applicable to PAD dataset)
  • sanitize - default: true - Removes extra whitespaces. (only applicable to PAD dataset) Ex.
"EAST   45 STREET               "

becomes

"EAST 45 STREET"

Todo

  • Add datasets - open an issue to suggest a dataset you'd like to see.