I'm using HERE MAPS SDK PREMIUM V3.18.3 and I'm trying to get truck routing with routeOptions.truckShippedHazardousGoods = RouteOptions.HazardousGoodType.COMBUSTIBLE This gives an error stating: Type mismatch. Required: EnumSet<RouteOptions.HazardousGoodType!> Found: RouteOptions.HazardousGoodType
val routeOptions = RouteOptions()
routeOptions.setTransportMode(RouteOptions.TransportMode.TRUCK)
routeOptions.setHighwaysAllowed(true)
routeOptions.truckHeight = truckHeightMeters
routeOptions.truckLength = truckLengthMeters
routeOptions.truckWidth = truckWidthMeters
routeOptions.truckLimitedWeight = truckLimitedWeightTon
routeOptions.truckTrailersCount = numberOfTrailers
routeOptions.truckShippedHazardousGoods = Hazmat.COMBUSTABLE
routeOptions.speedProfile
routeOptions.routeType = RouteOptions.Type.FASTEST
routeOptions.routeCount = 1
routeOptions.setTruckTunnelCategory(RouteOptions.TunnelCategory.E)
.setTruckLength(truckLengthMeters)
.setTruckHeight(truckHeightMeters)
.setTruckTrailersCount(numberOfTrailers)
So I created an enum class:
enum class Hazmat : EnumSet<RouteOptions.HazardousGoodType!> {
COMBUSTABLE {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
COMBUSTABLE
return iterator()
}
override val size: Int
get() = 0
},
CORROSIVE {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
CORROSIVE
return iterator()
}
override val size: Int
get() = 1
},
EXPLOSIVE {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
EXPLOSIVE
return iterator()
}
override val size: Int
get() = 2
},
FLAMMABLE {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
FLAMMABLE
return iterator()
}
override val size: Int
get() = 3
},
GAS {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
GAS
return iterator()
}
override val size: Int
get() = 4
},
HARMFUL_TO_WATER {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
HARMFUL_TO_WATER
return iterator()
}
override val size: Int
get() = 5
},
ORGANIC {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
ORGANIC
return iterator()
}
override val size: Int
get() = 6
},
OTHER {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
OTHER
return iterator()}
override val size: Int
get() = 7
},
POISON {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
POISON
return iterator()
}
override val size: Int
get() = 8
},
RADIOACTIVE {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
RADIOACTIVE
return iterator()
}
override val size: Int
get() = 9
},
POISONOUS_INHALATION {
override fun iterator(): MutableIterator<RouteOptions.HazardousGoodType> {
POISONOUS_INHALATION
return iterator()
}
override val size: Int
get() = 10
}
}
If I keep the ! in EnumSet<RouteOptions.HazardousGoodType!> I get the error: Unexpected token. When I change the code to
routeOptions.truckShippedHazardousGoods = Hazmat.COMBUSTABLE
it shows: public final enum class Hazmat : EnumSet<RouteOptions.HazardousGoodType> for the Hazmat and gets the correct entry and const for COMBUSTABLE.
But like I said, I get the Unexpected error token when I leave the ! in the EnumSet<RouteOptions.HazardousGoodType!>
if I take the ! out I get this error: Enum class cannot inherit from classes This type has a constructor, and thus must be initialized here
I'm not sure what I'm missing? I've looked on the HERE.com docs I found this API ref but it also leaves out the ! from the EnumSet<RouteOptions.HazardousGoodType!> but the link also just uses the Enum<RouteOptions.HazardousGoodType> not the EnumSet. I've tried the Enum but it still gave an error when for mismatch type Hazmat found and EnumSet<RouteOptions.HazardousGoodType!> required. any ideas?
EDIT!! So I tried this and it seems to work right:
val hazmatCorrosive: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.CORROSIVE
)
val hazmatExplosive: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.EXPLOSIVE
)
val hazmatFlammable: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.FLAMMABLE
)
val hazmatGas: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.GAS
)
val hazmatHarmfulToWater: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.HARMFUL_TO_WATER
)
val hazmatOther: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.OTHER
)
val hazmatOrganic: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.ORGANIC
)
val hazmatPoison: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.POISON
)
val hazmatPoisonousInhilation: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.POISONOUS_INHALATION
)
val hazmatRadioactive: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.RADIOACTIVE
)
val hazmatCombustable: EnumSet<RouteOptions.HazardousGoodType> = EnumSet.of(
RouteOptions.HazardousGoodType.COMBUSTIBLE
)
MapLoader.getInstance().selectDataGroup(MapPackage.SelectableDataGroup.TruckAttributes)
val coreRouter = CoreRouter()
val routePlan = RoutePlan()
val routeOptions = RouteOptions()
routeOptions.transportMode = RouteOptions.TransportMode.TRUCK
routeOptions.setHighwaysAllowed(true)
routeOptions.truckHeight = truckHeightMeters
routeOptions.truckLength = truckLengthMeters
routeOptions.truckWidth = truckWidthMeters
routeOptions.truckLimitedWeight = truckLimitedWeightTon
routeOptions.truckTrailersCount = numberOfTrailers
if (combustable or corrosive or explosive or flammable or gas or harmfulToWater or other or organic or poisonousInhilation or poison or radioactive) {
try {
routeOptions.truckShippedHazardousGoods = if (combustable) {
hazmatCombustable
} else if (corrosive) {
hazmatCorrosive
} else if (explosive) {
hazmatExplosive
} else if (flammable) {
hazmatFlammable
} else if (gas) {
hazmatGas
} else if (harmfulToWater) {
hazmatHarmfulToWater
} else if (other) {
hazmatOther
} else if (organic) {
hazmatOrganic
} else if (poison) {
hazmatPoison
} else if (poisonousInhilation) {
hazmatPoisonousInhilation
} else if (radioactive) {
hazmatRadioactive
} else return
} catch (e: Exception) {
e.printStackTrace()
}
Toast.makeText(this, "Hazmat routing selected. If you're not currently hauling hazmat, update the vehicle profile.", Toast.LENGTH_LONG).show()
}
routeOptions.speedProfile
routeOptions.isTruckDifficultTurnsAllowed = false
routeOptions.truckRestrictionsMode = RouteOptions.TruckRestrictionsMode.NO_VIOLATIONS
routeOptions.routeType = RouteOptions.Type.FASTEST
routeOptions.routeCount = 1
is there a better way to do this?