|
|
El **caso de uso 10** está dedicado a la información relativa a eventos deportivos.
|
|
|
|
|
|
La DGT, con el servicio de balizamiento perimetral de eventos deportivos, recopila y publica la información de la localización en tiempo real de todos los eventos deportivos (competiciones ciclistas, eventos de atletismo en carretera, rallies, etc) que afectan a la circulación y seguridad vial de los usuarios que transitan por las vías del territorio español. La creación, publicación y eliminación de los planes y los recorridos de dichos eventos se realizará a través de los sistemas de la DGT.
|
|
|
|
|
|
Se utilizarán balizas V-2 para realizar el seguimiento de los eventos y conos conectados que informarán de los distintos cortes de las carreteras en las inmediaciones del circuito para garantizar la seguridad. De esta forma el usuario planifica mejor sus desplazamientos, y considerar la opción del uso del transporte público que permite reducción de las emisiones contaminantes.
|
|
|
|
|
|
La información de balizamiento de los eventos deportivos que llega al usuario final dependerá de la implementación realizada por el agente/tercero que consume la información de la plataforma DGT 3.0 y la publica a través del sistema de información del vehículo, aplicación móvil u otros dispositivos.
|
|
|
|
|
|
La plataforma cuenta con dos funcionalidades diferenciadas para la **publicación (envío)** y para la **suscripción (recepción)** de información. La primera es a través de una API REST del caso de uso y la segunda a través de un servicio MQTT en tiempo real. Además la información de cortes de vía se publicará por bandeja de salida.
|
|
|
|
|
|
Tanto la funcionalidad de publicación como de suscripción requieren de certificados de acceso distintos que deben ser solicitados y suministrados por DGT 3.0. Estos certificados, de no haber sido solicitados ya, se deberán solicitar a *[soporte@cmobility30.es](mailto:soporte@cmobility30.es)*.
|
|
|
|
|
|
A continuación se muestran las URLs con las que se accede a cada funcionalidad:
|
|
|
|
|
|
| Modo | URL | Descripción |
|
|
|
| ----------- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
|
| Publicación | https://pre.cmobility30.es/use-case-10 | Endpoint del entorno de integración de clientes para la publicación (ciertos métodos de publicación serán accesibles para el consumo) |
|
|
|
| Suscripción | mqtt://mqtt.pre.cmobility30.es:8883 | Endpoint del entorno de integración para la suscripción |
|
|
|
|
|
|
## Publicación
|
|
|
|
|
|
Este caso de uso dispone de una API REST para la publicación (envío) de los datos por parte de las empresas que así lo deseen. En los siguientes apartados se pueden encontrar los detalles de esta:
|
|
|
|
|
|
- Los detalles generales para realizar una petición:
|
|
|
|
|
|
> [General · (cmobility30.es)](https://gitlab.cs.cmobility30.es/dgt3.0_esp/general/-/wikis/home)
|
|
|
|
|
|
- Información relativa a los métodos específicos del caso de uso:
|
|
|
|
|
|
> [Metodos de publicación](publicacion/Metodos)
|
|
|
|
|
|
- Información relativa al detalles de las tablas maestras:
|
|
|
|
|
|
> [Tablas maestras](publicacion/Tablas-Maestras)
|
|
|
|
|
|
## Suscripción
|
|
|
|
|
|
Este caso de uso también dispone de un servicio de suscripción (recepción) de datos por parte de las empresas que así lo deseen mediante el protocolo MQTT. Este caso de uso es solo para **los servicios de seguimiento de las pruebas o eventos deportivos**, si se desea la suscripción a la información de eventos de conos (cortes de carretera) se debe hacer a través de la interfaz de bandeja de salida que puede encontrarse en el [caso de uso 4. Panel de mensajes virtual.](https://gitlab.cs.cmobility30.es/dgt3.0_esp/caso-de-uso-4)
|
|
|
|
|
|
|
|
|
A continuación se pueden encontrar los detalles de la suscripción MQTT para este caso de uso 10 (Eventos deportivos):
|
|
|
|
|
|
**MQTT (MQ Telemetry Transport)** es un protocolo de mensajería que se usa como un método simple y liviano para transferir datos hacia/desde dispositivos de baja potencia. Puede ver más información y un ejemplo de conexión [aquí](https://gitlab.cs.cmobility30.es/dgt3.0_esp/general/-/wikis/MQTT).
|
|
|
|
|
|
El protocolo admite un único patrón de mensajería, el patrón **Publicar-Suscribir**: cada mensaje es publicado en un tópico al que se debe suscribir para recibir la información.
|
|
|
|
|
|
La suscripción al servicio de este caso de uso deberá ser mediante el tópico:
|
|
|
|
|
|
> usecase10/events
|
|
|
|
|
|
En el tópico se publican los eventos en formato JSON. Aquí se puede ver un ejemplo:
|
|
|
|
|
|
```json
|
|
|
[
|
|
|
{
|
|
|
"type": "Feature",
|
|
|
"geometry": {
|
|
|
"type": "LineString",
|
|
|
"coordinates": [
|
|
|
[-8.08815999999996, 42.433350000000075, 0],
|
|
|
[-8.088169999999934, 42.433350000000075, 0],
|
|
|
[-8.088289999999972, 42.433370000000025, 0],
|
|
|
[-8.08851999999996, 42.43340000000006, 0],
|
|
|
[-8.088619999999935, 42.43341000000004, 0]
|
|
|
]
|
|
|
},
|
|
|
"properties": {
|
|
|
"idEvento": 1,
|
|
|
"idEtapa": 123,
|
|
|
"objectid_1": 123123,
|
|
|
"objectid": 63993,
|
|
|
"ddtram_cod": 58651,
|
|
|
"ddcar_codi": "58312",
|
|
|
"ddcar_deno": "De Carballiño (N-541) a Parada de Laviote (OU-0416)",
|
|
|
"ddtram_den": "De Carballiño (N-541) a Parada de Laviote (OU-0416)",
|
|
|
"ddtram_tip": "Diputación Provincial o Foral",
|
|
|
"ddtram_tit": "Excma. Diputación Provincial de Orense",
|
|
|
"ddtram_t_1": "Carretera Convencional",
|
|
|
"ddtram_lon": 14.802,
|
|
|
"pk_ini": 0,
|
|
|
"pk_fin": 14.52,
|
|
|
"idtipovian": "Convencional (Red Provincial)",
|
|
|
"ddprov_pro": "Ourense",
|
|
|
"ddcom_comu": "Galicia",
|
|
|
"color": 0,
|
|
|
"ddcar_carr": "OU-0417",
|
|
|
"ddtvia_ord": 3,
|
|
|
"pkinigis": 0,
|
|
|
"pkfingis": 14520,
|
|
|
"shape_leng": 29189.174671589997,
|
|
|
"pk_inicio_tram_etp": 0.20000000000000001,
|
|
|
"pk_fin_tram_etp": 4.75,
|
|
|
"tipo_vialidad": "Carretera normalizada",
|
|
|
"cod_vialidad": "RCL",
|
|
|
"geom": {
|
|
|
"type": "LineString",
|
|
|
"coordinates": [
|
|
|
[-8.08815999999996, 42.433350000000075, 0],
|
|
|
[-8.088169999999934, 42.433350000000075, 0],
|
|
|
[-8.088289999999972, 42.433370000000025, 0],
|
|
|
[-8.08851999999996, 42.43340000000006, 0],
|
|
|
[-8.088619999999935, 42.43341000000004, 0],
|
|
|
[-8.088729999999941, 42.43341000000004, 0],
|
|
|
[-8.088919999999973, 42.43341000000004, 0],
|
|
|
[-8.08913999999993, 42.43339000000003, 0],
|
|
|
[-8.089369999999974, 42.433370000000025, 0],
|
|
|
[-8.089719999999943, 42.433340000000044, 0],
|
|
|
[-8.089899999999943, 42.43332000000004, 0],
|
|
|
[-8.089979999999969, 42.43330000000003, 0],
|
|
|
[-8.09003999999993, 42.433290000000056, 0],
|
|
|
[-8.090119999999956, 42.433250000000044, 0],
|
|
|
[-8.090209999999956, 42.433200000000056, 0],
|
|
|
[-8.090309999999931, 42.43313000000006, 0],
|
|
|
[-8.090399999999931, 42.43307000000004, 0],
|
|
|
[-8.090559999999925, 42.43294000000003, 0],
|
|
|
[-8.090799999999945, 42.43274000000008, 0],
|
|
|
[-8.090889999999945, 42.43268000000006, 0],
|
|
|
[-8.09096999999997, 42.43261000000007, 0]
|
|
|
]
|
|
|
},
|
|
|
"tsinicio": "2022-05-07T02:00:00Z",
|
|
|
"tsfin": "2022-05-07T02:00:00Z",
|
|
|
"evento": "XXIII SUBIDA A SALETA",
|
|
|
"timestamp" : "2022-05-07T12:00:00Z"
|
|
|
}
|
|
|
}
|
|
|
]
|
|
|
```
|
|
|
|
|
|
Descripción de los campos para el caso de uso de eventos deportivos a través de la plataforma DGT 3.0. Publica la información geométrica del evento junto con sus carreteras, pk y horarios de paso:
|
|
|
|
|
|
**(*)= Campo que pueden no aparecer en el JSON publicado**
|
|
|
|
|
|
- **type** (string): identificador del Feature.
|
|
|
|
|
|
- **geometry**: Colección de coordenadas que representan el resultado de realizar el seguimiento de una prueba deportiva. Esta colección de coordenadas estará contenida en la colección representada por el campo _geom_ de este mismo documento JSON. De la colección de coordenadas de seguimiento que se publica la primera de la lista se corresponde con la ubicación del coche de cola, mientras que la última de la lista se corresponde con el coche de cabeza.
|
|
|
|
|
|
- **type**(string): identificador del tipo de geometría.
|
|
|
|
|
|
- **coordinates**: Colección de coordenadas del rutómetro.
|
|
|
|
|
|
- **properties**: Propiedades del schema para la publicación de eventos deportivos.
|
|
|
|
|
|
- **eventoId** (integer):Identificador del evento deportivo
|
|
|
|
|
|
- **etapaId** (integer): Identificador de la etapa que pertenece a un evento deportivo único definido por el campo _**idEvento**_.
|
|
|
|
|
|
- **objectid_1** (integer): Identificador del tramo que pertenece a una etapa única definida por el campo _**etapaId**_.
|
|
|
|
|
|
- **(*) objectid**(integer): Identificador del objeto según GIS.
|
|
|
|
|
|
- **ddtram_cod**(integer): Identificador oficial del tramo en BDC (Base de Datos de Carreteras)
|
|
|
|
|
|
- **ddcar_codi**(string): Identificador de la carretera en BDC (Base de Datos de Carreteras)
|
|
|
|
|
|
- **ddcar_deno**(string): Denominación de carretera en BDC (Base de Datos de Carreteras)
|
|
|
|
|
|
- **ddtram_den**(string): Denominación del tramo en base de datos de carreteras
|
|
|
|
|
|
- **ddtram_tip**(string):Tipología del titular del tramo en bases de datos de carreteras
|
|
|
|
|
|
- **ddtram_tit**(string): Nombre del titular del tramo en bases de datos de carreteras
|
|
|
|
|
|
- **ddtram_t_1**(string):Tipología del tramo en base de datos de carreteras
|
|
|
|
|
|
- **(*) ddtram_lon**(integer):Longitud total del tramo en base de datos de carreteras
|
|
|
|
|
|
- **pk_ini**(string): Punto kilométrico de inicio del tramo y oficial del tramo en base de datos de carreteras.
|
|
|
|
|
|
- **pk_fin**(string): Punto kilométrico de fin del tramo y oficial del tramo en base de datos de carreteras.
|
|
|
|
|
|
- **(*) dtipovian**(string): Tipología de la carretera en Bases de datos de carreteras
|
|
|
|
|
|
- **ddprov_pro**(string): Provincia del tramo en base de datos de carreteras
|
|
|
|
|
|
- **(*) ddcom_comu**(string): Comunidad autónoma del tramo en base de datos de carreteras
|
|
|
|
|
|
- **(*) color**(string): Color de vía segun GIS para mapamovilidad.es
|
|
|
|
|
|
- **(*) pkinigis**(integer): Punto kilométrico de inicio del tramo según el GIS.
|
|
|
|
|
|
- **(*) pkfingis**(integer): Punto kilométrico de fin del tramo según GIS.
|
|
|
|
|
|
- **(*) shape_leng**(numeric): Longitud de la forma según coordenadas
|
|
|
|
|
|
- **ddcar_carr**(string): Nomenclatura oficial de la carretera en base de datos de carreteras
|
|
|
|
|
|
- **pk_inicio_tram_etp**(integer): Punto kilométrico de inicio de ocupación del tramo etapa.
|
|
|
|
|
|
- **pk_fin_tram_etp**(integer): Punto kilométrico de fin de ocupación del tramo etapa.
|
|
|
|
|
|
- **tipo_vialidad**(string): Descripción de la vialidad por la que se ve afectado el tramo
|
|
|
|
|
|
- **cod_vialidad**(string): Código identificativo de la vialidad por la que se ve afectado el tramo
|
|
|
|
|
|
- **geom**(string): Colección de coordenadas que representan la ruta total del tramo sobre el que se está haciendo el seguimiento. De la colección de coordenadas de que se publica, la primera de la lista se corresponde con la ubicación donde comienza el evento, mientras que la última de la lista se corresponde con la ubicación donde este finaliza.
|
|
|
|
|
|
- **tsinicio**(ZonedDateTime): Fecha de inicio de la prueba.
|
|
|
|
|
|
- **tsfin**(ZonedDateTime): Fecha de fin de la prueba.
|
|
|
|
|
|
- **evento** (String): Denominación del evento resuelto en DGT
|
|
|
|
|
|
- **timestamp** (Fecha UTC): Fecha y hora en formato UTC del momento en el que el evento se ha generado. Es necesario que sea de un máximo de 30 segundos de antiguedad con respecto a la hora UTC.
|
|
|
|
|
|
## Errores
|
|
|
|
|
|
Todas las respuestas HTTP que no sean **200 – OK**, se pueden considerar **inválidas**. No obstante, determinados métodos de la API pueden responder con código **202 - ACCEPTED** junto con una descripción indicando el motivo de aceptación. Independientemente de si el código del mensaje es 202 o uno de error, el formato de la respuesta es como el siguiente ejemplo:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"status": 401,
|
|
|
"code": 1,
|
|
|
"message": "User not found or valid"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### Respuestas parcialmente satisfactorias
|
|
|
|
|
|
- HTTP Status: **202 - Accepted**
|
|
|
|
|
|
| Code | Message |
|
|
|
| ---- | ---------------------------------------------------------------- |
|
|
|
| 27 | One more Beacon is expected in order to do the dynamic tracking |
|
|
|
|
|
|
|
|
|
La información relativa a los errores en este caso de uso se puede encontrar aquí. Estos errores tendrán tres categorías principales:
|
|
|
|
|
|
#### Error de Autentificación
|
|
|
|
|
|
- HTTP Status: **401 - Unauthorized**
|
|
|
|
|
|
| Code | Message |
|
|
|
| ---- | ----------------------- |
|
|
|
| 1 | User not found or valid |
|
|
|
|
|
|
#### Error de Cliente
|
|
|
|
|
|
- HTTP Status: **400 - Bad Request**
|
|
|
|
|
|
| Code | Message |
|
|
|
| ---- | ------------------------------------------------------------------- |
|
|
|
| 0 | Authenticate |
|
|
|
| 2 | Entity ID not found |
|
|
|
| 3 | Missing required property |
|
|
|
| 4 | The entity received cannot be processed |
|
|
|
| 5 | Incorrect token received |
|
|
|
| 6 | Expired token received |
|
|
|
| 7 | There is an error with the token provided. Please request a new one |
|
|
|
| 8 | No token received |
|
|
|
| 9 | Required request body is missing |
|
|
|
| 10 | Event is marked as expired by timestamp |
|
|
|
| 11 | Missing request header |
|
|
|
| 12 | Access denied role |
|
|
|
| 13 | Unique key violated |
|
|
|
| 14 | There is an error in one or more elements |
|
|
|
| 15 | Invalid GeoJson |
|
|
|
| 16 | GeoJson does not belong to municipality |
|
|
|
| 17 | TimestampStart should be future |
|
|
|
| 18 | TimestampEnd should be future |
|
|
|
| 19 | TimestampStart should be before TimestampEnd |
|
|
|
| 20 | The type is not a cone |
|
|
|
| 21 | Cone use type has to be Infrastructure |
|
|
|
| 22 | Cone vehicle type has to be None |
|
|
|
| 23 | The beacon type must have value 4 (Unique) |
|
|
|
| 24 | The plan requested to track was not found |
|
|
|
| 25 | The event requested to track has not started yet or has already finished |
|
|
|
| 26 | The provided coordinates for both dynamic tracking beacons are exactly the same |
|
|
|
|
|
|
En el caso de obtener un *error 3 - Missing required property* la respuesta obtenida tendrá un valor en el *message* que nos indicará los campos que faltan por enviar:
|
|
|
|
|
|
```json
|
|
|
{
|
|
|
"status": 400,
|
|
|
"code": 3,
|
|
|
"message": "[cityIne: must not be null, parkingId: must not be null, timestamp: must not be null]"
|
|
|
}
|
|
|
```
|
|
|
|
|
|
#### Error de Servidor
|
|
|
|
|
|
- HTTP Status: **500 - Internal Server Error**
|
|
|
|
|
|
| Code | Message |
|
|
|
| ---- | -------------- |
|
|
|
| 28 | Internal error | |