title: Calculating a 2d distance matrix from a Google DistanceMatrix response in Java
body: <p>I am trying to solve the Travelling Salesman Problem and Vehicle routing problem with the Google Or tools library, in the tutorial found <a href="https://developers.google.com/optimization/routing/tsp" rel="nofollow noreferrer">here</a>, they use a distance Matrix <code>whose i, j</code> entry is the distance from location i to location j in miles, where the locations are given in the order below:</p>
  
  <ol>
  <li>New York 1. Los Angeles 2. Chicago 3. Minneapolis 4. Denver 5. Dallas 6. Seattle 7. Boston 8. San Francisco 9. St. Louis 10. Houston 11. Phoenix 12. Salt Lake City</li>
  </ol>
  
  <p>And their matrix distance looks like:</p>
  
  <pre><code>  public final long[][] distanceMatrix = {
        {0, 2451, 713, 1018, 1631, 1374, 2408, 213, 2571, 875, 1420, 2145, 1972},
        {2451, 0, 1745, 1524, 831, 1240, 959, 2596, 403, 1589, 1374, 357, 579},
        {713, 1745, 0, 355, 920, 803, 1737, 851, 1858, 262, 940, 1453, 1260},
        {1018, 1524, 355, 0, 700, 862, 1395, 1123, 1584, 466, 1056, 1280, 987},
        {1631, 831, 920, 700, 0, 663, 1021, 1769, 949, 796, 879, 586, 371},
        {1374, 1240, 803, 862, 663, 0, 1681, 1551, 1765, 547, 225, 887, 999},
        {2408, 959, 1737, 1395, 1021, 1681, 0, 2493, 678, 1724, 1891, 1114, 701},
        {213, 2596, 851, 1123, 1769, 1551, 2493, 0, 2699, 1038, 1605, 2300, 2099},
        {2571, 403, 1858, 1584, 949, 1765, 678, 2699, 0, 1744, 1645, 653, 600},
        {875, 1589, 262, 466, 796, 547, 1724, 1038, 1744, 0, 679, 1272, 1162},
        {1420, 1374, 940, 1056, 879, 225, 1891, 1605, 1645, 679, 0, 1017, 1200},
        {2145, 357, 1453, 1280, 586, 887, 1114, 2300, 653, 1272, 1017, 0, 504},
        {1972, 579, 1260, 987, 371, 999, 701, 2099, 600, 1162, 1200, 504, 0},
    };
  
  </code></pre>
  
  <p>They further provide a <a href="https://developers.google.com/optimization/routing/vrp#distance_matrix_api" rel="nofollow noreferrer">tutorial</a> on how to create a distance matrix dynamically except it is in <code>Python</code> and I am a not very good in it, I am using <code>Java</code>.</p>
  
  <p>In my Java <code>implementation</code> I am using the <code>Java Client</code> and my code looks like</p>
  
  <pre><code>private static long[][] buildDistanceMatrix(int matrixSize, DistanceMatrix distanceMatrix) {
          long[][] matrix = new long[matrixSize][matrixSize];
          for (int i = 0; i &lt; distanceMatrix.rows.length; i++) {
              DistanceMatrixElement[] elements = distanceMatrix.rows[i].elements;
              for (int j = 0; j &lt; elements.length; j++) {
                      matrix[i][j] = elements[j].distance.inMeters;
              }
          }
          return matrix;
      }
  
  
      public static void getDistanceMatrix(List&lt;LatLng&gt; origins, List&lt;LatLng&gt; destinations){
          GeoApiContext context = new GeoApiContext.Builder()
                  .apiKey(GOOGLE_MAPS_API_KEY)
                  .build();
          DistanceMatrixApiRequest distanceMatrixApiRequest = DistanceMatrixApi.newRequest(context)
                  .mode(TravelMode.DRIVING)
                  .trafficModel(TrafficModel.BEST_GUESS)
                  .departureTime(Instant.now().atZone(ZoneOffset.UTC).toInstant())
                  .destinations(destinations.toArray(new LatLng[destinations.size()]))
                  .origins(origins.toArray(new LatLng[origins.size()]));
  
  
          distanceMatrixApiRequest.setCallback(new PendingResult.Callback&lt;DistanceMatrix&gt;() {
              @Override
              public void onResult(DistanceMatrix distanceMatrix) {
  
                  long[][] matrix = buildDistanceMatrix(destinations.size(), distanceMatrix);
                  System.out.println(Arrays.deepToString(matrix));
  
              }
  
              @Override
              public void onFailure(Throwable throwable) {
                  throwable.printStackTrace();
  
              }
          });
      }
  </code></pre>
  
  <p>And the result looks like </p>
  
  <p><code>[[10196, 6647, 4881], [0, 0, 0], [0, 0, 0]]</code></p>
  
  <p>I do not understand how the matrix was made in the <code>python code</code>, can someone help me formulate it?</p>
  
  <p>My DistanceMatrix response looks like</p>
  
  <pre><code>"destinationAddresses": [
      "Central St, Lusaka, Zambia",
      "Unnamed Road, Lusaka, Zambia",
      "Jacaranda Rd, Lusaka, Zambia"
  ],
  "originAddresses": [
      "1940 - 3 Munthaka Cl, Lusaka, Zambia"
  ],
  "rows": [
      {
          "elements": [
              {
                  "distance": {
                      "humanReadable": "10.2 km",
                      "inMeters": 10193
                  },
                  "duration": {
                      "humanReadable": "23 mins",
                      "inSeconds": 1352
                  },
                  "durationInTraffic": {
                      "humanReadable": "26 mins",
                      "inSeconds": 1549
                  },
                  "status": "OK"
              },
              {
                  "distance": {
                      "humanReadable": "6.6 km",
                      "inMeters": 6647
                  },
                  "duration": {
                      "humanReadable": "13 mins",
                      "inSeconds": 779
                  },
                  "durationInTraffic": {
                      "humanReadable": "14 mins",
                      "inSeconds": 839
                  },
                  "status": "OK"
              },
              {
                  "distance": {
                      "humanReadable": "4.9 km",
                      "inMeters": 4881
                  },
                  "duration": {
                      "humanReadable": "9 mins",
                      "inSeconds": 516
                  },
                  "durationInTraffic": {
                      "humanReadable": "9 mins",
                      "inSeconds": 538
                  },
                  "status": "OK"
              }
          ]
      }
  ]
  
  }```
  </code></pre>