Controlarea pozitiei GPS

In acest exemplu, vedem cum sa extragem pozitia GPS actuala a telefonului si sa verificam daca operatorul nostru este efectiv unde ar trebui sa fie. In practica, in timpul salvarii raportului sau de activitate, vom vedea daca acesta se afla efectiv in apropierea clientului.

Grup Script

Fisa

Eveniment

Salvare ulterioara


-- calculation of the distance between 2 points

function get_distance(A,B)

local latA = (A["lat"] * math.pi) / 180

local lonA = (A["lon"] * math.pi) / 180

local latB = (B["lat"] * math.pi) / 180

local lonB = (B["lon"] * math.pi) / 180

local R = 6372.795477598

local dist = (R * math.acos(math.sin(latA) *

math.sin(latB) + math.cos(latA) * math.cos(latB) * math.cos(lonA-lonB)))*1000

return dist

end

-- check if the past position is on the construction site

function in_constructionsite(coordA, coordB, radius)

if (get_distance(coordA, coordB)<=radius) then

return true

end

return false

end

Mai intai, cream doua functiuni care vor fi apelate de catre script pentru a masura distantele dintre punctul GPS actual si, in acest caz, punctele GPS ale santierelor/punctelor de lucru.

local constructionsite database.getsql("SELECT * FROM coord_constructionsite WHERE latitude<>0 AND longitude<>0 AND latitude IS NOT NULL AND longitude IS NOT NULL")


local rows_constructionsite = constructionsite.getrows()


-- retrieve GPS coordinates

local coord = program.geolocation()

local curr_lat = 0

local curr_lon = 0


curr_lat = coord[1]

curr_lon = coord[2]

Citim toate punctele de lucru prezente in baza de date luandu-le doar pe acelea cu o coordonata GPS valida. Nios4 nu ia in considerare valorile latitudinii si longitudinii daca ambele sunt la zero.

Interogam apoi telefonul pentru a recupera pozitia.

--coordinates not found

if (curr_lat==0 and curr_lon==0) then

errorn.errorcode = "ERR-FL"

errorn.errormessage = "Unable to recover GPS coordinates, try again in a second moment"

dataview.setvalue(fieldname,"To check

(GPS not found)")

do return end

end

Daca punctul GPS nu poate fi recuperat, atunci puteti da eroare si iesi din script. Acesta este cel mai drastic sistem.

Cea mai buna metoda ar fi sa dati un mesaj si sa permiteti totusi salvarea, prin setarea unei valori a unui camp la Date neconfirmate, acest lucru pentru a permite operatorului sa poata salva datele daca GPS-ul nu functioneaza. dati non confermati. Questo per evitare che un operatore non possa salvare i dati se il GPS non funziona.

for i, c in pairs(rows_constructionsite) do

-- construction site coordinates

local lat = c.getvalue("latitude")

local lon = c.getvalue("longitude")

local constructionsite_coord = {lat = lat, lon = lon}


if (in_constructionsite(current_coord, constructionsite_coord, c.getvalue("radius"))==true) then

dataview.setvalue("state","GPS

found")

set_constructionsite_report(c.getvalue("gguidp"))

do return end

end

end

dataview.setvalue("state","To check (GPS not found)")

Incepem sa intoarcem toate santierele si, prin functiunile create la inceput, verificam daca distanta dintre pozitia noastra actuala si cea a santierelor este mai mica decat raza data. Daca da, suntem de fapt pe santier, in caz contrar, rolul campului va fi stabilit astfel incat sa semnaleze faptul ca valorile nu au fost confirmate de pozitia GPS.