Yet another GeoJson to Ndjson converter

Michael Entin
2 min readMar 10, 2020

You might have already seen many ways to convert GeoJson files to something BigQuery can understand. Let’s invent one more wheel!

E.g. this python script from Lak Lakshmanan:

Or using org2org tools to produce CSV file:

I also have a few node.js scripts to convert both ways between GeoJson or new-line-delimited GeoJson to New-line-delimited Json (ndjson) that BigQuery uses at https://github.com/mentin/geoscripts

But not everyone knows how to run Python and installing Node.js might be a mess, so here is a simpler way to do it, using jq command line tool. Jq (https://stedolan.github.io/jq/) is single-executable command line tool for processing json files. Install it following instructions at https://stedolan.github.io/jq/download/.

You can convert geojson files to ndjson files using this script:

jq --compact-output '.features[] | (.geometry | tojson) as $g | . = .properties | .geometry |= $g' < input_file > output_file

You do need to replace input_file and output_file with proper file names.

— —

OK, if you want to know how it works, it does the following (node.js scripts mentioned above use the same logic):

  • .features[] selects individual feature in top level feature collection
  • .geometry | tojson saves the geometry field as quoted string to variable $g
  • we then create object based on feature’s .properties
  • and finally update this object’s .geometry field with saved variable $g.
  • — compact-output makes jq output every feature on its own line, which is exactly what BigQuery needs.

Some limitations of this approach:

  • this only supports GeoJson with default coordinate reference system (other CRS were deprecated by standard, but are still used sometimes)
  • this only supports GeoJson that contains FeatureCollection object, would not work if file has a single top level Feature.

--

--

Michael Entin

Hi, I'm TL of BigQuery Geospatial project. Posting small recipes and various notes for BQ Geospatial users.