gpt4 book ai didi

java - 如何在 Android Studio 中实现 Google Distance/Matrix Api?

转载 作者:行者123 更新时间:2023-12-05 01:40:38 24 4
gpt4 key购买 nike

我正在编写一个应用程序来计算 route 的两个位置。我已经实现了 google places API 以根据名称或地址获取纬度/经度,但我无法实现 Distance API。当我尝试导入时,类/方法没有出现。下面是我正在尝试做的一个例子。

    private static final String API_KEY = "YOUR_API_KEY";
private static final GeoApiContext context = new
GeoApiContext().setApiKey(API_KEY);


public DistanceMatrix estimateRouteTime(DateTime time, Boolean isForCalculateArrivalTime, DirectionsApi.RouteRestriction routeRestriction, LatLng departure, LatLng... arrivals) {
try {
DistanceMatrixApiRequest req = DistanceMatrixApi.newRequest(context);
if (isForCalculateArrivalTime) {
req.departureTime(time);
} else {
req.arrivalTime(time);
}
if (routeRestriction == null) {
routeRestriction = DirectionsApi.RouteRestriction.TOLLS;
}
DistanceMatrix trix = req.origins(departure)
.destinations(arrivals)
.mode(TravelMode.DRIVING)
.avoid(routeRestriction)
.language("fr-FR")
.await();
return trix;

} catch (ApiException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}

GeoApiContext 和 DistanceMatrix 不会在导入时出现。感谢您的帮助。

最佳答案

回答我的问题...

    public class GetJson extends AsyncTask<Void, Void, DeliveryData> {

@Override
protected void onPreExecute() {
// progressDialog
}

@Override
protected DeliveryData doInBackground(Void... params) {
Utils util = new Utils();
DeliveryData json = util.getInfo("https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins="+latLngCompany.latitude+","+latLngCompany.longitude+
"&destinations="+latPlace+","+lonPlace+"&key=" + APISERVERKEY);
deliveryData.saveDeliveryData();

return json;

}

@Override
protected void onPostExecute(DeliveryData deliveryData) {
//progressDialog.dismiss
}
}

创建了一个 AsyncTask 以使用特定参数从 url 获取 json。

public class Utils {

public DeliveryData getInfo(String end){

String json;
DeliveryData output;
json = NetworkUtils.getJSONFromAPI(end);
output = parseJson(json);


return output;
}

private DeliveryData parseJson(String json){
try {
DeliveryData deliveryData = new DeliveryData();

JSONObject distanceJson = new JSONObject(json)
.getJSONArray("rows")
.getJSONObject(0)
.getJSONArray("elements")
.getJSONObject(0)
.getJSONObject("distance");
Double distanceDouble = null ;
String distance = distanceJson.get("text").toString();
if (distance.contains("km")){
distanceDouble = Double.parseDouble(distance.replace("km", ""));

}else {
distanceDouble = Double.parseDouble("0." + distance.replace("m", ""));
}

deliveryData.setDistance(distanceDouble);

return deliveryData;
}catch (JSONException e){
e.printStackTrace();
return null;
}
}

}

在 getInfo 中,来自 url 的数据被传递给 string。然后,调用 parseJson 将字符串转换为 JsonObject。我的 Json 只有一个位置。因此,对象在数组中被选中,String 被解析为 Double,不包括字符。最后将距离保存在object上。

public class NetworkUtils {

public static String getJSONFromAPI (String url){
String output = "";
try {
URL apiEnd = new URL(url);
int responseCode;
HttpURLConnection connection;
InputStream is;

connection = (HttpURLConnection) apiEnd.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(15000);
connection.setConnectTimeout(15000);
connection.connect();

responseCode = connection.getResponseCode();
if(responseCode < HttpURLConnection.HTTP_BAD_REQUEST){
is = connection.getInputStream();
}else {
is = connection.getErrorStream();
}

output = convertISToString(is);
is.close();
connection.disconnect();

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


return output;
}

private static String convertISToString(InputStream is){
StringBuffer buffer = new StringBuffer();

try {

BufferedReader br;
String row;

br = new BufferedReader(new InputStreamReader(is));
while ((row = br.readLine())!= null){
buffer.append(row);
}
br.close();
} catch (IOException e) {
e.printStackTrace();
}
return buffer.toString();
}
}

这个类负责连接到服务器并从 url 中获取数据。

关于java - 如何在 Android Studio 中实现 Google Distance/Matrix Api?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56176753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com