annotate pkg/imports/wx.go @ 1828:1ecfcf46e4da

Waterway area/axis: Be more informative if features are bad.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 16 Jan 2019 15:35:23 +0100
parents 904c7e853adc
children 2b72f5e005aa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2018 by via donau
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package imports
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 "context"
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "database/sql"
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
19 "encoding/json"
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
20 "errors"
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
21 "fmt"
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
22 "io"
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
23 "time"
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 "gemma.intevation.de/gemma/pkg/common"
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
26 "gemma.intevation.de/gemma/pkg/wfs"
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 )
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
29 // WaterwayAxis is an import job to import
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
30 // the waterway axes in form of line string geometries
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
31 // and attribute data from a WFS service.
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 type WaterwayAxis struct {
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
33 // URL the GetCapabilities URL of the WFS service.
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
34 URL string `json:"url"`
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
35 // FeatureType selects the feature type of the WFS service.
1677
53304db85888 Waterway axis import: Added route for manual import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1675
diff changeset
36 FeatureType string `json:"feature-type"`
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
37 // SortBy works around misconfigured services to
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
38 // establish a sort order to get the features.
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
39 SortBy string `json:"sort-by"`
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1683
diff changeset
42 // WXJobKind is the import queue type identifier.
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 const WXJobKind JobKind = "wx"
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 type wxJobCreator struct{}
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 func init() {
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 RegisterJobCreator(WXJobKind, wxJobCreator{})
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50
1754
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1706
diff changeset
51 func (wxJobCreator) Description() string { return "waterway axis" }
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1706
diff changeset
52
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1706
diff changeset
53 func (wxJobCreator) AutoAccept() bool { return true }
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 func (wxJobCreator) Create(_ JobKind, data string) (Job, error) {
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 wx := new(WaterwayAxis)
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 if err := common.FromJSONString(data, wx); err != nil {
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 return nil, err
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 return wx, nil
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 func (wxJobCreator) Depends() []string {
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 return []string{
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 "waterway_axis",
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 // StageDone is a NOP for waterway axis imports.
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 func (wxJobCreator) StageDone(context.Context, *sql.Tx, int64) error {
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 return nil
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73
1785
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
74 // CleanUp for waterway axis imports is a NOP.
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 func (*WaterwayAxis) CleanUp() error { return nil }
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
77 type waterwayAxisProperties struct {
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
78 ObjNam string `json:"hydro_objnam"`
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
79 NObjNnm *string `json:"hydro_nobjnm"`
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
80 }
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
81
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
82 const (
1795
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
83 deleteWaterwayAxisSQL = `
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
84 WITH resp AS (
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
85 SELECT best_utm(area::geometry) AS t,
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
86 ST_Transform(area::geometry, best_utm(area::geometry)) AS a
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
87 FROM users.responsibility_areas
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
88 WHERE country = users.current_user_country()
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
89 )
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
90 DELETE FROM waterway.waterway_axis
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
91 WHERE ST_Covers(
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
92 (SELECT a FROM resp),
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
93 ST_Transform(wtwaxs::geometry, (SELECT t FROM resp)))
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
94 `
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
95
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
96 insertWaterwayAxisSQL = `
1795
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
97 WITH resp AS (
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
98 SELECT best_utm(area::geometry) AS t,
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
99 ST_Transform(area::geometry, best_utm(area::geometry)) AS a
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
100 FROM users.responsibility_areas
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
101 WHERE country = users.current_user_country()
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
102 )
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
103 INSERT INTO waterway.waterway_axis (wtwaxs, objnam, nobjnam)
1796
904c7e853adc Waterway area import: Clip features against responsibility area.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1795
diff changeset
104 SELECT ST_Transform(clipped.geom, 4326)::geography, $3, $4 FROM (
1795
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
105 SELECT (ST_Dump(
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
106 ST_Intersection(
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
107 (SELECT a FROM resp),
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
108 ST_Transform(
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
109 ST_GeomFromWKB($1, $2::integer),
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
110 (SELECT t FROM resp)
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
111 )
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
112 )
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
113 )).geom AS geom
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
114 ) AS clipped
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
115 WHERE clipped.geom IS NOT NULL
1333f96f18d0 Waterway axis: Clip features against responsibility area of importing user.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1785
diff changeset
116 `
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
117 )
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
118
1785
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
119 // Do executes the actual waterway axis import.
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120 func (wx *WaterwayAxis) Do(
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
121 ctx context.Context,
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 importID int64,
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 conn *sql.Conn,
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 feedback Feedback,
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125 ) (interface{}, error) {
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
127 start := time.Now()
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
128
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
129 feedback.Info("Import waterway axis")
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
130
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
131 feedback.Info("Loading capabilities from %s", wx.URL)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
132 caps, err := wfs.GetCapabilities(wx.URL)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
133 if err != nil {
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
134 feedback.Error("Loading capabilities failed: %v", err)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
135 return nil, err
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
136 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
137
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
138 ft := caps.FindFeatureType(wx.FeatureType)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
139 if ft == nil {
1682
3c99d599503a Waterway axis import: small simplifications.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1681
diff changeset
140 return nil, fmt.Errorf("Unknown feature type '%s'", wx.FeatureType)
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
141 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
142
1706
fb05027d93b6 Waterway axis: Be more verbose during import about feature type and sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
143 feedback.Info("Found feature type '%s", wx.FeatureType)
fb05027d93b6 Waterway axis: Be more verbose during import about feature type and sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
144
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
145 epsg, err := wfs.CRSToEPSG(ft.DefaultCRS)
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
146 if err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
147 feedback.Error("Unsupported CRS name '%s'", ft.DefaultCRS)
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
148 return nil, err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
149 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
150
1706
fb05027d93b6 Waterway axis: Be more verbose during import about feature type and sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
151 if wx.SortBy != "" {
fb05027d93b6 Waterway axis: Be more verbose during import about feature type and sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
152 feedback.Info("Features will be sorted by '%s'", wx.SortBy)
fb05027d93b6 Waterway axis: Be more verbose during import about feature type and sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
153 }
fb05027d93b6 Waterway axis: Be more verbose during import about feature type and sorting.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
154
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
155 urls, err := wfs.GetFeaturesGET(
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
156 caps, wx.FeatureType, "application/json", wx.SortBy)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
157 if err != nil {
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
158 feedback.Error("Cannot create GetFeature URLs. %v", err)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
159 return nil, err
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
160 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
161
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
162 tx, err := conn.BeginTx(ctx, nil)
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
163 if err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
164 return nil, err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
165 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
166 defer tx.Rollback()
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
167
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
168 insertStmt, err := tx.PrepareContext(ctx, insertWaterwayAxisSQL)
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
169 if err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
170 return nil, err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
171 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
172 defer insertStmt.Close()
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
173
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
174 // Delete the old features.
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
175 if _, err := tx.ExecContext(ctx, deleteWaterwayAxisSQL); err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
176 return nil, err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
177 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
178
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
179 var (
1785
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
180 unsupported = stringCounter{}
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
181 missingProperties int
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
182 badProperties int
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
183 features int
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
184 )
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
185
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
186 if err := wfs.DownloadURLs(urls, func(r io.Reader) error {
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
187 rfc, err := wfs.ParseRawFeatureCollection(r)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
188 if err != nil {
1764
bb4348ac52ab Waterway axis import: Be more verbose when parsing the GetFeature document fails.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1754
diff changeset
189 return fmt.Errorf("parsing GetFeature document failed: %v", err)
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
190 }
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
191 if rfc.CRS != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
192 crsName := rfc.CRS.Properties.Name
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
193 if epsg, err = wfs.CRSToEPSG(crsName); err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
194 feedback.Error("Unsupported CRS: %d", crsName)
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
195 return err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
196 }
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
197 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
198
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
199 // No features -> ignore.
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
200 if rfc.Features == nil {
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
201 return nil
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
202 }
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
203
1683
509e8728e846 Fixed pre-calculated size of 2D WKB line strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1682
diff changeset
204 feedback.Info("Using EPSG: %d", epsg)
509e8728e846 Fixed pre-calculated size of 2D WKB line strings.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1682
diff changeset
205
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
206 for _, feature := range rfc.Features {
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
207 if feature.Properties == nil || feature.Geometry.Coordinates == nil {
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
208 missingProperties++
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
209 continue
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
210 }
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
211
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
212 var props waterwayAxisProperties
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
213
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
214 if err := json.Unmarshal(*feature.Properties, &props); err != nil {
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
215 badProperties++
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
216 continue
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
217 }
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
218
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
219 var nobjnam sql.NullString
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
220 if props.NObjNnm != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
221 nobjnam = sql.NullString{String: *props.NObjNnm, Valid: true}
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
222 }
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
223
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
224 switch feature.Geometry.Type {
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
225 case "LineString":
1785
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
226 var l lineSlice
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
227 if err := json.Unmarshal(*feature.Geometry.Coordinates, &l); err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
228 return err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
229 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
230 if _, err := insertStmt.ExecContext(
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
231 ctx,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
232 l.asWKB(),
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
233 epsg,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
234 props.ObjNam,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
235 nobjnam,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
236 ); err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
237 return err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
238 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
239 features++
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
240 case "MultiLineString":
1785
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
241 var ls []lineSlice
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
242 if err := json.Unmarshal(*feature.Geometry.Coordinates, &ls); err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
243 return err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
244 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
245 for _, l := range ls {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
246 if _, err := insertStmt.ExecContext(
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
247 ctx,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
248 l.asWKB(),
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
249 epsg,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
250 props.ObjNam,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
251 nobjnam,
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
252 ); err != nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
253 return err
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
254 }
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
255 features++
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
256 }
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
257 default:
1785
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
258 unsupported[feature.Geometry.Type]++
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
259 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
260 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
261 return nil
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
262 }); err != nil {
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
263 feedback.Error("Downloading features failed: %v", err)
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
264 return nil, err
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
265 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
266
1680
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
267 if badProperties > 0 {
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
268 feedback.Warn("Bad properties: %d", badProperties)
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
269 }
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
270
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
271 if missingProperties > 0 {
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
272 feedback.Warn("Missing properties: %d", missingProperties)
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
273 }
de8089944b19 Waterway axis import: Started extracting properties from the features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1679
diff changeset
274
1785
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
275 if len(unsupported) != 0 {
614c6c766691 Waterway area import: Implemented.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1764
diff changeset
276 feedback.Warn("Unsupported types found: %s", unsupported)
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
277 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
278
1828
1ecfcf46e4da Waterway area/axis: Be more informative if features are bad.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1796
diff changeset
279 if features == 0 {
1ecfcf46e4da Waterway area/axis: Be more informative if features are bad.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1796
diff changeset
280 err := errors.New("No features found")
1ecfcf46e4da Waterway area/axis: Be more informative if features are bad.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1796
diff changeset
281 feedback.Error("%v", err)
1ecfcf46e4da Waterway area/axis: Be more informative if features are bad.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1796
diff changeset
282 return nil, err
1ecfcf46e4da Waterway area/axis: Be more informative if features are bad.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1796
diff changeset
283 }
1ecfcf46e4da Waterway area/axis: Be more informative if features are bad.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1796
diff changeset
284
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
285 if err = tx.Commit(); err == nil {
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
286 feedback.Info("Storing %d features took %s",
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
287 features, time.Since(start))
1679
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
288 }
2dc7768be0e4 Waterway axis import: More on reading data from WFS. TODO: Parse to concrete features.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1677
diff changeset
289
1681
4d6ce621379e Waterway axis import: Completed, but the final commit unexpectedly resulted in rollback.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1680
diff changeset
290 return nil, err
1675
8fec3887c7e5 Waterway axis import: Added stub.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
291 }