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