annotate pkg/mesh/meshserialize_v1.go @ 5718:3d497077f888 uploadwg

Implemented direct file upload as alternative import method for WG. For testing and data corrections it is useful to be able to import waterway gauges data directly by uploading a xml file.
author Sascha Wilde <wilde@sha-bang.de>
date Thu, 18 Apr 2024 19:23:19 +0200
parents ef80748ae4f3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2024 by via donau
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package mesh
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
17 "bufio"
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 "encoding/binary"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "io"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "math"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22 "gemma.intevation.de/gemma/pkg/log"
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 )
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 func (s *STRTree) serializeV1(w io.Writer) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
26 return serializer(w, s,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
27 (*STRTree).serializeTinV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
28 (*STRTree).serializeEntries,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
29 (*STRTree).serializeIndexV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
30 (*STRTree).serializeBBoxesV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
31 )
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
32 }
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
33
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
34 func (s *STRTree) serializeTinV1(w io.Writer) error {
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
35 return s.tin.serializeV1(w)
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 func (s *STRTree) serializeBBoxesV1(w io.Writer) error {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 if err := binary.Write(w, binary.LittleEndian, int32(len(s.bboxes))); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
41 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
42 var err error
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
43 write := func(v float64) {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
44 if err == nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
45 err = binary.Write(w, binary.LittleEndian, math.Float64bits(v))
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 for _, box := range s.bboxes {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 write(box.X1)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 write(box.Y1)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 write(box.X2)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 write(box.Y2)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 func (s *STRTree) serializeIndexV1(w io.Writer) error {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 if err := binary.Write(w, binary.LittleEndian, int32(len(s.index))); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 var buf [binary.MaxVarintLen32]byte
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 var last int32
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 var written int
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 for _, x := range s.index {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 delta := x - last
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 n := binary.PutVarint(buf[:], int64(delta))
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 for p := buf[:n]; len(p) > 0; p = p[n:] {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 var err error
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 if n, err = w.Write(p); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 written += n
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 last = x
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 log.Infof("compressed index in bytes: %d %.2f (%d %.2f)\n",
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 written,
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 float64(written)/(1024*1024),
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 4*len(s.index),
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 float64(4*len(s.index))/(1024*1024),
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81 )
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 return nil
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 func (t *Tin) serializeV1(w io.Writer) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
86 return serializer(w, t,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
87 (*Tin).serializeEPSG,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
88 (*Tin).serializeExtent,
5695
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
89 (*Tin).serializeVerticesV1,
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
90 (*Tin).serializeTrianglesV1,
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
91 )
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
92 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
93
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
94 func (t *Tin) serializeTrianglesV1(w io.Writer) error {
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
95 if err := binary.Write(
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
96 w, binary.LittleEndian, uint32(len(t.Triangles))); err != nil {
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
97 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
98 }
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
99 var buf [binary.MaxVarintLen32]byte
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
100 var written int
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
101 var last int32
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
102 for _, triangle := range t.Triangles {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
103 for _, idx := range triangle {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
104 value := idx - last
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
105 n := binary.PutVarint(buf[:], int64(value))
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
106 for p := buf[:n]; len(p) > 0; p = p[n:] {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
107 var err error
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
108 if n, err = w.Write(p); err != nil {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
109 return err
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
110 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
111 written += n
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
112 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
113 last = idx
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
114 }
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
115 }
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
116 log.Infof("compressed tin indices in bytes: %d (%d)\n",
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
117 written, 3*4*len(t.Triangles))
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
118 return nil
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
119 }
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
120
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
121 func (t *Tin) serializeVerticesV1(w io.Writer) error {
5675
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
122 if err := binary.Write(
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
123 w, binary.LittleEndian, uint32(len(t.Vertices))); err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
124 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
125 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
126 var err error
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
127 vwrite := func(v float64) {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
128 if err == nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
129 err = binary.Write(w, binary.LittleEndian, math.Float64bits(v))
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
130 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
131 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
132 for _, v := range t.Vertices {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
133 vwrite(v.X)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
134 vwrite(v.Y)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
135 vwrite(v.Z)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
136 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
137 if err != nil {
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
138 return err
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
139 }
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
140 log.Infof("vertices %d (%d)\n", len(t.Vertices), len(t.Vertices)*3*8)
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
141 return nil
b8da63027b48 Started to separate mesh serialisation in different files.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
142 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
143
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
144 func (s *STRTree) deserializeV1(r *bufio.Reader) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
145 return serializer(r, s,
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
146 (*STRTree).deserializeTinV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
147 (*STRTree).deserializeEntries,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
148 (*STRTree).deserializeIndexV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
149 (*STRTree).deserializeBBoxesV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
150 )
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
151 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
152
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
153 func (s *STRTree) deserializeBBoxesV1(r *bufio.Reader) error {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
154 var numBBoxes int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
155 if err := binary.Read(r, binary.LittleEndian, &numBBoxes); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
156 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
157 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
158 bboxes := make([]Box2D, numBBoxes)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
159 s.bboxes = bboxes
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
160 var err error
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
161 read := func(v *float64) {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
162 if err == nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
163 err = binary.Read(r, binary.LittleEndian, v)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
164 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
165 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
166 for i := range bboxes {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
167 read(&bboxes[i].X1)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
168 read(&bboxes[i].Y1)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
169 read(&bboxes[i].X2)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
170 read(&bboxes[i].Y2)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
171 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
172 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
173 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
174
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
175 func (s *STRTree) deserializeIndexV1(r *bufio.Reader) error {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
176 var numIndex int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
177 if err := binary.Read(r, binary.LittleEndian, &numIndex); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
178 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
179 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
180 index := make([]int32, numIndex)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
181 s.index = index
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
182 var last int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
183 for i := range index {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
184 v, err := binary.ReadVarint(r)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
185 if err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
186 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
187 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
188 value := int32(v) + last
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
189 index[i] = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
190 last = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
191 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
192 return nil
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
193 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
194
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
195 func (s *STRTree) deserializeTinV1(r *bufio.Reader) error {
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
196 s.tin = new(Tin)
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
197 return s.tin.deserializeV1(r)
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
198 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
199
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
200 // deserializeV1 restores a TIN from a binary representation.
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
201 func (t *Tin) deserializeV1(r *bufio.Reader) error {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
202 return serializer(r, t,
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
203 (*Tin).deserializeEPSG,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
204 (*Tin).deserializeExtent,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
205 (*Tin).deserializeVerticesV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
206 (*Tin).deserializeTrianglesV1,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
207 )
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
208 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
209
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
210 func (t *Tin) deserializeVerticesV1(r *bufio.Reader) error {
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
211 var numVertices uint32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
212 if err := binary.Read(r, binary.LittleEndian, &numVertices); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
213 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
214 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
215 log.Infof("vertices: %d\n", numVertices)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
216 vertices := make([]Vertex, numVertices)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
217 t.Vertices = vertices
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
218 for i := range vertices {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
219 if err := vertices[i].Read(r); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
220 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
221 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
222 }
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
223 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
224 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
225
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
226 func (t *Tin) deserializeTrianglesV1(r *bufio.Reader) error {
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
227 var numTriangles uint32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
228 if err := binary.Read(r, binary.LittleEndian, &numTriangles); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
229 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
230 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
231 log.Infof("triangles: %d\n", numTriangles)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
232 indices := make([]int32, 3*numTriangles)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
233 triangles := make([][]int32, numTriangles)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
234 t.Triangles = triangles
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
235 var last int32
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
236 for i := range triangles {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
237 tri := indices[:3]
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
238 indices = indices[3:]
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
239 triangles[i] = tri
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
240 for j := range tri {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
241 v, err := binary.ReadVarint(r)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
242 if err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
243 return err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
244 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
245 value := int32(v) + last
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
246 tri[j] = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
247 last = value
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
248 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
249 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
250 return nil
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5675
diff changeset
251 }