如何从SnappedPoints响应中提取Google Maps RoadsApi的纬度/经度?

时间:2018-10-29 03:26:15

标签: java google-maps google-roads-api

我正在将Google Maps Java API用于RoadsApi: 文件:https://developers.google.com/maps/documentation/roads/intro API:https://github.com/googlemaps/google-maps-services-java

我的请求的结构如下:

    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();
    }

这确实给了我预期的SnappedPoints []响应,但是我对如何解析它或获取字符串值有些困惑:

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

上面的这段代码迭代响应并打印出内容:

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

正如您在此API的文档页面上看到的那样,它几乎没有介绍Java实现,并且只是指出响应是这样返回的:

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

这大致模拟了我收到的响应,我只能想象他们正在使用JavaScript API。

过去有人对此有好运吗?还是对如何从此响应中推断出我需要的数据有一个想法?我可以从字符串对象中解析出它,但这很笨拙,而且充其量是不可靠的-因为我不确定如果返回多个记录,它的表现如何。

我需要的是经久耐用!

2 个答案:

答案 0 :(得分:1)

Google Maps Services的Java client library只是Web服务之上的包装。

您检查了JSON的纯Web服务的响应结构,但是客户端库将响应转换为javadoc中描述的Java对象:

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

如果检查SnappedPoint类的javadoc,将会看到它具有location对象的LatLng属性。因此,您需要执行以下操作以获得坐标

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

我希望这会有所帮助!

答案 1 :(得分:0)

首先,您应该有一个可以包装这些数据的类,因此该类应具有您可以从Google API响应中获取的应用程序中可能需要的所有字段。然后,您将需要一些可以从响应中获取数据的JSON解析器,最后,您必须使用JSON对象中的参数实例化先前创建的类。

有关更多详细的技术信息,您可能需要看看此answer