【问题标题】:How to extract the Lat/Long from Google Maps RoadsApi from a SnappedPoints response?如何从 SnappedPoints 响应中提取 Google Maps RoadsApi 的纬度/经度?
【发布时间】:2019-04-01 23:06:28
【问题描述】:

我正在为RoadsApi 使用 Google Maps Java API: 文档:https://developers.google.com/maps/documentation/roads/intro 接口: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。

过去有没有人遇到过这种情况?或者也许对如何从这个响应中推断出我需要的数据有一个想法?我可以将它从字符串对象中解析出来,但这会很笨拙,而且充其量也不可靠——因为我不确定如果返回多条记录它会如何表现。

我只需要经纬度!

【问题讨论】:

  • 我看不出您收到的回复与文档中解释的内容有何不同。
  • @MrUpsidown 你读过我说的吗?我说这就像文档中的内容一样。我 - 正在寻找一种无需解析字符串对象即可获得 lat long 的方法。
  • 我确实阅读了您的问题,但有些不清楚。所以你的问题是How to parse JSON with Java?

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


【解决方案1】:

用于 Google 地图服务的 Java client library 只是网络服务之上的一个包装器。

您检查了作为 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;
}  

我希望这会有所帮助!

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多