A API Distance Matrix da Google possibilita aos usuários determinar o melhor trajeto possível, levando em consideração a distancia e o tempo de viagem entre vários pontos de origens e vários pontos de destino. Além das informações de tempo e distância, também é possível determinar vários outros paramentos relevantes, como, meio de transporte (carro, bicicleta, caminhada, transporte público), horário de início e término do trajeto, previsão de tráfego e muito mais.
Formatos e parâmetros de solicitação da API Distance Matrix
A solicitação da API Distance Matrix possui a seguinte configuração:
https://maps.googleapis.com/maps/api/distancematrix/outputFormat?parameters
No outputFormat (formato de saída) podem ser usados os padrões JSON ou XML, sendo que o padrão JSON é o mais recomendado.
Dentro de parameters (parâmetros), temos aqueles que são obrigatórios, tais como: origins (pontos de origens), destinations (pontos de destino) e key (chave API). Para saber como adquirir uma chave API veja o vídeo Google Maps API no Excel.
Em parâmetros que são do tipo opcionais, temos: mode (modos de viagem, ex. carro, bicicleta, caminhada, transporte público), language (idioma), avoid (especifica restrições de tráfego a serem evitados), e mais.
Para conhecer mais sobre cada um dos formatos de saída e dos paramentos de solicitação, quando e como utilizar cada um, acesse a parte de documentação disponibilizado pela Google no link Documentação Distance Matrix API.
Exemplo de saída no padrão JSON para dois pontos de Origem (São Luís, PA, Brasil e Belém, PA, Brasil) e um ponto de destino (Marabá, PA, Brasil)
{ "destination_addresses" : [ "Marabá - PA, Brasil" ], "origin_addresses" : [ "Belém - PA, Brasil", "São Luís - Vila Maranhão, São Luís - MA, Brasil" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "553 km", "value" : 553036 }, "duration" : { "text" : "9 horas 29 minutos", "value" : 34118 }, "status" : "OK" } ] }, { "elements" : [ { "distance" : { "text" : "808 km", "value" : 807691 }, "duration" : { "text" : "13 horas 41 minutos", "value" : 49236 }, "status" : "OK" } ] } ], "status" : "OK" }
Exemplo de saída no padrão XML para dois pontos de Origem (São Luís, PA, Brasil e Belém, PA, Brasil) e um ponto de destino (Marabá, PA, Brasil)
"<?xml version=""1.0"" encoding=""UTF-8""?> <DistanceMatrixResponse> <status>OK</status> <origin_address>Belém - State of Pará, Brazil</origin_address> <origin_address>São Luís - Vila Maranhão, São Luís - State of Maranhão, Brazil</origin_address> <destination_address>Marabá - State of Pará, Brazil</destination_address> <row> <element> <status>OK</status> <duration> <value>34118</value> <text>9 hours 29 mins</text> </duration> <distance> <value>553036</value> <text>553 km</text> </distance> </element> </row> <row> <element> <status>OK</status> <duration> <value>49236</value> <text>13 hours 41 mins</text> </duration> <distance> <value>807691</value> <text>808 km</text> </distance> </element> </row> </DistanceMatrixResponse> "
Caso 1: Múltiplos pontos de Origem
Nesse primeiro caso prático, iremos calcular a distancia e tempo de viagem levando em consideração vários pontos de origem e um único ponto de destino.
Para realizarmos a chamada API, iremos utilizar a seguinte URL de solicitação dentro da Célula E6 do Excel, conforme código e imagem abaixo:
="https://maps.googleapis.com/maps/api/distancematrix/xml?&origins=" & D12 & "|" & D13 & "|" & D14 & "|" & D15 & "|" & D16 & "&destinations=" & E8 & "&key=" & $C$4 Resultado https://maps.googleapis.com/maps/api/distancematrix/xml?&origins=Belém, PA, Brasil|Marabá, PA, Brasil|Imperatriz, MA, Brasil|Tucuruí, PA, Brasil|São Luís, MA, Brasil&destinations=Paragominas, PA, Brasil&key=AIzaSyAuPl-3pzpG_MdAq-JMIx-KTeWFHxxanvU
Em seguida, levamos o XML para dentro do Excel usando a função WEBSERVICE (SERVICOWEB). Escrevemos essa função dentro da célula F6.
"<?xml version=""1.0"" encoding=""UTF-8""?> <DistanceMatrixResponse> <status>OK</status> <origin_address>Belém - State of Pará, Brazil</origin_address> <origin_address>Marabá - State of Pará, Brazil</origin_address> <origin_address>Imperatriz - Camaçari, Imperatriz - State of Maranhão, Brazil</origin_address> <origin_address>Tucuruí, State of Pará, Brazil</origin_address> <origin_address>São Luís - Vila Maranhão, São Luís - State of Maranhão, Brazil</origin_address> <destination_address>Paragominas, PA, Brazil</destination_address> <row> <element> <status>OK</status> <duration> <value>17737</value> <text>4 hours 56 mins</text> </duration> <distance> <value>307895</value> <text>308 km</text> </distance> </element> </row> <row> <element> <status>OK</status> <duration> <value>20120</value> <text>5 hours 35 mins</text> </duration> <distance> <value>392885</value> <text>393 km</text> </distance> </element> </row> <row> <element> <status>OK</status> <duration> <value>16685</value> <text>4 hours 38 mins</text> </duration> <distance> <value>305329</value> <text>305 km</text> </distance> </element> </row> <row> <element> <status>OK</status> <duration> <value>31837</value> <text>8 hours 51 mins</text> </duration> <distance> <value>453076</value> <text>453 km</text> </distance> </element> </row> <row> <element> <status>OK</status> <duration> <value>39529</value> <text>10 hours 59 mins</text> </duration> <distance> <value>654550</value> <text>655 km</text> </distance> </element> </row> </DistanceMatrixResponse> "
Agora, utilizamos a função FILTERXML ( FILTROXML) do Excel indicando o xPath desejado. Dividimos por 1000 para obter os valores em km.
Fazemos a mesma operação para obtenção do tempo de viagem, com a diferença que nesse caso o xPath muda, ficando da seguinte forma: DistanceMatrixResponse/row/element/duration/text.
Podemos agora, facilmente determinar quais pontos possuem a menor distancia e o menor tempo de viagem. O ponto Origem 3 (Imperatriz, MA, Brasil) para Destino (Paragominas, PA, Brasil) possuem a menor distancia e o menor tempo de distancia. Portanto é o melhor trajeto a ser realizado. Levando isso para nosso mapa temos o seguinte esquema.
Caso 2: Múltiplos pontos de Destino
Nesse segundo caso prático, iremos calcular a distancia e tempo de viagem levando em consideração um único ponto de origem e vários pontos de destino.
Para realizarmos a chamada API, iremos utilizar a seguinte URL de solicitação dentro da Célula E6 do Excel, conforme código e imagem abaixo:
="https://maps.googleapis.com/maps/api/distancematrix/xml?&origins=" & E8 & "&destinations=" & D12 & "|" & D13 & "|" & D14 & "|" & D15 & "|" & D16 & "&key=" & $C$4 Resultado https://maps.googleapis.com/maps/api/distancematrix/xml?&origins=São Geraldo do Araguaia, MA, Brasil&destinations=Araguaína, Tocantins, Brazil|Parauapebas, PA, Brasil|Canaã dos Carajás, PA, Brasil|Açailandia, MA, Brasil|Porto Franco, MA, Brasil&key=AIzaSyAuPl-3pzpG_MdAq-JMIx-KTeWFHxxanvU
Em seguida, levamos o XML para dentro do Excel usando a função WEBSERVICE (SERVICOWEB). Escrevemos essa função dentro da célula F6.
"<?xml version=""1.0"" encoding=""UTF-8""?> <DistanceMatrixResponse> <status>OK</status> <origin_address>São Geraldo do Araguaia, State of Pará, 68570-000, Brazil</origin_address> <destination_address>Araguaína, State of Tocantins, Brazil</destination_address> <destination_address>Parauapebas, PA, 68515-000, Brazil</destination_address> <destination_address>Canaã dos Carajás, PA, 68537-000, Brazil</destination_address> <destination_address>Açailândia - State of Maranhão, Brazil</destination_address> <destination_address>Porto Franco, MA, 65970-000, Brazil</destination_address> <row> <element> <status>OK</status> <duration> <value>8491</value> <text>2 hours 22 mins</text> </duration> <distance> <value>143632</value> <text>144 km</text> </distance> </element> <element> <status>OK</status> <duration> <value>16065</value> <text>4 hours 28 mins</text> </duration> <distance> <value>186129</value> <text>186 km</text> </distance> </element> <element> <status>OK</status> <duration> <value>16675</value> <text>4 hours 38 mins</text> </duration> <distance> <value>185918</value> <text>186 km</text> </distance> </element> <element> <status>OK</status> <duration> <value>19391</value> <text>5 hours 23 mins</text> </duration> <distance> <value>294925</value> <text>295 km</text> </distance> </element> <element> <status>OK</status> <duration> <value>11425</value> <text>3 hours 10 mins</text> </duration> <distance> <value>196191</value> <text>196 km</text> </distance> </element> </row> </DistanceMatrixResponse> "
Agora, utilizamos a função FILTERXML ( FILTROXML) do Excel indicando o xPath desejado. Dividimos por 1000 para obter os valores em km.
Fazemos a mesma operação para obtenção do tempo de viagem, com a diferença que nesse caso o xPath muda, ficando da seguinte forma: DistanceMatrixResponse/row/element/duration/text.
Podemos agora, facilmente determinar quais pontos possuem a menor distancia e o menor tempo de viagem. O ponto Origem (São Geraldo do Araguaia, MA, Brasil) para Destino 5 (Araguaína, PA, Brasil) possuem a menor distancia e o menor tempo de distancia. Portanto é o melhor trajeto a ser realizado. Levando isso para nosso mapa temos o seguinte esquema.
Caso 3: Múltiplos pontos de Origem e Destino
Nesse terceiro caso prático, iremos calcular a distancia e tempo de viagem levando em consideração vários pontos de origem e vários pontos de destino.
Para realizarmos a chamada API, iremos utilizar a seguinte URL de solicitação dentro da Célula E6 do Excel, conforme código e imagem abaixo:
="https://maps.googleapis.com/maps/api/distancematrix/xml?&origins=" & D12 & "|" & D13 & "&destinations=" & D14 & "|" & D15 & "&key=" & $C$4 Resultado https://maps.googleapis.com/maps/api/distancematrix/xml?&origins=Cametá, PA, Brasil|Abaetetuba, PA, Brasil&destinations=Tailândia, PA, Brasil|Tucuruí, PA, Brasil&key=AIzaSyAuPl-3pzpG_MdAq-JMIx-KTeWFHxxanvU
Em seguida, levamos o XML para dentro do Excel usando a função WEBSERVICE (SERVICOWEB). Escrevemos essa função dentro da célula F6.
"<?xml version=""1.0"" encoding=""UTF-8""?> <DistanceMatrixResponse> <status>OK</status> <origin_address>Cametá, State of Pará, 68400-000, Brazil</origin_address> <origin_address>Abaetetuba, PA, 68440-000, Brazil</origin_address> <destination_address>Tailândia, PA, 68695-000, Brazil</destination_address> <destination_address>Tucuruí, State of Pará, Brazil</destination_address> <row> <element> <status>OK</status> <duration> <value>19764</value> <text>5 hours 29 mins</text> </duration> <distance> <value>265395</value> <text>265 km</text> </distance> </element> <element> <status>OK</status> <duration> <value>14114</value> <text>3 hours 55 mins</text> </duration> <distance> <value>207822</value> <text>208 km</text> </distance> </element> </row> <row> <element> <status>OK</status> <duration> <value>9855</value> <text>2 hours 44 mins</text> </duration> <distance> <value>158790</value> <text>159 km</text> </distance> </element> <element> <status>OK</status> <duration> <value>21421</value> <text>5 hours 57 mins</text> </duration> <distance> <value>348065</value> <text>348 km</text> </distance> </element> </row> </DistanceMatrixResponse> "
Para melhor visualizar os dados e interpretar as informações de origem e destino de todos os pontos envolvidos, desenhamos a seguinte tabela.
Agora, utilizamos a função FILTERXML ( FILTROXML) do Excel indicando o xPath desejado. Dividimos por 1000 para obter os valores em km.
Fazemos a mesma operação para obtenção do tempo de viagem, com a diferença que nesse caso o xPath muda, ficando da seguinte forma: DistanceMatrixResponse/row/element/duration/text.
Podemos agora, facilmente determinar quais pontos possuem a menor distancia e o menor tempo de viagem. Os pontos Origem 1 (Cametá, PA, Brasil) para Destino 2(Tucuruí, PA, Brasil) e os pontos Origem 2 (Abaetetuba, PA, Brasil) para Destino 1 (Tailândia, PA, Brasil) possuem a menor distancia e o menor tempo de distancia. Portanto são os melhores trajetos a serem realizados. Levando isso para nosso mapa temos o seguinte esquema.