Skip to content

Commit bb82613

Browse files
author
amyasnikov
committed
processorLineString
1 parent 0bf8a15 commit bb82613

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

geojson.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package srtm
33
import (
44
geojson "github.com/paulmach/go.geojson"
55
"github.com/rs/zerolog/log"
6+
"sync"
67
)
78

89
// AddElevation returns point with 3 coordinates: [longitude, latitude, elevation]
@@ -26,11 +27,26 @@ func AddElevation(point []float64) ([]float64, error) {
2627
return append(point[:2], float64(elevation)), nil
2728
}
2829

30+
func processorLineString(wg *sync.WaitGroup, geoJson *geojson.Geometry, i int, skipErrors bool) {
31+
point, err := AddElevation(geoJson.LineString[i])
32+
if err != nil && !skipErrors {
33+
log.Error().Caller().Err(err).Msg("")
34+
}
35+
geoJson.LineString[i] = point
36+
if wg != nil {
37+
wg.Done()
38+
}
39+
}
40+
2941
// AddElevations returns geojson with added third coordinate (elevation)
3042
// Param tileDir - directory of hgt-tiles
3143
// Param geoJson - geojson for processing
3244
// Param skipErrors - if false AddElevations use premature exit (on first bad point in geojson). if true all points will be process but bad point will not to be contains elevation coordinate
3345
func AddElevations(geoJson *geojson.Geometry, skipErrors bool) (*geojson.Geometry, error) {
46+
var wg *sync.WaitGroup
47+
if parallel {
48+
wg = &sync.WaitGroup{}
49+
}
3450
switch geoJson.Type {
3551
case geojson.GeometryPoint:
3652
point, err := AddElevation(geoJson.Point)
@@ -40,14 +56,16 @@ func AddElevations(geoJson *geojson.Geometry, skipErrors bool) (*geojson.Geometr
4056
geoJson.Point = point
4157
return geoJson, nil
4258
case geojson.GeometryLineString:
59+
if parallel {
60+
wg.Add(len(geoJson.LineString))
61+
}
4362
for i := range geoJson.LineString {
44-
point, err := AddElevation(geoJson.LineString[i])
45-
if err != nil && !skipErrors {
46-
log.Error().Caller().Err(err).Msg("")
63+
if parallel {
64+
go processorLineString(wg, geoJson, i, skipErrors)
65+
} else {
66+
processorLineString(nil, geoJson, i, skipErrors)
4767
}
48-
geoJson.LineString[i] = point
4968
}
50-
return geoJson, nil
5169
case geojson.GeometryMultiPoint:
5270
for i := range geoJson.MultiPoint {
5371
point, err := AddElevation(geoJson.MultiPoint[i])
@@ -56,7 +74,6 @@ func AddElevations(geoJson *geojson.Geometry, skipErrors bool) (*geojson.Geometr
5674
}
5775
geoJson.MultiPoint[i] = point
5876
}
59-
return geoJson, nil
6077
case geojson.GeometryPolygon:
6178
for i := range geoJson.Polygon {
6279
for j := range geoJson.Polygon[i] {
@@ -67,7 +84,6 @@ func AddElevations(geoJson *geojson.Geometry, skipErrors bool) (*geojson.Geometr
6784
geoJson.Polygon[i][j] = point
6885
}
6986
}
70-
return geoJson, nil
7187
case geojson.GeometryMultiLineString:
7288
for i := range geoJson.MultiLineString {
7389
for j := range geoJson.MultiLineString[i] {
@@ -78,8 +94,9 @@ func AddElevations(geoJson *geojson.Geometry, skipErrors bool) (*geojson.Geometr
7894
geoJson.MultiLineString[i][j] = point
7995
}
8096
}
81-
return geoJson, nil
82-
default:
83-
return geoJson, nil
8497
}
98+
if parallel {
99+
wg.Wait()
100+
}
101+
return geoJson, nil
85102
}

0 commit comments

Comments
 (0)