【问题标题】:Understanding error code in Here Map iOS SDK了解 Here Map iOS SDK 中的错误代码
【发布时间】:2020-09-08 16:23:00
【问题描述】:

我正在使用 Here Map iOS SDK 版本 3.16.3 我正在使用 Here 地图绘制具有多个航点的路线。在计算路线中的 ETA 时,我收到错误 NMARoutingErrorViolatesOptions。当我在 NMARouteResult 类中进一步检查时,该类中的属性 violatedOptions 正在数组中返回 4096。请在下面找到 violatedOptions 属性的 cmets。

  /**
    * NSArray of NSNumber objects, one per route calculated,
    * representing which options (if any) were violated for the
    * corresponding route. The NSNumber objects should be converted to
    * NSUInteger before checking. The value will be an OR combination of
    * NMARoutingOption and `NMARoutingViolatedOption` values, or
    * NMARoutingViolatedOptionNone if no options were violated. If route calculation
    * failed, the array will contain a single object containing all the routing
    * options (if any).
    */
    
     @property (nonatomic, readonly, nullable) NSArray <NSNumber *> *violatedOptions;

我已将 NMACoreRouter 对象中的路由选项设置为 NMARoutingOptionAvoidBoatFerry

NMARoutingOptionAvoidBoatFerry = 1

以下是违规选项的枚举,我正在尝试找出路线中发生的确切错误。

/**
 * Implicit routing options that may be violated by routing calculation operations.
 *
 * @note Violations which depend on traffic data (e.g. BlockedRoad) will only be returned if
 * the traffic feature is available.
 */
// The violatedOptions value returned from NMARouter will be an OR
// combination of NMARoutingOption and NMARoutingViolatedOption values. Thus the
// NMARoutingViolatedOption values offset from a larger value to leave room
// for NMARoutingOption values to grow in the future.
typedef NS_OPTIONS(NSInteger, NMARoutingViolatedOption) {
    /** The returned route does not violate any options */
    NMARoutingViolatedOptionNone NS_SWIFT_NAME(none)                       = 0,
    /** The route passes through a blocked road (e.g. due to construction or a traffic accident) */
    NMARoutingViolatedOptionBlockedRoad NS_SWIFT_NAME(blockedRoad)         = 1 << 12,
    /** The route passes through a road with a time-based turn restriction */
    NMARoutingViolatedOptionTurnRestriction NS_SWIFT_NAME(turnRestriction) = 1 << 13,
    /** The route's start direction is not as requested */
    NMARoutingViolatedOptionStartDirection NS_SWIFT_NAME(startDirection)   = 1 << 14,
    /** The route uses roads or turns which are permanently forbidden for given truck */
    NMARoutingViolatedPermanentTruckRestriction                            = 1 << 15,
    /** The route uses roads that belong to restricted areas. */
    NMARoutingViolatedOptionZoneRestriction NS_SWIFT_NAME(zoneRestriction) = 1 << 16
};

由于4096的二进制代码是1000000000000 = 1

从 NMARouter 返回的冲突选项值将是 OR NMARoutingOption 和 NMARoutingViolatedOption 值的组合。 因此 NMARoutingViolatedOption 值从一个较大的值偏移到 为 NMARoutingOption 值在未来增长留出空间。

1

这是获取 NMARoutingViolatedOption 值的正确逻辑吗?没有一个 NMARoutingViolatedOption 值不适合上述逻辑。谁能帮助我更好地理解这一点?

【问题讨论】:

  • 你的逻辑是正确的。看来你已经回答了你的问题,仔细看看。 4096 相当于二进制中的 1

标签: ios swift heremaps heremaps-ios-sdk


【解决方案1】:

您可以像这样检查违反的错误:

目标-C:

NSInteger violatedOption = [routeResult.violatedOptions[0] integerValue];

if (violatedOption & NMARoutingViolatedOptionBlockedRoad) {
      // handle blocked road violated option (4096)
}

斯威夫特:

guard let violatedOption = routeResult?.violatedOptions?.first?.intValue else { return }

if (violatedOption & NMARoutingViolatedOption.blockedRoad.rawValue) != 0 {
      // handle blocked road violated option (4096)
}

【讨论】:

    【解决方案2】:

    对@dashchark 答案的补充:

    violatedOptions 还可以包含一个或多个“NMARoutingOption”选项,计算出的路线不满足这些选项。 所以还要检查 NMARoutingOption 的所有可能的枚举值

    斯威夫特:

    guard let violatedOption = routeResult?.violatedOptions?.first?.uintValue else { return }
    
    if (violatedOption & NMARoutingOption.avoidTunnel.rawValue) != 0 {
        // route does not satisfy the route option "avoid tunnel"
    }
    
    if (violatedOption & NMARoutingOption.avoidTollRoad.rawValue) != 0 {
        // route does not satisfy the route option "avoid tunnel"
    }
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多