My program uses google maps directions for web Services to find a route between two points. The result is parsed and stored in variable.
This variable is then used to compose google static map URL.
The parse and the URL are working correctly. The problem is that the drawn "route" passes through a lake and mountains.
{
String GPS = "-22.978823,-43.233249";
String link = MAPS_BASE_URL + "center=brazil," + GPS +
"&markers=color:blue|brazil," + GPS +
"&path=color:0xff0000ff" + "%s" +
"&zoom=13&size=1024x1024&sensor=false";
String htmlContent = "";
String direction_URL= "";
URL url = null;
String parsedStr = null;
Scanner scan = null;
origin = GPS;
destination ="Maracan?";
try {
direction_URL = MAPS_DIRECTIONS_URL;
direction_URL += URLEncoder.encode(origin, "UTF-8");
direction_URL += "&destination=";
direction_URL += URLEncoder.encode(destination, "UTF-8");
direction_URL += "&key=AIzaSyARNFl6ns__p2OEy3uCrZMGem8KW8pXwAI";
}catch(UnsupportedEncodingException e){
Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, e);
}
try {
url = new URL(direction_URL);
} catch (MalformedURLException ex) {
Logger.getLogger(AlertService.class.getName()).log(Level.SEVERE, null, ex);
}
try {
scan = new Scanner(url.openStream());
} catch (IOException ex) {
Logger.getLogger(AlertService.class.getName()).log(Level.SEVERE, null, ex);
}
String str = new String();
while (scan.hasNext())
str += scan.nextLine();
scan.close();
parsedStr = parseJson(str);
try {
InputStream htmlInputStream =
AlertService.class.getResourceAsStream("/resources/gapi.html");
BufferedReader htmlReader = new BufferedReader(
new InputStreamReader(htmlInputStream));
String locationsContent = "";
String wilcardContent = "";
Scanner strScanner = new Scanner(parsedStr);
while (strScanner.hasNextLine())
{
locationsContent = strScanner.nextLine() + "
";
StringTokenizer st = new StringTokenizer(locationsContent, ";");
if (st.countTokens() == 2)
wilcardContent += "|" + st.nextToken().trim()
+ "," + st.nextToken().trim();
}
link = link.replaceFirst("%s", wilcardContent);
htmlContent = "";
while (htmlReader.ready())
htmlContent += htmlReader.readLine() + "
";
htmlContent = htmlContent.replaceAll("%s", link);
} catch (FileNotFoundException ex) {
Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Service.class.getName()).log(Level.SEVERE, null, ex);
}
return htmlContent;
}
Parse function:
private String parseJson(String s){
String coordinates = new String ();
final JSONObject json = new JSONObject(s);
final JSONObject jsonRoute = json.getJSONArray("routes").getJSONObject(0);
//Get the leg, only one leg as we don't support waypoints
final JSONObject leg = jsonRoute.getJSONArray("legs").getJSONObject(0);
//Get the steps for this leg
final JSONArray steps = leg.getJSONArray("steps");
//Number of steps for use in for loop
final int numSteps = steps.length();
for(int i = 0; i< numSteps; ++i){
final JSONObject step = steps.getJSONObject(i);
final JSONObject startLocation = step.getJSONObject("start_location");
final Double startLat = startLocation.getDouble("lat");
final Double startlng = startLocation.getDouble("lng");
final JSONObject endLocation = step.getJSONObject("end_location");
final Double endtLat = endLocation.getDouble("lat");
final Double endtlng = endLocation.getDouble("lng");
coordinates = coordinates.concat(" ");
coordinates = coordinates.concat(startLat.toString());
coordinates = coordinates.concat(";" + " ");
coordinates = coordinates.concat(startlng.toString());
coordinates = coordinates.concat("
");
coordinates = coordinates.concat(" ");
coordinates = coordinates.concat(endtLat.toString());
coordinates = coordinates.concat(";" + " ");
coordinates = coordinates.concat(endtlng.toString());
coordinates = coordinates.concat("
");
}
return coordinates;
}
Json response:
https://maps.googleapis.com/maps/api/directions/json?origin=-22.978823,-43.233249&destination=Maracan%C3%A2&key=AIzaSyARNFl6ns__p2OEy3uCrZMGem8KW8pXwAI
The Final URL look like this:
http://maps.google.com/maps/api/staticmap?center=brazil,-22.978823,-43.233249&markers=color:blue|brazil,-22.978823,-43.233249&path=color:0xff0000ff|-22.9783362,-43.2336781|-22.9772355,-43.23076390000001|-22.9772355,-43.23076390000001|-22.9789792,-43.2300162|-22.9789792,-43.2300162|-22.9790772,-43.23036|-22.9790772,-43.23036|-22.9786979,-43.22698949999999|-22.9786979,-43.22698949999999|-22.9771399,-43.2196208|-22.9771399,-43.2196208|-22.9624962,-43.20396840000001|-22.9624962,-43.20396840000001|-22.9583858,-43.2043807|-22.9583858,-43.2043807|-22.934896,-43.2094454|-22.934896,-43.2094454|-22.9333061,-43.2096873|-22.9333061,-43.2096873|-22.913577,-43.2099889|-22.913577,-43.2099889|-22.9106681,-43.2154625|-22.9106681,-43.2154625|-22.9101261,-43.2217923|-22.9101261,-43.2217923|-22.9114561,-43.2254838|-22.9114561,-43.2254838|-22.9135546,-43.2276606&zoom=13&size=1024x1024&sensor=false
See Question&Answers more detail:
os