Mercurial > gemma
comparison pkg/imports/sr.go @ 1138:443fc80a315f
Don't issue new lines at end of log messages when importing.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 09 Nov 2018 10:57:49 +0100 |
parents | 2fb6c0a6ec8a |
children | 930fdd8b474f |
comparison
equal
deleted
inserted
replaced
1137:2fb6c0a6ec8a | 1138:443fc80a315f |
---|---|
22 "encoding/hex" | 22 "encoding/hex" |
23 "encoding/json" | 23 "encoding/json" |
24 "errors" | 24 "errors" |
25 "fmt" | 25 "fmt" |
26 "io" | 26 "io" |
27 "log" | |
28 "os" | 27 "os" |
29 "path" | 28 "path" |
30 "path/filepath" | 29 "path/filepath" |
31 "strconv" | 30 "strconv" |
32 "strings" | 31 "strings" |
151 if err != nil { | 150 if err != nil { |
152 return err | 151 return err |
153 } | 152 } |
154 defer z.Close() | 153 defer z.Close() |
155 | 154 |
156 feedback.Info("Looking for 'meta.json'\n") | 155 feedback.Info("Looking for 'meta.json'") |
157 mf := find("meta.json", z.File) | 156 mf := find("meta.json", z.File) |
158 if mf == nil { | 157 if mf == nil { |
159 return errors.New("Cannot find 'meta.json'") | 158 return errors.New("Cannot find 'meta.json'") |
160 } | 159 } |
161 | 160 |
166 | 165 |
167 if err := m.validate(conn); err != nil { | 166 if err := m.validate(conn); err != nil { |
168 return err | 167 return err |
169 } | 168 } |
170 | 169 |
171 feedback.Info("Looking for '*.xyz'\n") | 170 feedback.Info("Looking for '*.xyz'") |
172 xyzf := find(".xyz", z.File) | 171 xyzf := find(".xyz", z.File) |
173 if xyzf == nil { | 172 if xyzf == nil { |
174 return errors.New("Cannot find any *.xyz file") | 173 return errors.New("Cannot find any *.xyz file") |
175 } | 174 } |
176 | 175 |
208 xyz.AsWKB(), | 207 xyz.AsWKB(), |
209 polygon.AsWBK(), | 208 polygon.AsWBK(), |
210 m.EPSG, | 209 m.EPSG, |
211 ).Scan(&id, &epsg) | 210 ).Scan(&id, &epsg) |
212 xyz, polygon = nil, nil // not need from now on. | 211 xyz, polygon = nil, nil // not need from now on. |
213 feedback.Info("storing points took %s\n", time.Since(start)) | 212 feedback.Info("storing points took %s", time.Since(start)) |
214 if err != nil { | 213 if err != nil { |
215 return err | 214 return err |
216 } | 215 } |
217 | 216 |
218 feedback.Info("Best suited UTM EPSG: %d\n", epsg) | 217 feedback.Info("Best suited UTM EPSG: %d", epsg) |
219 | 218 |
220 feedback.Info("Triangulate...\n") | 219 feedback.Info("Triangulate...") |
221 start = time.Now() | 220 start = time.Now() |
222 tin, err := octree.GenerateTinByID(conn, ctx, id, epsg) | 221 tin, err := octree.GenerateTinByID(conn, ctx, id, epsg) |
223 feedback.Info("triangulation took %s\n", time.Since(start)) | 222 feedback.Info("triangulation took %s", time.Since(start)) |
224 if err != nil { | 223 if err != nil { |
225 return err | 224 return err |
226 } | 225 } |
227 | 226 |
228 if tin == nil { | 227 if tin == nil { |
229 return errors.New("cannot load TIN from database") | 228 return errors.New("cannot load TIN from database") |
230 } | 229 } |
231 | 230 |
232 feedback.Info("Building octree...\n") | 231 feedback.Info("Building octree...") |
233 builder := octree.NewBuilder(tin) | 232 builder := octree.NewBuilder(tin) |
234 start = time.Now() | 233 start = time.Now() |
235 builder.Build() | 234 builder.Build() |
236 octreeIndex, err := builder.Bytes() | 235 octreeIndex, err := builder.Bytes() |
237 tin = nil // not needed from now on | 236 tin = nil // not needed from now on |
238 feedback.Info("building octree took %s\n", time.Since(start)) | 237 feedback.Info("building octree took %s", time.Since(start)) |
239 if err != nil { | 238 if err != nil { |
240 return err | 239 return err |
241 } | 240 } |
242 | 241 |
243 feedback.Info("Store octree...\n") | 242 feedback.Info("Store octree...") |
244 start = time.Now() | 243 start = time.Now() |
245 h := sha1.New() | 244 h := sha1.New() |
246 h.Write(octreeIndex) | 245 h.Write(octreeIndex) |
247 checksum := hex.EncodeToString(h.Sum(nil)) | 246 checksum := hex.EncodeToString(h.Sum(nil)) |
248 _, err = tx.Exec(insertOctreeSQL, id, checksum, octreeIndex) | 247 _, err = tx.Exec(insertOctreeSQL, id, checksum, octreeIndex) |
249 feedback.Info("storing octree index took %s\n", time.Since(start)) | 248 feedback.Info("storing octree index took %s", time.Since(start)) |
250 if err != nil { | 249 if err != nil { |
251 return err | 250 return err |
252 } | 251 } |
253 | 252 |
254 tree := builder.Tree() | 253 tree := builder.Tree() |
255 builder = nil // not needed from now on | 254 builder = nil // not needed from now on |
256 | 255 |
257 feedback.Info("Generate contour lines...\n") | 256 feedback.Info("Generate contour lines...") |
258 start = time.Now() | 257 start = time.Now() |
259 err = generateContours(tree, tx, id) | 258 err = generateContours(tree, tx, id) |
260 feedback.Info("generating and storing contour lines took %s\n", time.Since(start)) | 259 feedback.Info("generating and storing contour lines took %s", time.Since(start)) |
261 if err != nil { | 260 if err != nil { |
262 return err | 261 return err |
263 } | 262 } |
264 | 263 |
265 feedback.Info("Storing sounding result was successful.\n") | 264 if err = tx.Commit(); err == nil { |
266 return tx.Commit() | 265 feedback.Info("Storing sounding result was successful.") |
266 } | |
267 return err | |
267 } | 268 } |
268 | 269 |
269 func (srd *SoundingResultDate) UnmarshalJSON(data []byte) error { | 270 func (srd *SoundingResultDate) UnmarshalJSON(data []byte) error { |
270 var s string | 271 var s string |
271 if err := json.Unmarshal(data, &s); err != nil { | 272 if err := json.Unmarshal(data, &s); err != nil { |
346 text := s.Text() | 347 text := s.Text() |
347 var p octree.Vertex | 348 var p octree.Vertex |
348 // fmt.Sscanf(text, "%f,%f,%f") is 4 times slower. | 349 // fmt.Sscanf(text, "%f,%f,%f") is 4 times slower. |
349 idx := strings.IndexByte(text, ',') | 350 idx := strings.IndexByte(text, ',') |
350 if idx == -1 { | 351 if idx == -1 { |
351 log.Printf("format error in line %d\n", line) | 352 feedback.Warn("format error in line %d", line) |
352 continue | 353 continue |
353 } | 354 } |
354 var err error | 355 var err error |
355 if p.X, err = strconv.ParseFloat(text[:idx], 64); err != nil { | 356 if p.X, err = strconv.ParseFloat(text[:idx], 64); err != nil { |
356 feedback.Warn("format error in line %d: %v\n", line, err) | 357 feedback.Warn("format error in line %d: %v", line, err) |
357 continue | 358 continue |
358 } | 359 } |
359 text = text[idx+1:] | 360 text = text[idx+1:] |
360 if idx = strings.IndexByte(text, ','); idx == -1 { | 361 if idx = strings.IndexByte(text, ','); idx == -1 { |
361 feedback.Warn("format error in line %d\n", line) | 362 feedback.Warn("format error in line %d", line) |
362 continue | 363 continue |
363 } | 364 } |
364 if p.Y, err = strconv.ParseFloat(text[:idx], 64); err != nil { | 365 if p.Y, err = strconv.ParseFloat(text[:idx], 64); err != nil { |
365 feedback.Warn("format error in line %d: %v\n", line, err) | 366 feedback.Warn("format error in line %d: %v", line, err) |
366 continue | 367 continue |
367 } | 368 } |
368 text = text[idx+1:] | 369 text = text[idx+1:] |
369 if p.Z, err = strconv.ParseFloat(text, 64); err != nil { | 370 if p.Z, err = strconv.ParseFloat(text, 64); err != nil { |
370 feedback.Warn("format error in line %d: %v\n", line, err) | 371 feedback.Warn("format error in line %d: %v", line, err) |
371 continue | 372 continue |
372 } | 373 } |
373 mpz = append(mpz, p) | 374 mpz = append(mpz, p) |
374 } | 375 } |
375 | 376 |