Add osrm provider
This commit is contained in:
parent
968c15a254
commit
a8bb953d2f
1 changed files with 60 additions and 1 deletions
|
@ -37,6 +37,7 @@ import net.osmand.plus.GPXUtilities.TrkSegment;
|
||||||
import net.osmand.plus.GPXUtilities.WptPt;
|
import net.osmand.plus.GPXUtilities.WptPt;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
|
import net.osmand.plus.Version;
|
||||||
import net.osmand.router.GeneralRouter;
|
import net.osmand.router.GeneralRouter;
|
||||||
import net.osmand.router.GeneralRouter.GeneralRouterProfile;
|
import net.osmand.router.GeneralRouter.GeneralRouterProfile;
|
||||||
import net.osmand.router.RoutePlannerFrontEnd;
|
import net.osmand.router.RoutePlannerFrontEnd;
|
||||||
|
@ -46,6 +47,7 @@ import net.osmand.router.RoutingContext;
|
||||||
import net.osmand.router.TurnType;
|
import net.osmand.router.TurnType;
|
||||||
import net.osmand.util.MapUtils;
|
import net.osmand.util.MapUtils;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
@ -60,7 +62,7 @@ public class RouteProvider {
|
||||||
private static final String OSMAND_ROUTER = "OsmAndRouter";
|
private static final String OSMAND_ROUTER = "OsmAndRouter";
|
||||||
|
|
||||||
public enum RouteService {
|
public enum RouteService {
|
||||||
OSMAND("OsmAnd (offline)"), YOURS("YOURS"), ORS("OpenRouteService"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
OSMAND("OsmAnd (offline)"), YOURS("YOURS"), ORS("OpenRouteService"), OSRM("OSRM (only car)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||||
private final String name;
|
private final String name;
|
||||||
private RouteService(String name){
|
private RouteService(String name){
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
@ -178,6 +180,8 @@ public class RouteProvider {
|
||||||
res = findYOURSRoute(params);
|
res = findYOURSRoute(params);
|
||||||
} else if (params.type == RouteService.ORS) {
|
} else if (params.type == RouteService.ORS) {
|
||||||
res = findORSRoute(params);
|
res = findORSRoute(params);
|
||||||
|
} else if (params.type == RouteService.OSRM) {
|
||||||
|
res = findOSRMRoute(params);
|
||||||
} else if (params.type == RouteService.OSMAND) {
|
} else if (params.type == RouteService.OSMAND) {
|
||||||
res = findVectorMapsRoute(params);
|
res = findVectorMapsRoute(params);
|
||||||
} else {
|
} else {
|
||||||
|
@ -193,6 +197,8 @@ public class RouteProvider {
|
||||||
log.error("Failed to find route ", e); //$NON-NLS-1$
|
log.error("Failed to find route ", e); //$NON-NLS-1$
|
||||||
} catch (SAXException e) {
|
} catch (SAXException e) {
|
||||||
log.error("Failed to find route ", e); //$NON-NLS-1$
|
log.error("Failed to find route ", e); //$NON-NLS-1$
|
||||||
|
} catch (JSONException e) {
|
||||||
|
log.error("Failed to find route ", e); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return new RouteCalculationResult(null);
|
return new RouteCalculationResult(null);
|
||||||
|
@ -285,6 +291,7 @@ public class RouteProvider {
|
||||||
log.info("URL route " + uri);
|
log.info("URL route " + uri);
|
||||||
URL url = new URL(uri.toString());
|
URL url = new URL(uri.toString());
|
||||||
URLConnection connection = url.openConnection();
|
URLConnection connection = url.openConnection();
|
||||||
|
connection.setRequestProperty("User-Agent", Version.getFullVersion(params.ctx));
|
||||||
DocumentBuilder dom = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
DocumentBuilder dom = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||||
Document doc = dom.parse(new InputSource(new InputStreamReader(connection.getInputStream())));
|
Document doc = dom.parse(new InputSource(new InputStreamReader(connection.getInputStream())));
|
||||||
NodeList list = doc.getElementsByTagName("coordinates"); //$NON-NLS-1$
|
NodeList list = doc.getElementsByTagName("coordinates"); //$NON-NLS-1$
|
||||||
|
@ -479,6 +486,7 @@ public class RouteProvider {
|
||||||
log.info("URL route " + uri);
|
log.info("URL route " + uri);
|
||||||
URL url = new URL(uri.toString());
|
URL url = new URL(uri.toString());
|
||||||
URLConnection connection = url.openConnection();
|
URLConnection connection = url.openConnection();
|
||||||
|
connection.setRequestProperty("User-Agent", Version.getFullVersion(params.ctx));
|
||||||
GPXFile gpxFile = GPXUtilities.loadGPXFile(params.ctx, connection.getInputStream(), false);
|
GPXFile gpxFile = GPXUtilities.loadGPXFile(params.ctx, connection.getInputStream(), false);
|
||||||
directions = parseCloudmadeRoute(res, gpxFile, false, params.leftSide, speed);
|
directions = parseCloudmadeRoute(res, gpxFile, false, params.leftSide, speed);
|
||||||
|
|
||||||
|
@ -634,6 +642,7 @@ public class RouteProvider {
|
||||||
URI uri = URI.create(request.toString());
|
URI uri = URI.create(request.toString());
|
||||||
URL url = uri.toURL();
|
URL url = uri.toURL();
|
||||||
URLConnection connection = url.openConnection();
|
URLConnection connection = url.openConnection();
|
||||||
|
connection.setRequestProperty("User-Agent", Version.getFullVersion(params.ctx));
|
||||||
|
|
||||||
DocumentBuilder dom = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
DocumentBuilder dom = DocumentBuilderFactory.newInstance().newDocumentBuilder();
|
||||||
Document doc = dom.parse(new InputSource(new InputStreamReader(connection.getInputStream())));
|
Document doc = dom.parse(new InputSource(new InputStreamReader(connection.getInputStream())));
|
||||||
|
@ -721,5 +730,55 @@ public class RouteProvider {
|
||||||
}
|
}
|
||||||
return gpx;
|
return gpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void appendOSRMLoc(StringBuilder uri, LatLon il) {
|
||||||
|
uri.append("&loc=").append(String.valueOf(il.getLatitude()));
|
||||||
|
uri.append(",").append(String.valueOf(il.getLongitude()));
|
||||||
|
}
|
||||||
|
protected RouteCalculationResult findOSRMRoute(RouteCalculationParams params)
|
||||||
|
throws MalformedURLException, IOException, JSONException {
|
||||||
|
// http://router.project-osrm.org/viaroute?loc=52.28,4.83&loc=52.35,4.95&alt=false&output=gpx
|
||||||
|
List<Location> res = new ArrayList<Location>();
|
||||||
|
StringBuilder uri = new StringBuilder();
|
||||||
|
// possibly hide that API key because it is privacy of osmand
|
||||||
|
// A6421860EBB04234AB5EF2D049F2CD8F key is compromised
|
||||||
|
uri.append("http://router.project-osrm.org/viaroute?alt=false"); //$NON-NLS-1$
|
||||||
|
uri.append("&loc=").append(String.valueOf(params.start.getLatitude()));
|
||||||
|
uri.append(",").append(String.valueOf(params.start.getLongitude()));
|
||||||
|
if(params.intermediates != null && params.intermediates.size() > 0) {
|
||||||
|
for(LatLon il : params.intermediates) {
|
||||||
|
appendOSRMLoc(uri, il);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
appendOSRMLoc(uri, params.end);
|
||||||
|
uri.append("&output=gpx"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
log.info("URL route " + uri);
|
||||||
|
|
||||||
|
URL url = new URL(uri.toString());
|
||||||
|
URLConnection connection = url.openConnection();
|
||||||
|
connection.setRequestProperty("User-Agent", Version.getFullVersion(params.ctx));
|
||||||
|
StringBuilder content = new StringBuilder();
|
||||||
|
// BufferedReader rs = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||||
|
// String s;
|
||||||
|
// while((s = rs.readLine()) != null) {
|
||||||
|
// content.append(s);
|
||||||
|
// }
|
||||||
|
// JSONObject obj = new JSONObject(content.toString());
|
||||||
|
GPXFile gpxFile = GPXUtilities.loadGPXFile(params.ctx, connection.getInputStream(), false);
|
||||||
|
if(gpxFile.routes.isEmpty()) {
|
||||||
|
return new RouteCalculationResult("Route is empty");
|
||||||
|
}
|
||||||
|
for (WptPt pt : gpxFile.routes.get(0).points) {
|
||||||
|
res.add(createLocation(pt));
|
||||||
|
}
|
||||||
|
return new RouteCalculationResult(res, null, params.start, params.end, null, null, null,
|
||||||
|
params.ctx, params.leftSide, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue