#!/bin/sh
#
# Copyright © 2014, 2017 Jonas Smedegaard <dr@jones.dk>
# Description: resolve GeoJSON from OSM node, way and relation objects.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# Depends: gdal-bin jq

set -eu

# type must be either polygons, lines or points
type="$1"; shift

features=$*

onlineosmxml2geojson() {
	set -e
	echo '['
	first=yes
	for feature in "$@"; do
		case "$feature" in
		  node/*)
			url="http://www.openstreetmap.org/api/0.6/$feature"
			;;
		  *)
			url="http://www.openstreetmap.org/api/0.6/$feature/full"
			;;
		esac
		[ -n "$first" ] || echo ','
		case "$type" in
		  polygons)
			ogr2ogr --config OSM_USE_CUSTOM_INDEXING NO -nlt PROMOTE_TO_MULTI -f GeoJSON /vsistdout/ /vsicurl_streaming/"$url" multipolygons
			;;
		  lines)
			ogr2ogr --config OSM_USE_CUSTOM_INDEXING NO -nlt PROMOTE_TO_MULTI -f GeoJSON /vsistdout/ /vsicurl_streaming/"$url" multilinestrings
			;;
		  points)
			ogr2ogr --config OSM_USE_CUSTOM_INDEXING NO -f GeoJSON /vsistdout/ /vsicurl_streaming/"$url" points
			;;
		esac
		first=
	done
	echo ']'
}

onlineosmxml2geojson $features \
	| jq --tab --sort-keys . \
	| perl -0 -pe 's/},\s*{/}, {/g; s/\[\s*([\d.,]+)\s*([\d.]+)\s*\]/[$1 $2]/g'