Location Data Supported
Real-Time Anonymizer currently supports only the traffic use case, which needs trajectory location data (provided in smaller chunks). A trajectory is a sequence of sequential positions that a single device visited in a single journey without making any significant stops. For example, in a case when a vehicle began a journey from a home location, driven to and stopped at a school location, and then continued onto a work location, we would expect to have two separate trajectories:
- Home → School trajectory
- School → Work trajectory
A trajectory consists of a sequential set of point positions ordered by timestamp. These raw positions are analyzed and anonymized, with a subset of positions output after anonymization.
Real-Time Anonymizer works with the SENSORIS and SDII vehicle sensor data formats, described below.
Real-Time Anonymizer can use SENSORIS data in Protobuf binary as the input/output data format. The goal of SENSORIS is to provide a unified exchange format to allow service and map providers to use vehicle-based sensor data without the need of transformation between different manufacturers depending on formats and the danger of data loss through translation.
The core use cases of SENSORIS are the transportation of the following data:
- Near real-time sensor information, for example hazard warnings and driver information
- Delayed batch sensor information, for example map learning
- Delayed statistical aggregation of sensor information, for example, driver behaviour information.
For more information about Protobuf, see https://developers.google.com/protocol-buffers/docs/overview .
For more information about the SENSORIS specification 1.0.0, https://sensor-is.org/wp-content/uploads/sites/21/2019/07/sensoris-specification-v1.0.0-public-1.zip .
Requirements
Real-Time Anonymizer requires the following data to be present in the input SENSORIS data:
- One or more
sensoris.protobuf.messages.data.DataMessage
objects that represent trajectories - List of
sensoris.protobuf.categories.localization. VehiclePositionAndOrientation
objects that describe trajectory points - Each
VehiclePositionAndOrientation
object including the following: - an
envelope
with a sensoris.protobuf.types.base.Timestamp
object that defines the timestamp of the point -
sensoris.protobuf.types.spatial.PositionAndAccuracy
with coordinates stored in field geographic_wgs84
-
sensoris.protobuf.types.spatial.RotationAndAccuracy
with heading stored in field yaw
Additionally, you should include vehicle speed information within a DataMessage
object that represents trajectory to capture the speed the vehicle was traveling at. This includes the list of sensoris.protobuf. categories.localization.VehicleSpeed
defining objects with the following content:
- An
envelope
with a sensoris.protobuf.types.base.Timestamp
object that defines the timestamp of the speed information. The timestamp of a VehicleSpeed
object can match the timestamp of a corresponding VehiclePositionAndOrientation
object (a point in trajectory), but is not required to. -
sensoris.protobuf.types.spatial.XyzVectorAndAccuracy
with speed stored in field metric_vehicle
- with units meter per second squared.
The following SENSORIS Protobuf data contains a DataMessage
object that represents trajectory with two points: VehiclePositionAndOrientation
objects and speed information for these points, so-called VehicleSpeed
objects.
data_message {
envelope {
ids {
vehicle_id {
value: "example Vehicle ID"
}
}
}
event_group {
localization_category {
vehicle_position_and_orientation {
envelope {
timestamp {
posix_time {
value: 1584435551695
}
}
}
position_and_accuracy {
geographic_wgs84 {
longitude {
value: 1293282600
}
latitude {
value: 5230165310
}
}
}
}
orientation_and_accuracy {
euler_vehicle {
yaw {
value: 200000
}
}
}
...............Positions with vehicle speed info ..............
vehicle_position_and_orientation {
envelope {
timestamp {
posix_time {
value: 1584435602695
}
}
}
position_and_accuracy {
geographic_wgs84 {
longitude {
value: 1294489980
}
latitude {
value: 5229859370
}
}
}
}
vehicle_speed {
envelope {
timestamp {
posix_time {
value: 1584435551695
}
}
}
value_and_accuracy {
metric_vehicle {
x {
value: 133
}
}
}
}
...............Positions with vehicle speed info ..............
vehicle_speed {
envelope {
timestamp {
posix_time {
value: 1584435602695
}
}
}
value_and_accuracy {
metric_vehicle {
x {
value: 187
}
}
}
}
}
}
}
Real-Time Anonymizer can use SDII data in Protobuf binary as the input/output data format. SDII is a flexible data format that defines a consistent interpretation for data gathered and sent by all vehicles on the road. The ultimate goal is to allow vehicles to transport a snapshot of the environment to help map and service providers understand near real-time conditions for reducing accidents, increasing journey comfort and improving mobility.
The core use cases of SDII are the transportation of:
- Near Real-Time Sensor Information (for example, Hazard Warnings and Driver Information)
- Delayed Batch Sensor Information (for example, Map Learning)
- Delayed statistical Aggregation of Sensor Information (for example, Driver Behavior Information).
For more information about Protobuf, see https://developers.google.com/protocol-buffers/docs/overview .
Read more about SDII: https://developer.here.com/documentation/sdii-data-spec/dev_guide/topics/introduction.html For more information about the SDII, https://developer.here.com/documentation/sdii-data-spec/dev_guide/topics/introduction.html .
Requirements
Real-Time Anonymizer requires the following data to be present in the input SDII data message:
- One Envelope – mandatory
- One Path – mandatory
- One transient vehicle ID -mandatory
- One or more Path Events – optional
The following SDII protobuf data contains a Message
object that represents a Trajectory and Path Events related to it.
{
"envelope": {
"version": "1.0",
"submitter": "HERE Test User",
"vehicleMetaData": {
"vehicleTypeGeneric": "PASSENGER_CAR",
"vehicleSpecificMetaData": [
{ "key": "SpecificVehicleType", "value": "HERE Test Car" }
],
"vehicleReferencePointDeltaAboveGround_m": 1.62,
"curvatureAccuracy_1pm": 1e-005,
"slopeAccuracy_percent": 0.01
},
"transientVehicleID": 12345
},
"path": {
"positionEstimate": [
{
"timeStampUTC_ms": 1397764944000,
"positionType": "RAW_GPS",
"longitude_deg": 8.9743712,
"latitude_deg": 49.4607534,
"horizontalAccuracy_m": 1.3,
"altitude_m": 123.7,
"heading_deg": 76.09999999999999,
"speed_mps": 13.8,
"altitudeAccuracy_m": 24.5,
"headingAccuracy_deg": 2.7,
"speedAccuracy_mps": 0.7
},
{
"timeStampUTC_ms": 1397764945000,
"positionType": "RAW_GPS",
"longitude_deg": 8.9748056,
"latitude_deg": 49.4608278,
"horizontalAccuracy_m": 1.4,
"altitude_m": 123.6,
"heading_deg": 72.515,
"speed_mps": 13.4,
"altitudeAccuracy_m": 25.7,
"headingAccuracy_deg": 2.6,
"speedAccuracy_mps": 0.6
},
{
"timeStampUTC_ms": 1397764946000,
"positionType": "RAW_GPS",
"longitude_deg": 8.975258999999999,
"latitude_deg": 49.4609312,
"horizontalAccuracy_m": 1.7,
"altitude_m": 123.5,
"heading_deg": 69.405,
"speed_mps": 13.1,
"altitudeAccuracy_m": 33.3,
"headingAccuracy_deg": 2.1,
"speedAccuracy_mps": 0.8
},
{
"timeStampUTC_ms": 1397764947000,
"positionType": "RAW_GPS",
"longitude_deg": 8.975643399999999,
"latitude_deg": 49.4610356,
"horizontalAccuracy_m": 3.8,
"altitude_m": 130.522,
"heading_deg": 67.526,
"speed_mps": 13.2,
"altitudeAccuracy_m": 50.0,
"headingAccuracy_deg": 3.1,
"speedAccuracy_mps": 1.7
}
]
},
"pathEvents": {
"vehicleDynamics": [
{
"timeStampUTC_ms": 1397764944000,
"curvature_1pm": 0.002077,
"slope_percent": -0.09900000000000001
},
{
"timeStampUTC_ms": 1397764945000,
"curvature_1pm": 0.001821,
"slope_percent": -0.129
},
{
"timeStampUTC_ms": 1397764946000,
"curvature_1pm": 0.001298,
"slope_percent": -0.145
},
{
"timeStampUTC_ms": 1397764947000,
"curvature_1pm": 0.00086,
"slope_percent": -0.145
}
],
"signRecognition": [
{
"timeStampUTC_ms": 1397764945300,
"roadSignType": "SPEED_LIMIT_START",
"roadSignPermanency": "STATIC",
"roadSignValue": "30",
"roadSignDependencies": "SCHOOL"
}
]
}
}