我正在为MapDotNet的Touchgeo(http://www.mapdotnet.com/index.php/component/content/article?id=131)中的地理围栏功能编写watchPosition函数。在初始负载下,一切都很好。刷新后,我仅收到一行调试消息,仅指示一次回调,并且手机上的GPS永远无法打开。这是我的watchPosition函数:

navigator.geolocation.watchPosition(
    function success(pos) {
        $('#debug')
            .prepend(
                $('<div></div>').text('accuracy: ' + pos.coords.accuracy)
            )
            .css({
                textAlign: 'right',
                color: 'black'
            });
        var endpoint = isc.touchgeo.dataServicesEndpoint + "Map/mapname/Features/geofence?x={x}&y={y}&role={role}"
            .replace("{x}", pos.coords.longitude)
            .replace("{y}", pos.coords.latitude)
            .replace("{role}", isc.touchgeo.authenticationMgr.getAuthorizationRecord().Role);
        $.getJSON(endpoint, function success(data) {
            $('#debug')
                .prepend(
                    $('<div></div>').text('features: ' + data.length)
                )
                .css({
                    textAlign: 'right',
                    color: 'black'
                });
            for (layer in data) {
                if (layer in geofencingRules) {
                    geofencingRules[layer](data[layer]);
                }
            }
        });
    },
    function error(error) {
        $('#debug')
            .prepend(
                $('<div></div>').text('error: ' + error.code)
            )
            .css({
                textAlign: 'right',
                color: 'black'
            });
    },
    {
        enableHighAccuracy: true,
        maximumAge: 15000,
    }
);


有任何想法吗?

最佳答案

我想到了。基本上,positionOptions上的maximumAge告诉watchPosition()使用刷新页面之前的数据。因此,GPS永远不会打开,并且watchPosition()无法接收数据。解决此问题的方法是

var maximumAge = 0;
navigator.geolocation.watchPosition(
    function success(pos) {
        maximumAge = 15000;
        $('#debug')
            .prepend(
                $('<div></div>').text('accuracy: ' + pos.coords.accuracy)
            )
            .css({
                textAlign: 'right',
                color: 'black'
            });
        var endpoint = isc.touchgeo.dataServicesEndpoint + "Map/mapname/Features/geofence?x={x}&y={y}&role={role}"
            .replace("{x}", pos.coords.longitude)
            .replace("{y}", pos.coords.latitude)
            .replace("{role}", isc.touchgeo.authenticationMgr.getAuthorizationRecord().Role);
        $.getJSON(endpoint, function success(data) {
            $('#debug')
                .prepend(
                    $('<div></div>').text('features: ' + data.length)
                )
                .css({
                    textAlign: 'right',
                    color: 'black'
                });
            for (layer in data) {
                if (layer in geofencingRules) {
                    geofencingRules[layer](data[layer]);
                }
            }
        });
    },
    function error(error) {
        $('#debug')
            .prepend(
                $('<div></div>').text('error: ' + error.code)
            )
            .css({
                textAlign: 'right',
                color: 'black'
            });
    },
    {
        enableHighAccuracy: true,
        maximumAge: maximumAge,
    }
);


也就是说,将一个初始化为0但在第一个回调中递增为15000的变量传递给maximumAge。

希望这对某人有帮助。

09-10 12:11