Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

cross-street-indexer

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

cross-street-indexer

Cross Street Indexer

  • 0.4.3
  • npm
  • Socket score

Version published
Weekly downloads
1
Maintainers
1
Weekly downloads
 
Created
Source

Cross Street Indexer

Build Status npm version MIT licensed

Light weigth reverse geocoding for cross street 100% sourced from OSM QA Tiles.

image

Features

  • Blazing fast 1/20th of a millisecond search (275,000 ops/sec)
  • Processed United States OSM QA Tiles in 35m 13s (189714 tiles)
  • Easy to use CLI to build index
  • Node 6 & 7 compatible
  • Only uses Tile Reduce + Turf
  • Ready for S3 Upload or LevelDB
  • Bundled 5MB QA-Tiles for testing purposes

Process

  • Step 1: Filter data from QA-Tiles (lib/qa-tiles-filter.js)
  • Step 2: Extract road intersections from QA-Tiles (lib/intersections.js)
  • Step 3: Normalize street name ABBOT AVE. => abbot avenue (lib/normalize.js)
  • Step 4: Convert intersections into multiple points using a combination of road & ref tags (lib/geocoding-pairs).
  • Step 5: Group all hashes into single Quadkey JSON object (lib/reducer.js)
  • Step 6: Publish to S3 or LevelDB

Install

npm

$ npm install --global cross-street-indexer

yarn

$ yarn global add cross-street-indexer

Quickstart

$ cross-street-indexer latest.planet.mbtiles --tiles [[654,1584,12]]
$ cross-street-search "Chester St" "ABBOT AVE." --tiles [[654,1584,12]]
-122.457711,37.688544

CLI

Cross Street Indexer

$ cross-street-indexer --help

  Cross Street Indexer

  Usage:
    $ cross-street-indexer <qa-tiles>
  Options:
    --output    [cross-street-index] Filepath to store outputs
    --bbox      Excludes QATiles by BBox
    --tiles     Excludes QATiles by an Array of Tiles
    --debug     [false] Enables DEBUG mode
  Examples:
    $ cross-street-indexer latest.planet.mbtiles
    $ cross-street-indexer latest.planet.mbtiles --tiles [[654,1584,12]]
    $ cross-street-indexer latest.planet.mbtiles --bbox [-122.519,37.629,-122.168,37.917]
$ cross-street-search --help

  Cross Street Indexer

  Usage:
    $ cross-street-search <name1> <name2>
  Options:
    --output    [cross-street-index] filepath to Cross Street index output folder
    --tiles     Lookup index files via an Array of Tiles or Quadkeys
    --bbox      Lookup index files via BBox
    --latlng    Outputs LatLng instead of the default LngLat
    --stream    Enables reading from streaming index file (ignores tiles options)
  Examples:
    $ cross-street-search "Chester St" "ABBOT AVE." --tiles [[654,1584,12]]
    $ cross-street-search "Chester St" "ABBOT AVE." --tiles '["023010221110"]'
    $ cat 023010221110.json | cross-street-search "Chester St" "ABBOT AVE."

Normalization Process

Normalization should follow the following standards:

  • Drop any period if exists
    • ave. => avenue
  • Street suffix to full name
    • ave => avenue
    • CIR => circle
    • ln => lane
  • Name should be entirely lowercase
    • Parkside Avenue => parkside avenue
  • Direction to full word
    • N => north
    • S => south
    • NE => northeast
  • Numbered streets to full word
    • 9th => ninth
    • 5th => fifth

Index (JSON Lines)

The Cross Street Index is stored in an easy to read key/value JSON Lines format.

  • key: Normalized road pairs (<name1>+<name2>)
  • value: Longitude & Latitude
{"abbot avenue+chester street":[-122.457711,37.688544]}
{"chester street+abbot avenue":[-122.457711,37.688544]}
{"chester street+lisbon street":[-122.45821,37.68796]}
{"lisbon street+chester street":[-122.45821,37.68796]}
{"hoffman street+lisbon street":[-122.456764,37.687179]}

OSM Attributes

  • name: Street name (Abbot Avenue)
  • ref Reference number normaly used to tag highways numbers
  • highway classification (residential, primary, secondary)
  • bridge yes/no
  • tunnel yes/no
  • @id OSM ID of street (way)

Debugging

Adding --debug will store .geojson items for each process & for each QA-Tile:

{
	"tile": [
		654,
		1584,
		12
	],
	"quadkey": "023010221110",
	"features": 49003,
	"lines": 2427,
	"intersects": 1921,
	"index": 3882
}

Additional files will be created in the debug/ folder:

  • debug/<quadkey>/lines.geojson - Filtered (Multi)LinesString from QA-Tile
  • debug/<quadkey>/intersects.geojson - Point which are intersecting roads
  • debug/<quadkey>/index.json - Final Cross Street index
  • debug/<quadkey>/debug.json - Debug details

Limitations

Loops

Loops would return multiple cross street matches, only the last matched point is stored.

Turning Circles

Turning Circles without any names are exclude, thus not finding any matches.

image

References

FAQs

Package last updated on 21 May 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc