TAS:Pokročilé/Pluginy/SolverTech.Tasha.Plugins.Distances.HERE - Router

Z Solvertech
Verze z 10. 8. 2022, 08:44, kterou vytvořil Jana.safferova (diskuse | příspěvky) (Tato verze je označená pro překlad)
Skočit na navigaci Skočit na vyhledávání
Jiné jazyky:

Plugin pro výpočet matice a trasy s využitím služeb HERE

Instalace

Automaticky ve výchozí instalaci. K manuální instalaci je potřeba nainstalovat tři soubory do složky Plugins:

SolverTech.Distances.HERE.dll (samostatný router)

SolverTech.Tasha.Plugins.Distances.HERE.dll (plugin pro Tashu využívající router)

SolverTech.Tasha.Plugins.Distances.HERE.config (nastavení pluginu, viz níže)

Přihlášení k HERE

Plugin využívá služeb HERE, je tedy nutné vyplnit Api Key (Tasha-Nastavení->HERE->Api Key)

Legacy HERE účty

Starší účty, které ještě nebyly převedeny na novou autorizaci pomocí jediného Api Key a využívají k přihlášení dvojici App ID/App Code (Tasha-Nastavení->HERE->App ID, App Code), je možné stále použít, je ale třeba změnit URL pro matici a trasu v nastavení:

<Matrix><BaseUrl>https://matrix.route.api.here.com</BaseUrl></Matrix> … <Route><BaseUrl>https://route.api.here.com</BaseUrl></Route>

HERE API verze 8

Novější verze HERE (v8) je zpětně kompatibilní se stávající konfigurací. APIv8 nabízí přesnější a rychlejší výpočty, ale některé funkce nejsou plně implementovány (např. ExcludeCountries), proto je ve výchozím stavu vypnuta a používá se stále v7. Pro přepnutí na výpočet pomocí APIv8 je nutné povolit Enable v ApiV8Settings na true:

<ApiV8Settings>

 <Enable>true</Enable>
 <V8MatrixURL><https://matrix.router.hereapi.com/v8/matrix</V8MatrixURL>
 <V8RouteURL><https://router.hereapi.com/v8/routes</V8RouteURL>

</ApiV8Settings>

Jednotky pro váhu a rozměry u trucků

APIv7, ze kterého vychází i konfigurace pluginu, využívá pro jednotku hmotnost tuny a pro rozměry metry. V rámci zachování zpětné kompatibility se tedy vždy počítá s tím, že v konfiguraci jsou jednotky zadavány jako float číslo udávající tuny/metry a dojde-li ke změně formátu ze strany HERE (jako např. při přechodu na APIv8), plugin si konverzi provede vnitřně, bez zásahu a vědomí uživatele.

Mýtné

  • APIv8 zatím nepodporuje upřesnění parametrů pro správný výpočet mýtného, proto se pro výpočet mýta stále používá verze 7.

Konfigurace

Globální

Parametr Typ Význam
PersistentRoutes bool Uloží již jednou vypočtené RouteID a WKT tras do samostatného souboru <Scenario>.routes. Mnohonásobně zrychluje opakované zobrazení trasy na mapě za cenu velikosti DB.
CrowFlyFirst bool Pro případy, kdy je důležitější mít výsledky okamžitě, je možné spočítat vzdálenosti vzdušnou čarou, dle hodnot pro konkrétní typ vozdila, viz parametry DistanceCoefficient a ApproxSpeedInKilometersPerHour. Přesné hodnoty se pak počítají na pozadí.

Sanity check

Pro každou vypočtenou distanci se spočítá crowfly a liší-li se výrazně tyto hodnoty, vyskočí upozornění. Adresy dotčených míst lze vyčíst z logu.

Parametr Typ Význam
Enable bool Povolit sanity check
MaxMultipleDifference float Liší-li se crowfly o tento násobek oproti vypočtené distanci, vyskočí varování. Defaultní hodnota: 10.0
MinimumDistanceInMeters int Ignoruj kontrolu, je-li vzdálenost menší než nastavená hodnota (V metrech). Defaultní hodnota 1000.

Matice vzdálenosti

Parametr Typ Význam
SearchRange int Omezení okruhu oblasti, ve které lze hledat trasu. Nižší číslo urychluje výpočet, ale může mít za následek suboptimální řešení. V metrech.
UseDynamicRange bool Stejný význam jako SearchRange, jen se hodnota pro SearchRange vypočítá dynamicky, dle vzdálenosti dvou nejvzdálenějších bodů v matici. Při použití UseDynamicRange nesmí být SearchRange vyplněný
SearchRangeDistanceCoefficient float Koeficient pro vynásobení vzdálenosti dvou nevzdálenějších bodů v matici pro vypočtení SearchRange při užití UseDynamicRange. Musí být větší než 1. Typicky 1.5-2.0
AllowedTimeRangeInMinutes int Povolené časové okno.
EnableLastMileComputing bool Zohlední vzdálenosti a času tzv. poslední míle - úseku, který musí překonat jiným způsobem (pěšky, s vozíkem) mezi posledním navigačním bodem (silnice před zákazem vjezdu) a zadanou adresou (vchodem objektu). Je třeba nastavit “LastMileSpeedInMetersPerSecond”
LastMileSpeedInMetersPerSecond float Rychlost v m/s, pro výpočet času stráveného přesunem na poslední míli
LastMileRadiusInMeters int Maximální rádius okolo zadaného místa v metrech, ve kterém se bude provádět reverse geokóding k určení navigačního místa.
UseCrowFlyCalculation bool Vždy vrátí vzdálenost a čas. Nenajde-li trasu, vypočítá hodnoty
UseCarIfTruckNotFound bool Nenajde-li trasu pro truck, použij hodnoty času a vzdálenosti jako by šlo o auto
CrowFlyDistanceCoefficient float Koeficient, kterým se vynásobí přímá vzdálenost mezi dvěmi body, při užití UseCrowFlyCalculation
CrowFlyFirst bool

Vypočte nejdříve vzdálenosti přes crowfly a poté dopočítává vzdálenosti.

Pokud používáme je nutné mít i vydefinované parametry v “<Vehicle>” (DistanceCoefficient a CrowflyApproxSpeedInKilometersPerHour)

CrowFlyApproxSpeedInKilometersPerHour float Rychlost v km/h pro určení doby při užití UseCrowFlyCalculation
MinColumnCountInMtoNDistanceMatrixAPIRequest int Snižuje velikost požadavku na HERE servery, z optimalizačních důvodů. Optimální hodnota se hledá empiricky, může se časem změnit. Možný rozsah hodnot 10-100. Defaultní hodnota:15
NavigateCloserNumberOfSteps int

Nenajde-li router trasu např. kvůli tomu, že je cílová adresa v zákazu vjezdu, přesune navigační bod blíže k startovní pozici a zopakuje požadavek. Určuje počet opakování tohoto procesu, než najde trasu nebo proces vzdá a přejde k dalšímu kroku (výpočet přes crowfly, je-li povolen). Pro vypnutí funkcionality je nutné zadat '0'.

Defaultní hodnota: 0 (vypnuto)

NavigateCloserStepInMeters int

Vzdálenost v metrech, o kterou se posune navigační bod, viz parametr ‘NavigateCloserNumberOfSteps’.

Výchozí hodnota: 20

Zbylé parametry jsou definované ze strany HERE a jsou popsané na https://developer.here.com/documentation/routing/dev_guide/topics/resource-calculate-matrix.html

Large scale matrix

Pro výpočet velkých matic, kdy klasický způsob výpočtu trvá dlouho, je možné použít výpočet pomocí Large Scale Matrix API (dále jen LSM). Pomocí LSM lze vypočítat obrovské matice (10 000 x 10 000) v řádu několika minut. Omezení:

  1. LSM lze použít pouze na HERE účtech s plánem “Managed Assets with Optimization”, které používají OAuth autorizaci (v nastavení Tashi mají vyplněné HERE údaje “Access Key ID” a “Key Secret”)
  2. Prozatím nelze použít predikci dopravní situace
  3. Sebemenší požadavek se počítá minimálně jako 100 000 transakcí, u plánů, kde se platí za každou transakci je vhodné používát LSM u scénářů, kde je minimálně 317 míst (317x317 > 100 000 transakcí). Případně omezit minimální počet požadavků pomocí parametru MinElementsForLargeScaleMatrix.
Parametr Typ Význam
EnableLargeScaleMatrix bool

Umožní pro určité matice výpočet pomocí LSM.

Výchozí hodnota: false

MinElementsForLargeScaleMatrix int Obsahuje-li požadavek méně než zadaný počet elementů, matice se nebude počítat pomocí LSM.

Výchozí hodnota: 1500

LargeScaleMatrixURL string

URL pro LSM API, pro případ, kdyby se v budoucnu změnila

Výchozí hodnota: https://largescalematrix.router.hereapi.com/v1/matrix

Příklad konfigurace

<?xml version="1.0" encoding="utf-8"?> <DistancesHERESettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

 <PersistentRoutes>true</PersistentRoutes>
 <SanityCheck>
   <Enable>true</Enable>
   <MaxMultipleDifference>5.0</MaxMultipleDifference>

<MinimumDistanceInMeters>1000</MinimumDistanceInMeters>

 </SanityCheck>
 <Matrix>
   <BaseUrl>https://matrix.route.ls.hereapi.com</BaseUrl>
   <Path>/routing/7.2</Path>
   <Resource>/calculatematrix</Resource>
   <Format>.json</Format>
   <Parameters>
     <Parameter>
       <Name>searchRange</Name>
       <Value>1000000</Value>
     </Parameter>
     <Parameter>
       <Name>matrixAttributes</Name>
       <Value>none,su</Value>
     </Parameter>
     <Parameter>
       <Name>summaryAttributes</Name>
       <Value>none,tt,di</Value>
     </Parameter>
     <Parameter>
       <Name>AllowedTimeRangeInMinutes</Name>
       <Value>60</Value>
     </Parameter>
     <Parameter>
       <Name>EnableLastMileComputing</Name>
       <Value>true</Value>
     </Parameter>  
     <Parameter>
       <Name>NavigateCloserNumberOfSteps</Name>
       <Value>3</Value>
     </Parameter>
     <Parameter>
       <Name>NavigateCloserStepInMeters</Name>
       <Value>20</Value>
     </Parameter>
     <Parameter>

<Name>EnableLargeScaleMatrix</Name> <Value>false</Value> </Parameter> <Parameter> <Name>MinElementsForLargeScaleMatrix</Name> <Value>1500</Value> </Parameter> <Parameter> <Name>LargeScaleMatrixURL</Name> <Value>https://largescalematrix.router.hereapi.com/v1/matrix</Value> </Parameter> <Parameter>

     <Name>CrowFlyFirst</Name>
      <Value>true</Value>
     </Parameter>
   </Parameters>
 </Matrix>
 <Route>
   <BaseUrl>https://route.ls.hereapi.com</BaseUrl>
   <Parameters>
     <Parameter>
       <Name>representation</Name>
       <Value>overview</Value>
     </Parameter>
     <Parameter>
       <Name>routeAttributes</Name>
       <Value>none,sm,sh</Value>
     </Parameter>
     <Parameter>
       <Name>alternatives</Name>
       <Value>9</Value>
     </Parameter>
     <Parameter>
       <Name>language</Name>
       <Value>cs-cz</Value>
     </Parameter>
   </Parameters>
 </Route>
 <Vehicle>
   <ArrayOfParameter>
     <Parameter>
       <Name>mode</Name>
       <Value>fastest;car;traffic:enabled</Value>
     </Parameter>
     <Parameter>
       <Name>DistanceCoefficient</Name>
       <Value>2.0</Value>
     </Parameter>
     <Parameter>
        <Name>CrowflyApproxSpeedInKilometersPerHour</Name>
        <Value>60.0</Value>
     </Parameter>
   </ArrayOfParameter>
 </Vehicle>
</DistancesHERESettings>