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

标签 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。

过去有人有过这样的运气吗?或者也许知道如何从这个响应中推断出我需要的数据?我可以从字符串对象中解析它,但这会很笨拙,而且充其量也不可靠 - 因为我不确定如果返回多个记录它会如何表现。

我需要的只是纬度和经度!

最佳答案

Java client library Google map 服务只是网络服务之上的一个包装器。

您检查了纯 Web 服务的响应结构(JSON),但客户端库将响应转换为 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;
}  

希望这会有所帮助!

关于java - 如何从 SnappedPoints 响应中提取 Google Maps RoadsApi 的纬度/经度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53038349/

相关文章:

c# - Xamarin Forms - 谷歌地图在 map 上显示多个标记

javascript - Google Maps Roads API 返回重复的坐标和 placeId

android - 我怎样才能沿着道路推断得更远?

java - py4J 最简单的例子

java - @Resource 可以用于在 EJB3.0 中注入(inject)原语吗?

java - 密码加密和通过网络发送的最佳方法

javascript - 谷歌地图,在标记信息窗口中显示mysql信息

java - 有界缓冲区死锁

java - Android 谷歌地图在手机中显示但未在平板电脑中显示