Commit ea7b9db2 authored by M. Rehan Abbasi's avatar M. Rehan Abbasi
Browse files

add calculations for RSRQ and RSRP for a coordinate in asset manager

parent 5b268f0a
Loading
Loading
Loading
Loading
+75 −2
Original line number Diff line number Diff line
@@ -18,8 +18,10 @@ package gisassetmgr

import (
	"database/sql"
	"encoding/json"
	"errors"
	"sort"
	"strconv"
	"strings"
	"time"

@@ -2092,3 +2094,74 @@ func (am *AssetMgr) GetWithinRangeBetweenPoints(srcCoordinates string, dstCoordi
	}
	return within, err
}

type PowerValue struct {
	Rsrq float32
	Rsrp float32
}

type coordinate struct {
	Latitude  float32
	Longitude float32
}

type Position struct {
	Type        string    `json:"type,omitempty"`
	Coordinates []float32 `json:"coordinates"`
}

// Calculate RSRQ/RSRP for a given list of coordinates
func (am *AssetMgr) GetPowerValuesForCoordinates(coordinates []coordinate) ([]PowerValue, error) {
	poaMap, err := am.GetAllPoa()

	if err != nil {
		log.Error(err.Error())
		return nil, err
	}

	var position Position
	var powerValues []PowerValue
	// bestPoa := ""
	for _, coord := range coordinates {
		var maxRsrp float32 = 0
		var maxRsrq float32 = 0
		for _, poa := range poaMap {
			_ = json.Unmarshal([]byte(poa.Position), &position)
			poaLat := position.Coordinates[1]
			poaLong := position.Coordinates[0]
			poaRadius := poa.Radius

			poaLatStr := strconv.FormatFloat(float64(poaLat), 'f', -1, 32)
			poaLongStr := strconv.FormatFloat(float64(poaLong), 'f', -1, 32)
			coordLatStr := strconv.FormatFloat(float64(coord.Latitude), 'f', -1, 32)
			coordLongStr := strconv.FormatFloat(float64(coord.Longitude), 'f', -1, 32)

			poaCoordinates := "(" + poaLongStr + " " + poaLatStr + ")"
			coordCoordinates := "(" + coordLongStr + " " + coordLatStr + ")"

			distance, err := am.GetDistanceBetweenPoints(poaCoordinates, coordCoordinates)
			if err != nil {
				log.Error(err.Error())
				return nil, err
			}

			if distance > poaRadius {
				continue
			}

			_, rsrp, rsrq := calculatePower(poa.SubType, poaRadius, distance)

			if rsrp > maxRsrp {
				maxRsrp = rsrp
				maxRsrq = rsrq
			}
		}

		newPowerValue := PowerValue{
			Rsrp: maxRsrp,
			Rsrq: maxRsrq,
		}
		powerValues = append(powerValues, newPowerValue)
	}
	return powerValues, nil
}
+1 −0
Original line number Diff line number Diff line
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/lib/pq v1.5.2 h1:yTSXVswvWUOQ3k1sd7vJfDrbSl8lKuscqFJRqjC0ifw=
github.com/lib/pq v1.5.2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=