changeset 1624:943823d03d50

WFS downloader: Started with mapping return features to Go structs.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 18 Dec 2018 18:36:02 +0100
parents 20c98c2964f7
children de4e4dcb8f87
files cmd/wfs/dump.go pkg/wfs/download.go pkg/wfs/rawfeaturecollection.go
diffstat 3 files changed, 66 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/cmd/wfs/dump.go	Tue Dec 18 16:47:28 2018 +0100
+++ b/cmd/wfs/dump.go	Tue Dec 18 18:36:02 2018 +0100
@@ -17,28 +17,18 @@
 	"bufio"
 	"fmt"
 	"io"
-	"net/http"
 	"os"
 
 	"gemma.intevation.de/gemma/pkg/wfs"
 )
 
-func dumpURL(out io.Writer, url string) error {
-	resp, err := http.Get(url)
-	if err != nil {
-		return err
-	}
-	defer resp.Body.Close()
-	_, err = io.Copy(out, resp.Body)
-	return err
-}
-
 func dumpURLs(urls []string) error {
 	out := bufio.NewWriter(os.Stdout)
-	for _, url := range urls {
-		if err := dumpURL(out, url); err != nil {
-			return err
-		}
+	if err := wfs.downloadURLs(urls, func(r io.Reader) error {
+		_, err := io.Copy(out, r)
+		return err
+	}); err != nil {
+		return err
 	}
 	return out.Flush()
 }
--- a/pkg/wfs/download.go	Tue Dec 18 16:47:28 2018 +0100
+++ b/pkg/wfs/download.go	Tue Dec 18 18:36:02 2018 +0100
@@ -18,6 +18,7 @@
 	"encoding/xml"
 	"errors"
 	"fmt"
+	"io"
 	"log"
 	"net/http"
 	"net/url"
@@ -235,3 +236,21 @@
 
 	return downloadURLs, nil
 }
+
+func downloadURL(url string, handler func(io.Reader) error) error {
+	resp, err := http.Get(url)
+	if err != nil {
+		return err
+	}
+	defer resp.Body.Close()
+	return handler(resp.Body)
+}
+
+func DownloadURLs(urls []string, handler func(io.Reader) error) error {
+	for _, url := range urls {
+		if err := downloadURL(url, handler); err != nil {
+			return nil
+		}
+	}
+	return nil
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkg/wfs/rawfeaturecollection.go	Tue Dec 18 18:36:02 2018 +0100
@@ -0,0 +1,42 @@
+// This is Free Software under GNU Affero General Public License v >= 3.0
+// without warranty, see README.md and license for details.
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// License-Filename: LICENSES/AGPL-3.0.txt
+//
+// Copyright (C) 2018 by via donau
+//   – Österreichische Wasserstraßen-Gesellschaft mbH
+// Software engineering by Intevation GmbH
+//
+// Author(s):
+//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>
+
+package wfs
+
+import (
+	"encoding/json"
+	"io"
+)
+
+type RawFeatureCollection struct {
+	CRS struct {
+		Properties struct {
+			Name string `json:"name"`
+		} `json:"properties"`
+	} `json:"crs"`
+	Features []*struct {
+		Geometry struct {
+			Coordinates *json.RawMessage `json:"coordinates"`
+			Type        string           `json:"type"`
+		} `json:"geometry"`
+		Properties *json.RawMessage `json:"properties"`
+	} `json:"features"`
+}
+
+func ParseRawFeatureCollection(r io.Reader) (*RawFeatureCollection, error) {
+	rfc := new(RawFeatureCollection)
+	if err := json.NewDecoder(r).Decode(rfc); err != nil {
+		return nil, err
+	}
+	return rfc, nil
+}