Repository navigation
Expand file tree
/
Copy pathentities.go
More file actions
79 lines (66 loc) · 1.81 KB
/
Copy pathentities.go
File metadata and controls
79 lines (66 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"fmt"
"slices"
"github.com/green-ecolution/green-ecolution-backend/pkg/client"
)
type Tree struct {
client.Tree
ObjectID int `json:"objectId"`
}
type CsvTree struct {
Area string `json:"area"`
Street string `json:"street"`
TreeNumber string `json:"treeNumber"`
Species string `json:"species"`
Hochwert float64 `json:"hochwert"`
Rechtswert float64 `json:"rechtswert"`
PlantingYear int `json:"plantingYear"`
}
type ImportType string
const (
ImportTypeCreate ImportType = "create"
ImportTypeUpdate = "update"
ImportTypeArchive = "archive"
)
type TreeImport struct {
Tree Tree `json:"tree"`
ImportType ImportType `json:"importType"`
}
type TreeImportResponse struct {
ImportedTrees []TreeImport `json:"importedTrees"`
Raw []CsvTree `json:"rawTrees"`
}
func TreesFromBatch(csvTrees []CsvTree) ([]Tree, error) {
transformer, err := NewGeoTransformer(cfg.CsvUsedEpsg, cfg.CsvToEpsg)
if err != nil {
return nil, err
}
defer transformer.Destroy()
geoPointsSeq := MapIter(slices.Values(csvTrees), func(t CsvTree) GeoPoint {
return GeoPoint{
X: t.Hochwert,
Y: t.Rechtswert,
}
})
geoPoints := slices.Collect(geoPointsSeq)
geoPoints, err = transformer.TransformBatch(geoPoints)
if err != nil {
return nil, err
}
treeSeq := MapIter21(Zip(slices.Values(csvTrees), slices.Values(geoPoints)), func(t CsvTree, g GeoPoint) Tree {
lat, long := float32(g.X), float32(g.Y)
return Tree{
ObjectID: CombineToID(lat, long),
Tree: client.Tree{
PlantingYear: int32(t.PlantingYear),
Species: t.Species,
Number: t.TreeNumber,
Description: fmt.Sprintf("%s %s", t.Area, t.Street),
Latitude: lat,
Longitude: long,
},
}
})
return slices.Collect(treeSeq), nil
}