GeoStore

  1. Using the GeoStore
    1. Using in the Browser
    2. Using in Node.js
    3. Methods
      1. GeoStore.add(geojson, callback)
      2. GeoStore.update(geojson, callback)
      3. GeoStore.remove(id, callback)
      4. GeoStore.get(id, callback)
      5. GeoStore.contains(geojson, search, callback)
      6. GeoStore.within(geojson, search, callback)
      7. GeoStore.createReadStream()

The Terraformer GeoStore is a set of building blocks for managing spatial data as a GeoJSON Feature or FeatureCollection. It includes functionality for storing and querying data in primarily a spatial manner.

GeoStores are broken into three parts: Data Stores, Spatial Indexes, and Alternate Indexes.

More in-depth information can be found in Core Concepts.

Link Using the GeoStore Back to Top

The GeoStore can be used in both the browser and server-side via Node.js. Functionally, they behave the same, but some Data Stores and Indexes will only work in one environment. For instance, LocalStorage will not work by default in Node.js.

The GeoStore uses Node.js style callbacks, so most method signatures require a callback function that expects error and response: function (err, res) { }.

The GeoStore manages data that is made available as either a Feature or a FeatureCollection. In order to work, there must be an id field.

{
  "type": "Feature",
  "properties": {},
  "id": "my id",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [
        [
          -111.09374, 41.50857
        ],
        [
          -111.09374, 45.08903
        ],
        [
          -105.11718, 45.08903
        ],
        [
          -105.11718, 41.50857
        ],
        [
          -111.09374, 41.50857
        ]
      ]
    ]
  }
}

Link Using in the Browser Back to Top

Using the GeoStore in the browser requires including both Terraformer and the GeoStore:

<script src="https://unpkg.com/terraformer@1.0.7"></script>
<script src="https://unpkg.com/terraformer-geostore@1.0.4/browser/terraformer-geostore.js"></script>

Once those are included, you can create a new Store. You will need to include both a Data Store and a Spatial Index to instantiate a GeoStore.

// create a new GeoStore using Memory and an RTree Index
var store = new Terraformer.GeoStore({
  store: new Terraformer.Store.Memory(),
  index: new Terraformer.RTree()
});

Once the store has been created, you can start using it right away.

Link Using in Node.js Back to Top

In Node.js, the components are available via require().

// require geostore, an RTree index, and a LevelDB data store
var GeoStore = require('terraformer-geostore').GeoStore;
var RTree = require('terraformer-rtree').RTree;
var LevelStore = require('terraformer-geostore-leveldb');

Once the packages are in scope, it is very similar as using the GeoStore in the browser.

var store = new GeoStore({
  store: new LevelStore(),
  index: new RTree()
});

Link Methods Back to Top

Link GeoStore.add(geojson, callback) Back to Top

Add a geojson object to the GeoStore.

Option Value Description
GeoJSON object Must be either a Feature or FeatureCollection and contain an id
callback function Callback to be fired when the add has been completed

Example:

store.add(geojson, function (err, res) {
  // Node.js style callback
});

Link GeoStore.update(geojson, callback) Back to Top

Update a single geojson Feature in the GeoStore.

Option Value Description
GeoJSON object Must be a Feature and contain an id
callback function Callback to be fired when the update has been completed

Example:

store.update(geojson, function (err, res) {
  // Node.js style callback
});

Link GeoStore.remove(id, callback) Back to Top

Removes a single geojson Feature by id.

Option Value Description
id String or Number The id of the Feature to be removed
callback function Callback to be fired when the remove has been completed

Example:

store.remove(id, function (err, res) {
  // Node.js style callback
});

Link GeoStore.get(id, callback) Back to Top

Retrieves a single geojson Feature by id.

Option Value Description
id String or Number The id of the Feature to be retrieved
callback function Callback to be fired when the get has been completed

Example:

store.get(id, function (err, res) {
  // Node.js style callback
});

Link GeoStore.contains(geojson, search, callback) Back to Top

Find all Features that contain the geojson primitive passed in. contains can use additional indexes to do set elimination on properties of a Feature.

Option Value Description
GeoJSON object A GeoJSON primitive to search with
search (optional) object The second argument is optional. If provided it contains additional search criteria for set elimination
callback function Callback to be fired when the contains has been completed

Example:

store.contains(geojson, function (err, res) {
  // Node.js style callback
});

store.contains(
  geojson,
  {
    "name":
    {
      "equals": "Multnomah"
    }
  },
  function (err, res) {
    // Node.js style callback
  }
);

Link GeoStore.within(geojson, search, callback) Back to Top

Find all Features that are within the geojson primitive passed in. within can use additional indexes to do set elimination on properties of a Feature.

Option Value Description
GeoJSON object A GeoJSON primitive to search with
search (optional) object The second argument is optional. If provided it contains additional search criteria for set elimination
callback function Callback to be fired when the within has been completed

Example:

store.within(geojson, function (err, res) {
  // Node.js style callback
});

store.within(
  geojson,
  {
    "name":
    {
      "equals": "Multnomah"
    }
  },
  function (err, res) {
    // Node.js style callback
  }
);

Link GeoStore.createReadStream() Back to Top

GeoStore supports readable streams in both the browser and Nodejs. Currently only flowing streams are supported. Streams can be created with the createReadStream() method. When a stream has been created, the next within or contains request uses that stream in place of a callback. It is important to note that the stream only lasts for the duration of a single search via within or contains.

The stream will emit data on any data, and end with the final entry found.

Since streams are not reentrant in the GeoStore, it is recommended to create a new GeoStore for each stream. Streams are destroyed after the end event has been called.

Example:

var stream = store.createReadStream();

stream.on("data", function (geojson) {
  // found geojson
});

stream.on("end", function (geojson) {
  // final geojson object
});