La fonction metricOsrmTable permet de calculer des temps de trajet et des distances entre deux points ou deux groupes de points en face à face ou par croisement. Si le serveur ne répond pas trois fois alors que vous avez spécifié l'adresse d'un serveur et un profil, consultez l'article installation

metricOsrmTable(
  src,
  dst,
  duree = TRUE,
  distance = TRUE,
  faceAFace = TRUE,
  allerRetour = TRUE,
  stable = FALSE,
  rayonMax = 0,
  nbDstVolOiseau = 0,
  nbDstMeasure = 0,
  optiMeasure = c("duree", "distance"),
  emprise = "FRM",
  exclude = NULL,
  interactive = FALSE
)

Arguments

src, dst

vecteur numérique de longueur 3 (id/lon/lat), data.frame (colonnes id/lon/lat) ou objet sf. Les formats sp ne sont plus acceptés, ils sont convertis en objet sf avec sf::st_as_sf. Les formats data.table ne sont pas acceptés, ils sont convertis en data.frame avec as.data.frame.

duree

booléen. Si TRUE (par défaut), la fonction retourne la durée.

distance

booléen. Si TRUE (par défaut), la fonction retourne la distance.

faceAFace

booléen. Si TRUE (par défaut), les couples de points sont pris en face à face entre src et dst. Si src et dst n’ont pas la même dimension, les points en trop de la table la plus grande sont ignorés. Si FALSE, les couples sont formés selon le croisement en produit cartésien entre src et dst.

allerRetour

booléen. Si faceAFace = FALSE et allerRetour = TRUE (par défaut), tous les couples sont formés entre src et dst (hors stables). Ignoré si faceAFace = TRUE.

stable

booléen. Si stable = FALSE (par défaut), les stables sont supprimés dans la table en sortie. Sinon (stable = TRUE), la durée et la distance renvoient 0.

rayonMax

numérique. Si faceAFace = FALSE, distance maximale en kilomètres pour les couples formés entre src et dst.

nbDstVolOiseau

numérique. Si faceAFace = FALSE, nombre maximal de dst par src les plus proches à vol d'oiseau.

nbDstMeasure

numérique. Si faceAFace = FALSE, nombre maximal de dst par src les plus proches en temps ou en distance.

optiMeasure

texte. Si faceAFace = FALSE et nbDstMeasure > 0, choix du critère des dst les plus proches par src : "duree" ou "distance".

emprise

texte. Zone géographique contenant les coordonnées. A préciser si rayonMax > 0, sinon l'argument est ignoré. A choisir parmi "FRM" (par défaut) pour la France métropolitaine et ses régions transfrontalières, "971" pour la Guadeloupe, "972" pour la Martinique, "973" pour la Guyane, "974" pour la Réunion, "976" pour Mayotte ou "999" pour une autre zone.

exclude

texte. Ce paramètre permet d'effectuer les calculs de trajet en évitant un type de route : les ferries ("ferry") option RECOMMANDEE car les données ne sont pas exhaustives, les autoroutes (“motorway”), les péages (“toll”) ou aucun type de route (exclude=NULL, paramètre par défaut).

interactive

booléen. Choix du contexte d'exécution. Si TRUE, contexte shiny. Par défaut FALSE.

Value

data.frame avec les colonnes "ID","idSrc","lonSrc","latSrc","idDst","lonDst","latDst", "duree" et/ou "distance".

Details

Les sources (src) correspondent aux points de départ et les destinations (dst) aux points d’arrivée.

Les id doivent toujours être en 1ère position du vecteur ou en 1ère colonne du data.frame.

Si src et dst sont des vecteurs ou des data.frame, les coordonnées doivent être dans le système géographique non projeté WGS84 (longitude et latitude, EPSG : 4326).

La fonction convertTo permet de convertir des coordonnees en WGS84 (EPSG : 4326).

Les objets spatiaux sf peuvent être dans n’importe quel système, projeté ou non. Mais en sortie, les coordonnées seront dans le système WGS84 (EPSG : 4326).

Si faceAFace = FALSE et allerRetour = TRUE, tous les couples sont formés. Par exemple si scr = c(src_Pau,src_Agen) et dst = c(dst_Pau,dst_Agen), alors les couples 'src_Pau' vers 'dst_Agen' et 'src_Agen' vers 'dst_Pau' seront calculés (hors stables 'src_Pau-dst_Pau' et 'src_Agen-dst_Agen'). Si faceAFace = FALSE et allerRetour = FALSE, un seul couple est calculé, de 'src_Pau' vers 'dst_Agen'.

Les stables peuvent être supprimés de la table de résultats en spécifiant stable = FALSE. Si TRUE, les stables seront repérables avec les valeurs de durée et de distance à 0.

Lorsque faceAFace = FALSE, les arguments rayonMax, nbDstVolOiseau, nbDstMeasure et optiMeasure permettent de filtrer les résultats selon la structure des src et dst.

rayonMax et nbDstVolOiseau permettent de filtrer en amont les couples src->dst pour éviter des calculs vers le serveur inutiles et chronophages.

nbDstMeasure et optiMeasure permettent de filtrer les résultats après le requêtage au serveur. Ne réduit donc pas les temps de calcul.

Si faceAFace = TRUE, les arguments allerRetour, rayonMax, nbDstVolOiseau, nbDstMeasure et optiMeasure sont ignorés.

Si le filtre rayonMax est utilisé (si rayonMax > 0), alors il est indispensable de préciser l'emprise de la zone couverte par les coordonnées. Par défaut, l'emprise correspond à la France métropolitaine et ses régions transfrontalières (emprise = "FRM"). Le système de coordonnées projetées, utilisé alors pour effectuer les calculs de distances à vol d'oiseau, est le Lambert93 (EPSG 2154). Pour les DOM, il faut préciser le code départemantal du DOM ("971","972","973","974" ou "976"). Pour information, les codes EPSG en vigueur dans les DOM sont 5490 pour la Guadeloupe et la Martinique, 2972 pour la Guyane, 2975 pour la Réunion et 4471 pour Mayotte. Pour toutes autres zones, il faut alors préciser emprise = "999". Dans ce cas, la projection Mercator sera utilisée (EPSG 3395).

Pour des besoins spécifiques, il est possible d’exclure un type de routes parmi les autoroutes, les péages ou les ferries( ferries +bacs). Ces routes seront alors exclues des calculs de trajets. Il est recommandé de toujours exclure les lignes de ferries présentes dans les données OpenStreetMap (option exclude="ferry") pour limiter le champ aux trajets strictement par la route en voiture ; éviter les calculs entre îles et continent typiquement. Les données OSM assimilent les bacs maritimes (bacs de Seine par exemple) et fluviaux à des lignes « classiques » de ferries. Mais la complétude et la qualité des données OSM en termes de liaisons maritimes et autres bacs de liaison ne sont pas garanties. Par ailleurs l’absence de données d’horaires de traversée fait que le temps de trajet est calculé sans attente (et sans temps de chargement/déchargement).

Examples

# Specification d'un serveur osrm obligatoire pour executer les exemples
options(osrm.server = "https://metric-osrm-backend.lab.sspcloud.fr/")

# Specification du profil
options(osrm.profile = "driving")

# Construction des sources et des destinations.
sources <-  data.frame(id = c("A","B","C"),
                       lon = c(4.92,4.86,4.72),
                       lat = c(46.15,46.08,45.92),
                       stringsAsFactors = FALSE)

destinations <-data.frame(id = c("B","C","D"),
                          lon = c(4.86,4.72,4.67),
                          lat = c(46.08,45.92,45.83),
                          stringsAsFactors = FALSE)

# 3 couples de points calcules en face a face.
metricOsrmTable(src = sources,
                dst = destinations,
                exclude = "ferry", # option recommandée
                faceAFace = TRUE) # par defaut
#>   ID idSrc  lonSrc   latSrc idDst  lonDst   latDst duree distance
#> 1  1     A 4.92093 46.15037     B 4.85602 46.08586 17.88   14.517
#> 2  2     B 4.85602 46.08586     C 4.71990 45.92029 32.40   34.119
#> 3  3     C 4.71990 45.92029     D 4.67000 45.83008 19.54   14.606

# 3 couples de points calcules selon le produit cartesien.
metricOsrmTable(src = sources,
                dst = destinations,
                exclude = "ferry", # option recommandée
                faceAFace = FALSE)
#>   ID idSrc  lonSrc   latSrc idDst  lonDst   latDst duree distance
#> 1  1     A 4.92093 46.15037     B 4.85602 46.08586 17.88   14.517
#> 2  2     A 4.92093 46.15037     C 4.71990 45.92029 39.95   35.837
#> 3  3     A 4.92093 46.15037     D 4.67000 45.83008 53.16   54.997
#> 4  4     B 4.85602 46.08586     C 4.71990 45.92029 32.40   34.119
#> 5  5     B 4.85602 46.08586     D 4.67000 45.83008 42.17   49.850
#> 6  6     C 4.71990 45.92029     B 4.85602 46.08586 33.78   34.746
#> 7  7     C 4.71990 45.92029     D 4.67000 45.83008 19.54   14.606

# 3 couples de points calcules selon le produit cartesien
# et avec les stables conserves.
metricOsrmTable(src = sources,
                dst = destinations,
                exclude = "ferry", # option recommandée
                faceAFace = FALSE,
                stable = TRUE)
#>   ID idSrc  lonSrc   latSrc idDst  lonDst   latDst duree distance
#> 1  1     A 4.92093 46.15037     B 4.85602 46.08586 17.88   14.517
#> 2  2     A 4.92093 46.15037     C 4.71990 45.92029 39.95   35.837
#> 3  3     A 4.92093 46.15037     D 4.67000 45.83008 53.16   54.997
#> 4  4     B 4.85602 46.08586     B 4.85602 46.08586  0.00    0.000
#> 5  5     B 4.85602 46.08586     C 4.71990 45.92029 32.40   34.119
#> 6  6     B 4.85602 46.08586     D 4.67000 45.83008 42.17   49.850
#> 7  7     C 4.71990 45.92029     B 4.85602 46.08586 33.78   34.746
#> 8  8     C 4.71990 45.92029     C 4.71990 45.92029  0.00    0.000
#> 9  9     C 4.71990 45.92029     D 4.67000 45.83008 19.54   14.606

# 3 couples de points calcules selon le produit cartesien,
# sans les stables et sans aller-retour.
metricOsrmTable(src = sources,
                dst = destinations,
                faceAFace = FALSE,
               exclude = "ferry", # option recommandée
                stable = FALSE,
                allerRetour = FALSE)
#>   ID idSrc  lonSrc   latSrc idDst  lonDst   latDst duree distance
#> 1  1     A 4.92093 46.15037     B 4.85602 46.08586 17.88   14.517
#> 2  2     A 4.92093 46.15037     C 4.71990 45.92029 39.95   35.837
#> 3  3     A 4.92093 46.15037     D 4.67000 45.83008 53.16   54.997
#> 4  4     B 4.85602 46.08586     C 4.71990 45.92029 32.40   34.119
#> 5  5     B 4.85602 46.08586     D 4.67000 45.83008 42.17   49.850
#> 6  6     C 4.71990 45.92029     D 4.67000 45.83008 19.54   14.606

### Utilisation des filtres

# Construction des sources et des destinations.
sources <-  data.frame(id = c("C1","C2","C3"),
                       lon = c(4.92,4.86,4.72),
                       lat = c(46.15,46.08,45.92),
                       stringsAsFactors = FALSE)

destinations <-data.frame(id = c("E1","E2","E3"),
                          lon = c(4.63,4.75,4.67),
                          lat = c(45.95,45.88,45.83),
                          stringsAsFactors = FALSE)

## Les sources et les destinations ne sont pas de meme nature.
## Par exemple, les sources peuvent etre des carreaux
## et les destinations des equipements.

# On selectionne n dst situees a moins de 40km a vol d'oiseau de chaque src.
metricOsrmTable(src = sources,
                dst = destinations,
                exclude = "ferry",
                faceAFace = FALSE,
                stable = TRUE,
                rayonMax = 40,
                emprise = "FRM")
#>   ID idSrc  lonSrc   latSrc idDst  lonDst   latDst duree distance
#> 1  1    C1 4.92093 46.15037    E1 4.62993 45.95002 48.30   40.259
#> 2  2    C1 4.92093 46.15037    E2 4.74855 45.87960 45.95   41.657
#> 3  3    C2 4.85602 46.08586    E1 4.62993 45.95002 39.55   33.431
#> 4  4    C2 4.85602 46.08586    E2 4.74855 45.87960 36.87   39.029
#> 5  5    C2 4.85602 46.08586    E3 4.67000 45.83008 42.17   49.850
#> 6  6    C3 4.71990 45.92029    E2 4.74855 45.87960 12.72    9.670
#> 7  7    C3 4.71990 45.92029    E1 4.62993 45.95002 18.60   10.816
#> 8  8    C3 4.71990 45.92029    E3 4.67000 45.83008 19.54   14.606
# Les distances calculees par la route peuvent etre superieures a 40km :
# le trajet par la route est forcement plus long en distance qu'a vol d'oiseau.

# On selectionne n dst situees a moins de 40km a vol d'oiseau de chaque src
# puis la plus proche parmi celles-ci.
metricOsrmTable(src = sources,
                dst = destinations,
                faceAFace = FALSE,
                exclude = "ferry",
                stable = TRUE,
                rayonMax = 40,
                nbDstVolOiseau = 1,
                emprise = "FRM")
#>   ID idSrc  lonSrc   latSrc idDst  lonDst   latDst duree distance
#> 1  1    C1 4.92093 46.15037    E1 4.62993 45.95002 48.30   40.259
#> 2  2    C2 4.85602 46.08586    E1 4.62993 45.95002 39.55   33.431
#> 3  3    C3 4.71990 45.92029    E2 4.74855 45.87960 12.72    9.670
# Les stables, s'il y en a, doivent etre conserves
# car src et dst ne sont pas de meme nature.

# On selectionne n dst situees a moins de 40km a vol d'oiseau de chaque src
# puis les 2 dst les plus proches parmi celles-ci.
metricOsrmTable(src = sources,
                dst = destinations,
                faceAFace = FALSE,
                exclude = "ferry",
                stable = TRUE,
                rayonMax = 40,
                nbDstVolOiseau = 2,
                emprise = "FRM")
#>   ID idSrc  lonSrc   latSrc idDst  lonDst   latDst duree distance
#> 1  1    C1 4.92093 46.15037    E1 4.62993 45.95002 48.30   40.259
#> 2  2    C1 4.92093 46.15037    E2 4.74855 45.87960 45.95   41.657
#> 3  3    C2 4.85602 46.08586    E1 4.62993 45.95002 39.55   33.431
#> 4  4    C2 4.85602 46.08586    E2 4.74855 45.87960 36.87   39.029
#> 5  5    C3 4.71990 45.92029    E2 4.74855 45.87960 12.72    9.670
#> 6  6    C3 4.71990 45.92029    E1 4.62993 45.95002 18.60   10.816

# On selectionne n dst situees a moins de 40km a vol d'oiseau de chaque src
# puis les 2 dst les plus proches parmi celles-ci.
# Enfin, on conserve uniquement 1 dst la plus proche en temps de parcours par la route.
metricOsrmTable(src = sources,
                dst = destinations,
                faceAFace = FALSE,
                exclude = "ferry",
                stable = TRUE,
                rayonMax = 40,
                nbDstVolOiseau = 2,
                nbDstMeasure = 1,
                optiMeasure = "duree",
                emprise = "FRM")
#>   ID idSrc  lonSrc   latSrc idDst  lonDst  latDst duree distance
#> 1  1    C1 4.92093 46.15037    E2 4.74855 45.8796 45.95   41.657
#> 2  2    C2 4.85602 46.08586    E2 4.74855 45.8796 36.87   39.029
#> 3  3    C3 4.71990 45.92029    E2 4.74855 45.8796 12.72    9.670