You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cordova.apache.org by "Shazron Abdullah (Created) (JIRA)" <ji...@apache.org> on 2011/11/28 23:35:40 UTC

[jira] [Created] (CB-55) Geolocation.prototype.watchPosition uses timeout option in wrong way

Geolocation.prototype.watchPosition uses timeout option in wrong way
--------------------------------------------------------------------

                 Key: CB-55
                 URL: https://issues.apache.org/jira/browse/CB-55
             Project: Apache Callback
          Issue Type: Bug
          Components: iOS
            Reporter: Shazron Abdullah


reported at: https://github.com/phonegap/phonegap-iphone/issues/305
by: https://github.com/all4ip

I have following scenario:

I want aprox. every second a position update. I do not want cached positions. I am willing to wait up to 30 seconds for the first valid position.

So my params would be:
var options = { timeout: 30000, maximumAge: 0, enableHighAccuracy: true };

This is identical to w3c definition.

But the timout value is also used for the internal endless loop of watchPosition. So I can either have updates every second and can wait up to 1 second for valid position or wait up to 30 seconds for valid position and get updates only every 30 seconds, too!

The timout option should be used like the doc says:

"The maximum length of time (msec) that is allowed to pass from the call to geolocation.getCurrentPosition or geolocation.watchPosition until the corresponding geolocationSuccess callback is invoked."

This happens correctly, when the params are passed to getCurrentPosition().

But the continuous update in watchPosition uses the same value for the timer, too:

setInterval(intervalFunction, params.timeout);

The interval should be a static value i.e. 1000 ms or 500 ms or a variable frequency.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Updated] (CB-55) Geolocation.prototype.watchPosition uses timeout option in wrong way

Posted by "Shazron Abdullah (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CB-55?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Shazron Abdullah updated CB-55:
-------------------------------

    Fix Version/s: 1.8.0
    
> Geolocation.prototype.watchPosition uses timeout option in wrong way
> --------------------------------------------------------------------
>
>                 Key: CB-55
>                 URL: https://issues.apache.org/jira/browse/CB-55
>             Project: Apache Callback
>          Issue Type: Bug
>          Components: iOS
>            Reporter: Shazron Abdullah
>             Fix For: 1.8.0
>
>
> reported at: https://github.com/phonegap/phonegap-iphone/issues/305
> by: https://github.com/all4ip
> I have following scenario:
> I want aprox. every second a position update. I do not want cached positions. I am willing to wait up to 30 seconds for the first valid position.
> So my params would be:
> var options = { timeout: 30000, maximumAge: 0, enableHighAccuracy: true };
> This is identical to w3c definition.
> But the timout value is also used for the internal endless loop of watchPosition. So I can either have updates every second and can wait up to 1 second for valid position or wait up to 30 seconds for valid position and get updates only every 30 seconds, too!
> The timout option should be used like the doc says:
> "The maximum length of time (msec) that is allowed to pass from the call to geolocation.getCurrentPosition or geolocation.watchPosition until the corresponding geolocationSuccess callback is invoked."
> This happens correctly, when the params are passed to getCurrentPosition().
> But the continuous update in watchPosition uses the same value for the timer, too:
> setInterval(intervalFunction, params.timeout);
> The interval should be a static value i.e. 1000 ms or 500 ms or a variable frequency.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (CB-55) Geolocation.prototype.watchPosition uses timeout option in wrong way

Posted by "Shazron Abdullah (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CB-55?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13158873#comment-13158873 ] 

Shazron Abdullah commented on CB-55:
------------------------------------

by: https://github.com/all4ip

Yes, I use the merged version. The major change is the line "Retrieve location immediately and schedule next retrieval afterwards".

But that's not what I ment.

I was reading now much more of the documentation (http://dev.w3.org/geo/api/spec-source.html) and was close to admit that I am wrong, but now again, I don't think so.

Here is my interpretation how the w3c specification is ment:

getCurrentPosition() has its timeout which will be triggered only if no position is available until then and will return a position earlier otherwise.

watchPosition() will continuously retrieve positions and call the success callback on a not configurable high frequency while "new position differs significantly from the previous position". Only if no position is available for as many seconds as defined by timeout, then the timout error should occur.

So the params.timeout should not be used in "setInterval(intervalFunction, params.timeout)". There should be used a value like 100 or 500 or 1000 ms.

The w3c doc continues:

"In step 5.2.2 of the watch process, the successCallback is only invoked when a new position is obtained and this position differs signifficantly from the previously reported position. The definition of what consitutes a significant difference is left to the implementation. Furthermore, in steps 5.2.2 and 5.2.3, implementations may impose limitations on the frequency of callbacks so as to avoid inadvertently consuming a disproportionate amount of resources."

So I would for simplicy reasons return all values and omit calculation of position differences, as it is done now in the currenty implementation.

But the interval frequency should NOT be set by the params.timeout, it has to be a static implementation.

When I was close to admit I am wrong I thought, I have to use params.timeout with 1000 and would be fine with it, because I want updates every second. But I also want to use a timeout of 30000, to allow the app to start up GPS and acquire the first position and so on, when the app starts the first time and allow up to 30 seconds of not receiving a position if the app travels i.e. through a tunnel. This should be possible with the w3c specification, but is not with the current PhoneGap implementation. So I still think the timout options is used at a wrong place.

The conclusion:

1. setInterval(intervalFunction, params.timeout) should be changed to setInterval(intervalFunction, 500)
2. a filter should be implemented to return only positions, which "position differs signifficantly from the previously reported position" (this may be done later)
                
> Geolocation.prototype.watchPosition uses timeout option in wrong way
> --------------------------------------------------------------------
>
>                 Key: CB-55
>                 URL: https://issues.apache.org/jira/browse/CB-55
>             Project: Apache Callback
>          Issue Type: Bug
>          Components: iOS
>            Reporter: Shazron Abdullah
>
> reported at: https://github.com/phonegap/phonegap-iphone/issues/305
> by: https://github.com/all4ip
> I have following scenario:
> I want aprox. every second a position update. I do not want cached positions. I am willing to wait up to 30 seconds for the first valid position.
> So my params would be:
> var options = { timeout: 30000, maximumAge: 0, enableHighAccuracy: true };
> This is identical to w3c definition.
> But the timout value is also used for the internal endless loop of watchPosition. So I can either have updates every second and can wait up to 1 second for valid position or wait up to 30 seconds for valid position and get updates only every 30 seconds, too!
> The timout option should be used like the doc says:
> "The maximum length of time (msec) that is allowed to pass from the call to geolocation.getCurrentPosition or geolocation.watchPosition until the corresponding geolocationSuccess callback is invoked."
> This happens correctly, when the params are passed to getCurrentPosition().
> But the continuous update in watchPosition uses the same value for the timer, too:
> setInterval(intervalFunction, params.timeout);
> The interval should be a static value i.e. 1000 ms or 500 ms or a variable frequency.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Resolved] (CB-55) Geolocation.prototype.watchPosition uses timeout option in wrong way

Posted by "Shazron Abdullah (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CB-55?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Shazron Abdullah resolved CB-55.
--------------------------------

    Resolution: Won't Fix
    
> Geolocation.prototype.watchPosition uses timeout option in wrong way
> --------------------------------------------------------------------
>
>                 Key: CB-55
>                 URL: https://issues.apache.org/jira/browse/CB-55
>             Project: Apache Callback
>          Issue Type: Bug
>          Components: iOS
>            Reporter: Shazron Abdullah
>             Fix For: 1.8.0
>
>
> reported at: https://github.com/phonegap/phonegap-iphone/issues/305
> by: https://github.com/all4ip
> I have following scenario:
> I want aprox. every second a position update. I do not want cached positions. I am willing to wait up to 30 seconds for the first valid position.
> So my params would be:
> var options = { timeout: 30000, maximumAge: 0, enableHighAccuracy: true };
> This is identical to w3c definition.
> But the timout value is also used for the internal endless loop of watchPosition. So I can either have updates every second and can wait up to 1 second for valid position or wait up to 30 seconds for valid position and get updates only every 30 seconds, too!
> The timout option should be used like the doc says:
> "The maximum length of time (msec) that is allowed to pass from the call to geolocation.getCurrentPosition or geolocation.watchPosition until the corresponding geolocationSuccess callback is invoked."
> This happens correctly, when the params are passed to getCurrentPosition().
> But the continuous update in watchPosition uses the same value for the timer, too:
> setInterval(intervalFunction, params.timeout);
> The interval should be a static value i.e. 1000 ms or 500 ms or a variable frequency.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (CB-55) Geolocation.prototype.watchPosition uses timeout option in wrong way

Posted by "Filip Maj (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CB-55?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13267525#comment-13267525 ] 

Filip Maj commented on CB-55:
-----------------------------

Don't think this issue is relevant. The suggestions made by the commenter do not adhere to the W3C spec, especially the "ignore the significant position difference requirement".

CB-359 should resolve this anyways. The JS to be merged in is on my fork (brunt of the changes are in the [geolocation.js module|https://github.com/filmaj/incubator-cordova-js/blob/geotests/lib/common/plugin/geolocation.js]).

The iOS changes are also on [my branch|https://github.com/filmaj/incubator-cordova-ios/tree/geoupdate].

I would suggest closing it.
                
> Geolocation.prototype.watchPosition uses timeout option in wrong way
> --------------------------------------------------------------------
>
>                 Key: CB-55
>                 URL: https://issues.apache.org/jira/browse/CB-55
>             Project: Apache Callback
>          Issue Type: Bug
>          Components: iOS
>            Reporter: Shazron Abdullah
>             Fix For: 1.8.0
>
>
> reported at: https://github.com/phonegap/phonegap-iphone/issues/305
> by: https://github.com/all4ip
> I have following scenario:
> I want aprox. every second a position update. I do not want cached positions. I am willing to wait up to 30 seconds for the first valid position.
> So my params would be:
> var options = { timeout: 30000, maximumAge: 0, enableHighAccuracy: true };
> This is identical to w3c definition.
> But the timout value is also used for the internal endless loop of watchPosition. So I can either have updates every second and can wait up to 1 second for valid position or wait up to 30 seconds for valid position and get updates only every 30 seconds, too!
> The timout option should be used like the doc says:
> "The maximum length of time (msec) that is allowed to pass from the call to geolocation.getCurrentPosition or geolocation.watchPosition until the corresponding geolocationSuccess callback is invoked."
> This happens correctly, when the params are passed to getCurrentPosition().
> But the continuous update in watchPosition uses the same value for the timer, too:
> setInterval(intervalFunction, params.timeout);
> The interval should be a static value i.e. 1000 ms or 500 ms or a variable frequency.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (CB-55) Geolocation.prototype.watchPosition uses timeout option in wrong way

Posted by "Shazron Abdullah (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CB-55?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13158872#comment-13158872 ] 

Shazron Abdullah commented on CB-55:
------------------------------------

by: https://github.com/linusdev

@all4ip: This should be fixed after my pull request [1] got merged in. Check if you have the latest phonegap version.

[1] https://github.com/phonegap/phonegap-iphone/pull/222
                
> Geolocation.prototype.watchPosition uses timeout option in wrong way
> --------------------------------------------------------------------
>
>                 Key: CB-55
>                 URL: https://issues.apache.org/jira/browse/CB-55
>             Project: Apache Callback
>          Issue Type: Bug
>          Components: iOS
>            Reporter: Shazron Abdullah
>
> reported at: https://github.com/phonegap/phonegap-iphone/issues/305
> by: https://github.com/all4ip
> I have following scenario:
> I want aprox. every second a position update. I do not want cached positions. I am willing to wait up to 30 seconds for the first valid position.
> So my params would be:
> var options = { timeout: 30000, maximumAge: 0, enableHighAccuracy: true };
> This is identical to w3c definition.
> But the timout value is also used for the internal endless loop of watchPosition. So I can either have updates every second and can wait up to 1 second for valid position or wait up to 30 seconds for valid position and get updates only every 30 seconds, too!
> The timout option should be used like the doc says:
> "The maximum length of time (msec) that is allowed to pass from the call to geolocation.getCurrentPosition or geolocation.watchPosition until the corresponding geolocationSuccess callback is invoked."
> This happens correctly, when the params are passed to getCurrentPosition().
> But the continuous update in watchPosition uses the same value for the timer, too:
> setInterval(intervalFunction, params.timeout);
> The interval should be a static value i.e. 1000 ms or 500 ms or a variable frequency.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira