Thank you for taking the time to read my question.
I have a timer that currently loops every 15 seconds. OnTimerEnd I save something to a collection.
My problem is, it seems that by the time I save to the collection and then reset the timer so it loops more than an second passes and my timer develops lag (for lack of a better term). I put another timer on my screen and start them at the same time (as close as I can) and as I watch them, the times diverge.
Is there a way to monitor the Timer.Value and then do something like IF(Mod(Timer.Value,15000) = 0,Do my stuff)?
I tried setting a variable to true and then setting a TextInput default value to the variable. Then I tried to use the OnChange event, but it didn't seem to fire.
Thanks
Solved! Go to Solution.
ok..... I have this so far
sLat = starting Latitude
sLong = starting Longitude
eLat = ending Latitude
eLong = ending Longitude
Asin(Sqrt(Power(Sin((Radians(eLat)-Radians(sLat))/2),2)+(Cos(sLat)*Cos(eLat)*Power(Sin((Radians(eLong)-Radians(sLong))/2),2))))
I think I have the formula right so far, I'm just not sure how to do 2r * all the above?
r is the radius of the sphere....
what sphere? the earth?
Sorry if I'm so clueless here...
Thanks
Not bad for a first crack at it! Yes, the r in the equation is the mean radius of the earth. Use 6371007 meters as "close enough", since the Earth isn't a perfect sphere anyways.
You have a couple of cosine terms calculating on degrees, not radians, so that will give you a bad answer. Good coding practice is to pre-calculate terms to simplify the code, such as the Radians function calls.
Oops! Thanks!
what do you mean precalculate? Put the radians into variables?
I’ll finish it off tonight and compare to the API
@iwonder wrote:Oops! Thanks!
what do you mean precalculate? Put the radians into variables?
I’ll finish it off tonight and compare to the API
Here's what I am doing to precalculate radians, to simplify my checks against your code:
Set(sLat, Radians (50.10));
Set(sLong, Radians (-114.10));
Set(eLat, Radians (50.12));
Set(eLong, Radians(-114.12));
I am using some hardcoded values for testing, but when I call eLat or sLong, I already have the values in radians.
How is this?
2*6371007*Asin(Sqrt(Power(Sin((Radians(eLat)-Radians(sLat))/2),2)+(Cos(Radians(sLat))*Cos(Radians(eLat))*Power(Sin((Radians(eLong)-Radians(sLong))/2),2))))
I think you've got it. I broke it up so it is a little easier to read and debug:
2*6378000*
Asin(
Sqrt(
Power(
Sin(
(Radians(eLat)-Radians(sLat))/2
)
,2)+
(
Cos(Radians(sLat))*
Cos(Radians(eLat))*
Power(
Sin(
(Radians(eLong)-Radians(sLong))/2
)
,2)
)
)
)
This formula assumes a spherical shape for the Earth (it's not, really), so it will be accurate to a few meters per kilometer. How does it compare to the results you are getting from the API?
Hi @BCLS776
I'm testing again and I'm getting different answers. Bing Maps is giving me 0.045 and the calculation is giving me 48.91160505.
Bing Maps is in Km's, what is the calculation unit of measure?
Thanks!
I read further in the Wiki and saw the sphere measurements, so I used 6356.752 instead of 6378000
Now my values are:
Bing Maps: 0.045
Formula: 0.04880217
If I use 6378.137 as the circumference I get
Bing Maps: 0.045
Formula: 0.04896634
I'm not sure what formula Bing Maps uses... I'm guessing Bing Maps is more accurate?
Thanks again
The formula you built will calculate in meters or kilometers depending on the units of r you use for Earth's radius. You could use miles too, if you like. Is matching Bing Maps within 3-4 meters "good enough" for your purposes? That's how close you are.
Here's where my geomatics engineer side geeks out a bit: The haversine formula is a quick approximation based on assuming the Earth is a perfect sphere. There are formulas available that better account for Earth's true shape, but they are more difficult to code. Bigger formulas also weigh down your app's performance. As well, how accurate is the sensor you are using to come up with these coordinates? On a good day, a smartphone GPS position might be true to within 5 meters at each point measured. And then there are different "kinds" of distances. Ones that follow the curvature of Earth, ones that are 3-D spatial, or 2-D projections on some sort of flat plane. I could go on and on...
In the end, did we make something that will save you a time delay in calling the Bing Maps API?
I have it all working now with the formula. It seems that the formula is quite close to Bing Maps. Since I'm not having to call the API I've upped my frequency to 10 seconds (may go more frequent). Over one minute I was only 1 second off on the time (elapsed time 1:01). One of the OnTimerEnd was a second longer, the rest were 10 seconds on the time stamp.
Thank you so much for ALL YOUR HELP. I have really learned a lot and had a good time learning. I'll mark your post with the formula as the solution.
have a great day!
User | Count |
---|---|
224 | |
195 | |
49 | |
43 | |
21 |
User | Count |
---|---|
325 | |
271 | |
154 | |
92 | |
30 |