Android SKPOITrackerManager不作为例外情况工作

Android SKPOITrackerManager不作为例外情况工作,android,skmaps,Android,Skmaps,我正在使用SKPOITrackerManager在导航模式下跟踪自定义的可跟踪POI。SKTrackablePOI对象的arraylist中有许多元素,它们位于我的路线附近。但是,onReceivedPOIs()只跟踪其中一个。此方法仅返回一个元素列表。但对于一个POI,它会被调用5到10次。我很抱歉,我不能张贴我的完整代码在这里由于项目协议。但在这里,我可以向您展示我在SKPOITrackerListener界面实现中的设置: public void startPOITracking() {

我正在使用
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。也许有人能帮我理解我的问题。

这里是我过去用过的东西:

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,因为它们不会落在当前位置周围的“半径”(空中距离)内):


有关POITraker如何工作的更多信息,请参见

好的,谢谢。对于现在的测试,我计算路线的所有扩展路线点。在每个路由点上,我在近距离内放置10个自定义POI(在坐标+-0.01 lat/长距离范围内随机放置每个POI)。我正在使用您建议的规则设置。现在我收到更多的POI(大约3到6个),但只有那些直接放置在路线上或距离路线只有几米的POI。这可能是
SKTrackablePOIRule
中的某个setter方法中的错误吗?此外,为什么只有两种可跟踪的POI类型<代码>速度摄像头
无效
?有关详细信息,请参阅。Android API中存在一个问题-可跟踪的POI类型应该是一个可配置的实体-只需使用这两种类型中的任何一种就可以了(不幸的是,在Android上,您只能使用这两种类型)关于您的链接,似乎有一个错误。您创建了一个规则,但没有将其应用于
poiTrackerManager.setRuleForPOIType()
poiTrackingManager.startPOITrackerWithRadius(1500, 0.5);