我正在将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。
过去有人对此有好运吗?还是对如何从此响应中推断出我需要的数据有一个想法?我可以从字符串对象中解析出它,但这很笨拙,而且充其量是不可靠的-因为我不确定如果返回多个记录,它的表现如何。
我需要的是经久耐用!
答案 0 :(得分:1)
Google Maps Services的Java client library只是Web服务之上的包装。
您检查了JSON的纯Web服务的响应结构,但是客户端库将响应转换为javadoc中描述的Java对象:
如果检查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。