annotate pkg/mesh/meshserialize.go @ 5710:37c8feeecb4d

Merged branch sr-v2 into default.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 20 Feb 2024 21:28:56 +0100
parents ef80748ae4f3
children 1ea1d3ef2258
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
13
4827
f4abfd0ee8ad Renamed octree package to mesh as there is no octree any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4824
diff changeset
14 package mesh
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 "bufio"
727
41c8dc61f38f Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 726
diff changeset
18 "bytes"
4656
a2f16987911b Removed lz4 from loader, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4650
diff changeset
19 "compress/gzip"
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "encoding/binary"
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
21 "fmt"
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
22 "io"
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
23
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
24 "gemma.intevation.de/gemma/pkg/log"
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 )
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
5695
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
27 // Version is current version of the format the mesh index is stored in.
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
28 const Version = 2
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
29
5695
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
30 // magicHeader is a magic header to tell if the data blob is a mesh index.
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
31 const magicHeader = "SR3D"
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
32
5695
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
33 // coalesceVersion returns the most recent version if version is less or equal zero.
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
34 func coalesceVersion(version int) int {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
35 if version > 0 {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
36 return version
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
37 }
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
38 return Version
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
39 }
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
40
5695
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
41 // OptimizeForSerialization apply version specific storage optimizations
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
42 // before serialization.
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
43 func (s *STRTree) OptimizeForSerialization(version int) {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
44 version = coalesceVersion(version)
5680
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5679
diff changeset
45 if version == 2 {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5679
diff changeset
46 s.optimizeForSerializationV2()
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5679
diff changeset
47 }
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
48 }
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
49
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
50 // Bytes serializes this tree to a byte slice.
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
51 func (s *STRTree) Bytes(version int) ([]byte, int, error) {
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
52 var buf bytes.Buffer
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
53 w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
54 if err != nil {
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
55 return nil, 0, err
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
56 }
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
57 version = coalesceVersion(version)
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
58 if err := s.serializeVn(w, version); err != nil {
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
59 return nil, 0, err
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
60 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
61 if err := w.Close(); err != nil {
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
62 return nil, 0, err
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
63 }
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
64 return buf.Bytes(), version, nil
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
65 }
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
66
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
67 func (s *STRTree) serializeVn(w io.Writer, version int) error {
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
68 switch version {
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
69 case 1:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
70 return s.serializeV1(w)
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
71 case 2:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
72 return s.serializeV2(w)
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
73 default:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
74 return fmt.Errorf("cannot serialize mesh version %d", version)
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
75 }
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
76 }
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
77
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
78 // FromBytes restores a STRTree from a binary representation.
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
79 func (s *STRTree) FromBytes(data []byte, version int) error {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
80 version = coalesceVersion(version)
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
81 r, err := gzip.NewReader(bytes.NewReader(data))
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
82 if err != nil {
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
83 return err
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
84 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
85 return s.deserialize(bufio.NewReader(r), version)
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
86 }
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
87
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
88 func (s *STRTree) deserialize(r *bufio.Reader, version int) error {
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
89 header, err := r.Peek(8)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
90 if err != nil {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
91 return err
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
92 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
93 if bytes.HasPrefix(header, []byte(magicHeader)) {
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
94 realVersion := int(binary.LittleEndian.Uint32(header[4:]))
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
95 if realVersion != version {
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
96 return fmt.Errorf("mesh version mismatch: Have %d expect %d",
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
97 realVersion, version)
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
98 }
5687
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
99 // Skip the header
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
100 if _, err := r.Discard(8); err != nil {
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
101 return err
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
102 }
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
103 return s.deserializeVn(r, realVersion)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
104 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
105 return s.deserializeV1(r)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
106 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
107
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
108 func (s *STRTree) deserializeVn(r *bufio.Reader, version int) error {
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
109 switch version {
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
110 case 1:
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
111 return s.deserializeV1(r)
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
112 case 2:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
113 return s.deserializeV2(r)
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
114 default:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
115 return fmt.Errorf("cannot deserialize mesh version %d", version)
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
116 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
117 }
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
118
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
119 // serializer is a generic function to apply a chain of
5695
ef80748ae4f3 Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5692
diff changeset
120 // serializer/deserializer functions to an object given a reader or writer.
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
121 func serializer[T, S any](
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
122 s S,
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
123 t T,
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
124 fns ...func(T, S) error,
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
125 ) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
126 for _, fn := range fns {
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
127 if err := fn(t, s); err != nil {
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
128 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
129 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
130 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
131 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
132 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
133
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
134 func (s *STRTree) serializeEntries(w io.Writer) error {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
135 return binary.Write(w, binary.LittleEndian, uint8(s.Entries))
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
136 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
137
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
138 func (s *STRTree) deserializeEntries(r *bufio.Reader) error {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
139 var numEntries uint8
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
140 if err := binary.Read(r, binary.LittleEndian, &numEntries); err != nil {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
141 return err
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
142 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
143 s.Entries = int(numEntries)
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
144 return nil
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
145 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
146
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
147 func (t *Tin) serializeExtent(w io.Writer) error {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
148 if err := t.Min.Write(w); err != nil {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
149 return err
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
150 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
151 return t.Max.Write(w)
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
152 }
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
153
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
154 func (t *Tin) deserializeExtent(r *bufio.Reader) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
155 if err := t.Min.Read(r); err != nil {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
156 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
157 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
158 if err := t.Max.Read(r); err != nil {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
159 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
160 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
161 log.Infof("BBOX: [[%f, %f, %f], [%f, %f, %f]]\n",
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
162 t.Min.X, t.Min.Y, t.Min.Z,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
163 t.Max.X, t.Max.Y, t.Max.Z)
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
164 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
165 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
166
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
167 func (t *Tin) serializeEPSG(w io.Writer) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
168 return binary.Write(w, binary.LittleEndian, t.EPSG)
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
169 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
170
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
171 func (t *Tin) deserializeEPSG(r *bufio.Reader) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
172 if err := binary.Read(r, binary.LittleEndian, &t.EPSG); err != nil {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
173 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
174 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
175 log.Infof("EPSG: %d\n", t.EPSG)
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
176 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
177 }
5692
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
178
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
179 func serializeHeader() func(*STRTree, io.Writer) error {
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
180 return func(_ *STRTree, w io.Writer) error {
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
181 _, err := w.Write([]byte(magicHeader))
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
182 return err
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
183 }
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
184 }
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
185
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
186 func serializeVersion(version int) func(*STRTree, io.Writer) error {
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
187 return func(_ *STRTree, w io.Writer) error {
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
188 return binary.Write(w, binary.LittleEndian, uint32(version))
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
189 }
d920f0fa2f04 User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5691
diff changeset
190 }