# readers.greyhound

The Greyhound Reader allows you to query point data from a Greyhound server.

Dynamic Plugin

This stage requires a dynamic plugin to operate

## Example

    {
      "pipeline":[
        {
          "type": "readers.greyhound",
          "url": "data.greyhound.io",
          "resource": "iowa-z",
          "filter": {"$and": [
            {"Path": "02004736.laz"},
            {"Classification": {"$ne": 7}}
          ]}
        },
        "output.laz"
      ]
    }

    {
      "pipeline":[
        "greyhound://data.greyhound.io/resource/iowa-z/read?filter={\"Path\":\"02004736.laz\"}",
        "02004736.laz"
      ]
    }

## Options

url
  Greyhound server URL, or a full Greyhound read query URL. If specified as a full Greyhound query URL, no other options need to be present.
resource
  Name of the Greyhound resource to access.
bounds
  Spatial bounds to query, expressed as a string, e.g. ([xmin, xmax], [ymin, ymax]) or ([xmin, xmax], [ymin, ymax], [zmin, zmax]) or as a Greyhound bounds array. By default, the entire resource is queried.
depth_begin
  Beginning octree depth to query, inclusive. Lower depth values have coarser resolution, so a depth range of [0, 8) could provide a low-resolution overview of the entire resource, for example. [Default: 0]
depth_end
  Ending octree depth to query, non-inclusive. A value of 0 will search all depths greater-than or equal-to depth_begin. If non-zero, this value should be greater than depth_begin or the result will always be empty. [Default: 0]
tile_path
  A Greyhound resource may be an aggregation of multiple input files. If a tile_path option is present, then only points belonging to that file will be queried. This search is spatially optimized, so no bounds option needs to be present to limit the query bounds.
filter

  Server-side filtering may be requested which may further limit the data selected by the query. The filter is represented as JSON, and performs filtering on dimensions present in the resource, or the pseudo-dimension Path, corresponding to tile_path values.

  Arbitrary logic combinations may be created using comparison and logical query operators with syntax matching that of MongoDB. Some sample filters follow.

    {
        "Path":{"$in":["tile-845.laz", "tile-846.laz"]},
        "Classification":{"$ne":18}
    }

    {"$or":[
        {"Red":{"$gt":200}},
        {"Blue":{"$gt":120,"$lt":130}},
        {"Classification":{"$nin":[2,3]}}
    ]}