SKPOITrackerManager不能作为例外工作

时间:2015-07-31 14:46:36

标签: android skmaps

我正在使用SKPOITrackerManager在导航模式中跟踪自定义的可跟踪POI。 SKTrackablePOI对象的arraylist有很多元素放在我的路线附近。但onReceivedPOIs()仅跟踪其中一个。此方法仅返回一个元素列表。但对于一个POI,它被称为5到10次。很抱歉,由于项目协议,我无法在此发布完整的代码。但在这里,我可以在SKPOITrackerListener界面的实现中向您展示我的设置:

public void startPOITracking() {
    poiTrackerManager = new SKPOITrackerManager(this);
    SKTrackablePOIRule skTrackablePOIRule = new SKTrackablePOIRule();
    skTrackablePOIRule.setAerialDistance(15000);
    skTrackablePOIRule.setRouteDistance(15000);
    skTrackablePOIRule.setNumberOfTurns(15000);
    skTrackablePOIRule.setMaxGPSAccuracy(15000);
    skTrackablePOIRule.setEliminateIfUTurn(false);
    skTrackablePOIRule.setMinSpeedIgnoreDistanceAfterTurn(12000);
    skTrackablePOIRule.setMaxDistanceAfterTurn(150000);
    poiTrackerManager.startPOITrackerWithRadius(100, 0.5);
    poiTrackerManager.setRuleForPOIType(SKTrackablePOIType.INVALID, skTrackablePOIRule);
    poiTrackerManager.addWarningRulesforPoiType(SKTrackablePOIType.INVALID);
}

我已将限制设置为SKTrackablePOIRule内的非常高的值,并且仍然只获得一个POI。我甚至可以用poiTrackerManager.setRuleForPOIType(SKTrackablePOIType.INVALID, skTrackablePOIRule);注释掉这一行,但我仍然只收到一个POI。也许有人可以帮助理解我的问题。

1 个答案:

答案 0 :(得分:1)

以下是我过去使用的内容:

poiTrackingManager = new SKPOITrackerManager(this);
SKTrackablePOIRule rule = new SKTrackablePOIRule();
rule.setAerialDistance(5000); // this would be our main constraint, stating that all the POIs with 5000m, aerial distance should be detected
rule.setNumberOfTurns(100); // this has to be increased – otherwise some points will be disconsidered
rule.setRouteDistance(10000);//this has to be increased as the real road route will be longer than the aerial distance
rule.setMinSpeedIgnoreDistanceAfterTurn(20); //decrease this to evaluate all candidates
rule.setMaxDistanceAfterTurn(10000); //increase this to make sure we don't exclude any candidates
rule.setEliminateIfUTurn(false); // setting this to true (default) excludes points that require us to make an U-turn to get to them 
rule.setPlayAudioWarning(false);

注意:我不确定这些参数的最大值/最小值是什么,因为当它们太高时我会看到一些问题(它们会影响路由算法,更准确地说是如何探索道路图,这可以解释为什么在高值时它可能会发生故障) - 我会说你应该从保守的价值开始,然后逐渐增加它们

对于startPOITrackerWithRadius,我会使用不同的值,就像您将半径设置为100(米)一样,这将大大减少SDK能够分析的POI数量(即使规则很好,也可能不会分析POI)因为它们不会落在你当前位置周围的“半径”(空中距离)中:

poiTrackingManager.startPOITrackerWithRadius(1500, 0.5);

另请参阅http://sdkblog.skobbler.com/detecting-tracking-pois-in-your-way/了解有关POITraker如何运作的更多见解