Mercurial > gemma
comparison pkg/wfs/download.go @ 1619:3093bab05c81
WFS downloader: Dump features to stdout for testing purposes.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 18 Dec 2018 13:26:26 +0100 |
parents | f59550310143 |
children | 943823d03d50 |
comparison
equal
deleted
inserted
replaced
1618:9f5090fe130f | 1619:3093bab05c81 |
---|---|
92 } | 92 } |
93 | 93 |
94 return *result.NumberMatched, nil | 94 return *result.NumberMatched, nil |
95 } | 95 } |
96 | 96 |
97 func GetFeaturesGET(caps *Capabilities, featureTypeName, outputFormat string) error { | 97 func GetFeaturesGET( |
98 caps *Capabilities, | |
99 featureTypeName, | |
100 outputFormat string, | |
101 sortBy string, | |
102 ) ([]string, error) { | |
98 | 103 |
99 feature := caps.FindFeatureType(featureTypeName) | 104 feature := caps.FindFeatureType(featureTypeName) |
100 if feature == nil { | 105 if feature == nil { |
101 return ErrNoSuchFeatureType | 106 return nil, ErrNoSuchFeatureType |
102 } | 107 } |
103 op := caps.FindOperation("GetFeature") | 108 op := caps.FindOperation("GetFeature") |
104 if op == nil { | 109 if op == nil { |
105 return ErrGetFeatureNotSupported | 110 return nil, ErrGetFeatureNotSupported |
106 } | 111 } |
107 | 112 |
108 if op.DCP.HTTP.Get == nil { | 113 if op.DCP.HTTP.Get == nil { |
109 return ErrMethodGetNotSupported | 114 return nil, ErrMethodGetNotSupported |
110 } | 115 } |
111 | 116 |
112 getRaw := op.DCP.HTTP.Get.HRef | 117 getRaw := op.DCP.HTTP.Get.HRef |
113 getU, err := url.Parse(getRaw) | 118 getU, err := url.Parse(getRaw) |
114 if err != nil { | 119 if err != nil { |
115 return err | 120 return nil, err |
116 } | 121 } |
117 // The URL could be relative so resolve against Capabilities URL. | 122 // The URL could be relative so resolve against Capabilities URL. |
118 if !getU.IsAbs() { | 123 if !getU.IsAbs() { |
119 base, err := url.Parse(caps.BaseURL) | 124 base, err := url.Parse(caps.BaseURL) |
120 if err != nil { | 125 if err != nil { |
121 return err | 126 return nil, err |
122 } | 127 } |
123 getU = getU.ResolveReference(base) | 128 getU = getU.ResolveReference(base) |
124 } | 129 } |
125 | 130 |
126 if !op.SupportsOutputFormat(outputFormat) { | 131 if !op.SupportsOutputFormat(outputFormat) { |
127 return ErrOutputFormatNotSupported | 132 return nil, ErrOutputFormatNotSupported |
128 } | 133 } |
129 | 134 |
130 wfsVersion := caps.HighestWFSVersion(WFS2_0_0) | 135 wfsVersion := caps.HighestWFSVersion(WFS2_0_0) |
131 | 136 |
132 featuresPerPage, supportsPaging := op.FeaturesPerPage() | 137 featuresPerPage, supportsPaging := op.FeaturesPerPage() |
167 } | 172 } |
168 | 173 |
169 addOutputFormat := func(v url.Values) { | 174 addOutputFormat := func(v url.Values) { |
170 if outputFormat != "" { | 175 if outputFormat != "" { |
171 v.Set("outputFormat", outputFormat) | 176 v.Set("outputFormat", outputFormat) |
177 } | |
178 } | |
179 | |
180 addSortBy := func(v url.Values) { | |
181 if sortBy != "" { | |
182 v.Set("sortBy", sortBy) | |
172 } | 183 } |
173 } | 184 } |
174 | 185 |
175 if supportsPaging { | 186 if supportsPaging { |
176 pagedURL := func(ofs, count int) string { | 187 pagedURL := func(ofs, count int) string { |
185 v.Set("maxFeatures", strconv.Itoa(count)) | 196 v.Set("maxFeatures", strconv.Itoa(count)) |
186 } | 197 } |
187 v.Set("TYPENAMES", featureTypeName) | 198 v.Set("TYPENAMES", featureTypeName) |
188 addNS(v) | 199 addNS(v) |
189 addOutputFormat(v) | 200 addOutputFormat(v) |
201 addSortBy(v) | |
190 q := *getU | 202 q := *getU |
191 q.RawQuery = v.Encode() | 203 q.RawQuery = v.Encode() |
192 return q.String() | 204 return q.String() |
193 } | 205 } |
194 if numFeatures <= featuresPerPage { | 206 if numFeatures <= featuresPerPage { |
213 v.Set("REQUEST", "GetFeature") | 225 v.Set("REQUEST", "GetFeature") |
214 v.Set("VERSION", wfsVersion) | 226 v.Set("VERSION", wfsVersion) |
215 v.Set("TYPENAMES", featureTypeName) | 227 v.Set("TYPENAMES", featureTypeName) |
216 addNS(v) | 228 addNS(v) |
217 addOutputFormat(v) | 229 addOutputFormat(v) |
230 addSortBy(v) | |
218 q := *getU | 231 q := *getU |
219 q.RawQuery = v.Encode() | 232 q.RawQuery = v.Encode() |
220 downloadURLs = []string{q.String()} | 233 downloadURLs = []string{q.String()} |
221 } | 234 } |
222 | 235 |
223 // TODO: Implement me! | 236 return downloadURLs, nil |
224 | |
225 log.Printf("%v\n", downloadURLs) | |
226 | |
227 return nil | |
228 } | 237 } |