Mercurial > gemma
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 |
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 } |