11package com .osrm .client ;
22
3+ import com .fasterxml .jackson .databind .ObjectMapper ;
34import java .io .UnsupportedEncodingException ;
45import java .net .URLEncoder ;
56import java .nio .charset .StandardCharsets ;
67import java .util .ArrayList ;
78import java .util .List ;
9+ import java .util .Map ;
810import java .util .concurrent .TimeUnit ;
911import okhttp3 .MediaType ;
1012import okhttp3 .OkHttpClient ;
@@ -28,7 +30,7 @@ public OSRMClient(String uri) throws EmptyUrlException {
2830
2931 public OSRMDistanceResponse getDistanceMatrix (List <GeoLocation > locations , double speedRate , String country ,
3032 String token , String profile ,
31- String startTime ) throws OptimizationDistanceMatrixException {
33+ String options ) throws OptimizationDistanceMatrixException {
3234 Builder requestBuilder = new Builder ();
3335
3436 requestBuilder .readTimeout (900000 , TimeUnit .MILLISECONDS );
@@ -49,7 +51,7 @@ public OSRMDistanceResponse getDistanceMatrix(List<GeoLocation> locations, doubl
4951
5052 paramsString += "&speedRate=" + speedRate ;
5153 paramsString += "&country=" + country ;
52- paramsString += encodeStartTime ( startTime );
54+ paramsString += encodeJsonToUrlParams ( options );
5355
5456 RequestBody body = RequestBody .create (mediaType , "loc=" + paramsString );
5557
@@ -79,18 +81,21 @@ public OSRMDistanceResponse getDistanceMatrix(List<GeoLocation> locations, doubl
7981 throw new DistanceMatrixResponseException ("OSRM Error: " + response );
8082 }
8183
82- private String encodeStartTime (String startTime ) {
83- String paramsString = "" ;
84- if (startTime == null || startTime .isEmpty ()) {
85- return paramsString ;
86- }
84+ public static String encodeJsonToUrlParams (String options ) {
85+ ObjectMapper objectMapper = new ObjectMapper ();
86+ StringBuilder urlParams = new StringBuilder ();
8787 try {
88- String encodedStartTime = URLEncoder .encode (startTime , StandardCharsets .UTF_8 .toString ());
89- paramsString += "&start_time=" + encodedStartTime ;
90- } catch (Exception e ){
91- throw new OptimizationDistanceMatrixException ("Error while encoding startTime parameter" );
88+ Map <String , Object > map = objectMapper .readValue (options , Map .class );
89+
90+ for (Map .Entry <String , Object > entry : map .entrySet ()) {
91+ String key = URLEncoder .encode (entry .getKey (), StandardCharsets .UTF_8 .toString ());
92+ String value = URLEncoder .encode (String .valueOf (entry .getValue ()), StandardCharsets .UTF_8 .toString ());
93+ urlParams .append ("&" ).append (key ).append ("=" ).append (value );
94+ }
95+ }catch (Exception e ) {
96+ System .out .print ("Error getUnsuccessfulResponse.fromJSON: " + e .getMessage ());
9297 }
93- return paramsString ;
98+ return urlParams . toString () ;
9499 }
95100
96101 private UnsuccessfulResponse getUnsuccessfulResponse (Response response ){
0 commit comments