如何从 SnappedPoints 响应中提取 Google Maps RoadsApi 中的 Lat/Long?
How to extract the Lat/Long from Google Maps RoadsApi from a SnappedPoints response?
我正在为 RoadsApi
使用 Google 地图 Java API:
文档: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"
},
...
}
这大致模仿了我收到的回复,我只能想象他们正在使用 Java脚本 API。
过去有没有人对此有过好运?或者可能知道如何从这个响应中推断出我需要的数据?我可以将它从字符串对象中解析出来,但这会很笨重,充其量也不可靠——因为我不确定如果返回多条记录它会如何表现。
我只需要纬度和经度!
首先,您应该有一个可以包装该数据的 class,因此 class 应该包含您的应用程序中可能需要的所有字段,您可以从 Google API回应。然后,您将需要一些 JSON 可以从响应中获取数据的解析器,最后您必须使用 JSON 对象的参数实例化先前创建的 class。
如需更详细的技术资料,您可能想看看这个answer。
Google 地图服务的 Java client library 只是 Web 服务之上的包装器。
您检查了 JSON 纯 Web 服务的响应结构,但客户端库将响应转换为 Java javadoc 中描述的对象:
如果您查看 SnappedPoint
class 的 javadoc,您会看到它有一个 location
属性 对象,即 LatLng
对象。所以你需要执行以下操作才能获得坐标
for (SnappedPoint point : points) {
LatLng loc = point.location;
double lat = loc.lat;
double lng = loc.lng;
}
希望对您有所帮助!
我正在为 RoadsApi
使用 Google 地图 Java API:
文档: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"
},
...
}
这大致模仿了我收到的回复,我只能想象他们正在使用 Java脚本 API。
过去有没有人对此有过好运?或者可能知道如何从这个响应中推断出我需要的数据?我可以将它从字符串对象中解析出来,但这会很笨重,充其量也不可靠——因为我不确定如果返回多条记录它会如何表现。
我只需要纬度和经度!
首先,您应该有一个可以包装该数据的 class,因此 class 应该包含您的应用程序中可能需要的所有字段,您可以从 Google API回应。然后,您将需要一些 JSON 可以从响应中获取数据的解析器,最后您必须使用 JSON 对象的参数实例化先前创建的 class。
如需更详细的技术资料,您可能想看看这个answer。
Google 地图服务的 Java client library 只是 Web 服务之上的包装器。
您检查了 JSON 纯 Web 服务的响应结构,但客户端库将响应转换为 Java javadoc 中描述的对象:
如果您查看 SnappedPoint
class 的 javadoc,您会看到它有一个 location
属性 对象,即 LatLng
对象。所以你需要执行以下操作才能获得坐标
for (SnappedPoint point : points) {
LatLng loc = point.location;
double lat = loc.lat;
double lng = loc.lng;
}
希望对您有所帮助!