Common arguments and options for GeoJSON processing commands, using Click.
cligj is for Python developers who create command line interfaces for geospatial data. cligj allows you to quickly build consistent, well-tested and interoperable CLIs for handling GeoJSON.
files_in_arg
Multiple files
files_inout_arg
Multiple files, last of which is an output file.
features_in_arg
GeoJSON Features input which accepts multiple representations of GeoJSON features and returns the input data as an iterable of GeoJSON Feature-like dictionaries
verbose_opt
quiet_opt
format_opt
indent_opt
compact_opt
precision_opt
projection_geographic_opt
projection_projected_opt
projection_mercator_opt
sequence_opt
use_rs_opt
geojson_type_collection_opt
geojson_type_feature_opt
def geojson_type_bbox_opt
Here's an example of a command that writes out GeoJSON features as a collection or, optionally, a sequence of individual features. Since most software that reads and writes GeoJSON expects a text containing a single feature collection, that's the default, and a LF-delimited sequence of texts containing one GeoJSON feature each is a feature that is turned on using the --sequence
option. To write sequences of feature texts that conform to the GeoJSON Text Sequences standard (and might contain pretty-printed JSON) with the ASCII Record Separator (0x1e) as a delimiter, use the --rs
option
Warning
Future change warning GeoJSON sequences (--sequence), not collections (--no-sequence), will be the default in version 1.0.0.
import click import cligj import json def process_features(features): for feature in features: # TODO process feature here yield feature @click.command() @cligj.features_in_arg @cligj.sequence_opt @cligj.use_rs_opt def pass_features(features, sequence, use_rs): if sequence: for feature in process_features(features): if use_rs: click.echo(u'\x1e', nl=False) click.echo(json.dumps(feature)) else: click.echo(json.dumps( {'type': 'FeatureCollection', 'features': list(process_features(features))}))
On the command line, the generated help text explains the usage
Usage: pass_features [OPTIONS] FEATURES... Options: --sequence / --no-sequence Write a LF-delimited sequence of texts containing individual objects or write a single JSON text containing a feature collection object (the default). --rs / --no-rs Use RS (0x1E) as a prefix for individual texts in a sequence as per http://tools.ietf.org/html /draft-ietf-json-text-sequence-13 (default is False). --help Show this message and exit.
And can be used like this
$ cat data.geojson {'type': 'FeatureCollection', 'features': [{'type': 'Feature', 'id': '1'}, {'type': 'Feature', 'id': '2'}]} $ pass_features data.geojson {'type': 'FeatureCollection', 'features': [{'type': 'Feature', 'id': '1'}, {'type': 'Feature', 'id': '2'}]} $ cat data.geojson | pass_features {'type': 'FeatureCollection', 'features': [{'type': 'Feature', 'id': '1'}, {'type': 'Feature', 'id': '2'}]} $ cat data.geojson | pass_features --sequence {'type': 'Feature', 'id': '1'} {'type': 'Feature', 'id': '2'} $ cat data.geojson | pass_features --sequence --rs ^^{'type': 'Feature', 'id': '1'} ^^{'type': 'Feature', 'id': '2'}
In this example, ^^
represents 0x1e.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4