-1

I am using the Google Maps Java API for the RoadsApi: Docs: https://developers.google.com/maps/documentation/roads/intro API: https://github.com/googlemaps/google-maps-services-java

My request is structured like this:

    latlngStart = new LatLng(Double.parseDouble(lastLoc.getNormalized_lat().toString()), Double.parseDouble(lastLoc.getNormalized_lng().toString()));
    LatLng latlngEnd   = new LatLng(Double.parseDouble(latitude), Double.parseDouble(longitude));
    SnappedPoint[] points;

    if (origin.equals(true)) {
        points = RoadsApi.snapToRoads(context, latlngStart, latlngEnd).await();
    } else {
        points = RoadsApi.snapToRoads(context, latlngEnd).await();
    }

This does give me the expected SnappedPoints[] response, however I am somewhat at a loss of how to parse it or get the string values:

    for (SnappedPoint point : points) {
        System.out.println(point);
    }

This above piece of code iterates the response and prints out the contents:

[42.64472036,-83.21762969, placeId=ChIJf2D4OTbAJIgR3qx12TMRuIE, originalIndex=0]

As you can see on the doc page for this API, it says very little about the Java implementation, and simply states that the response comes back like this:

{
  "snappedPoints": [
    {
      "location": {
        "latitude": -35.2784167,
        "longitude": 149.1294692
      },
      "originalIndex": 0,
      "placeId": "ChIJoR7CemhNFmsRQB9QbW7qABM"
    },
...
}

This loosely mimics the response I received, and I can only imagine that theirs is using the JavaScript API.

Has anyone had any luck with this in the past? Or maybe have an idea about how to extrapolate the data I need from this response? I could parse it out of the string object, but that would be clunky, and unreliable at best - as I am not sure how it would behave if there were multiple records returned.

All I need is the lat and long!

Barry Chapman
  • 6,690
  • 3
  • 36
  • 64
  • I don't see how the response you receive is different from what is explained in the docs. – MrUpsidown Jul 16 '19 at 13:56
  • @MrUpsidown did you read what I said? I stated that was just like what was in the docs. I -was- looking for a way to get the lat long without having to parse the string object. – Barry Chapman Jul 17 '19 at 15:13
  • I did read your question but it is somewhat unclear. So your question is [How to parse JSON with Java](https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java)? – MrUpsidown Jul 18 '19 at 07:28

2 Answers2

1

The Java client library for Google Maps Services is just a wrapper on top of the web service.

You checked the response structure for pure web service that is a JSON, but the client library transforms response to Java objects that are described in javadoc:

https://googlemaps.github.io/google-maps-services-java/v0.10.0/javadoc/index.html?overview-summary.html

If you check the javadoc for SnappedPoint class you will see that it has a location property that is LatLng object. So you need to do the following in order to obtain coordinates

for (SnappedPoint point : points) {
    LatLng loc = point.location;
    double lat = loc.lat;
    double lng = loc.lng;
}  

I hope this helps!

xomena
  • 31,125
  • 6
  • 88
  • 117
0

First, you should have a class that can wrap that data, so the class should have all of the fields you may need in your app that you can get from Google API response. Then, you'll need some JSON parser that can get data from response and at the end you'll have to instantiate previously created class with arguments from JSON object.

For more detailed technical information, you may want to take a look at this answer.

zeroDivider
  • 1,050
  • 13
  • 29