GithubHelp home page GithubHelp logo

marcoshsc / orsapitools Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 0.0 1.25 MB

Java library that provides implementation of Open Route Service endpoints.

Java 100.00%
java geolocalization geolocalizacao ors openrouteservice openstreetmap directions-api optimization web library

orsapitools's Introduction

ORSApiTools

Java library that provides implementation of Open Route Service endpoints.

Updates

Newer version 2.0 now includes Isochrones and Matrix V2 endpoint support, and a complete refactor was made in the code, in order to use jackson as the JSON parser library.

Version 1.1 fixed bugs in the matrix endpoint.

Information

Library created by Marcos Henrique (Marcoshsc)
Currently on version 2.2.0

Description

This library provides implementations of the following endpoints:

  • Directions
  • Matrix
  • Isochrones
  • Geocode Search
  • Optimization
  • Pois

There is also a feature that allows a matrix request to be made with any number of coordinates, which is not supported natively by the Open Route Service API.

New endpoints are gonna be implemented in later versions of the library. If you wanna contribute and implement one yourself, feel free to open an issue and discuss what and how you gonna do it.

More information about the endpoints can be found at https://openrouteservice.org/dev/#/api-docs/

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. If you want to build a new endpoint implementation, also open an issue to discuss what is going to be done.

Importing

Add the following dependency to your pom.xml (Latest version):

<!-- https://mvnrepository.com/artifact/com.github.marcoshsc/orsApiTools -->
<dependency>
    <groupId>com.github.marcoshsc</groupId>
    <artifactId>orsApiTools</artifactId>
    <version>2.2.0</version>
</dependency>

After that, everything is working. Enjoy!

Usage examples

You can either pass an api key as the parameter or set a "ors.key" file in the project with the api key inside of it, and use ApiKeyGetter to get the value. You will find some sample usages as listed below. See javadocs for better understanding.

Directions

DirectionsV2Request req = ORSEndpoints.getDirectionsV2(ApiKeyGetter.getApiKey());
req.getParameters().setProfile(new Profile(EnumProfile.DRIVING_CAR));
req.getParameters().setCoordinates(new Coordinates(Arrays.asList(
        new Coordinate(-43.5876127,-19.6845878),
        new Coordinate(-43.5840602,-19.6416472)
)));
req.getParameters().setAttributes(new Attributes(Arrays.asList(AttributesEnum.values())));
req.getParameters().setElevation(new Elevation(true));
req.getParameters().setManeuvers(new Maneuvers(true));
req.getParameters().setInstructionsFormat(new InstructionsFormat(InstructionsFormatEnum.HTML));
req.getParameters().setExtraInfo(new ExtraInfo(Collections.singletonList(ExtraInfoEnum.SURFACE)));

DirectionsV2Response res = req.makeRequest();

Matrix

MatrixV2Request req = ORSEndpoints.getMatrixV2(ApiKeyGetter.getApiKey());
req.getParameters().setProfile(new Profile(EnumProfile.FOOT_WALKING));
req.getParameters().setLocations(new Locations(Arrays.asList(
        new Coordinate(-47.050871,-17.841496),
        new Coordinate(-47.044044,-17.636455),
        new Coordinate(-47.100653,-17.795555),
        new Coordinate(-47.030208,-17.81385),
        new Coordinate(-47.214168,-17.733528)
)));
req.getParameters().setMetrics(new Metrics(Collections.singletonList(EnumMetrics.DISTANCE)));
req.getParameters().setResolveLocations(new ResolveLocations(true));
MatrixV2Response res = req.makeRequest();

Isochrones

IsochronesRequest req = ORSEndpoints.getIsochrones(ApiKeyGetter.getApiKey());
IsochronesParameters parameters = req.getParameters();
parameters.setProfile(new Profile(EnumProfile.DRIVING_HGV));
parameters.setLocations(new Locations(Arrays.asList(new Coordinate(8.681495,
        49.41461), new Coordinate(8.686507,49.41943))));
parameters.setRangeType(new RangeType(EnumRangeType.DISTANCE));
parameters.setRange(new Range(Arrays.asList(100.2, 200.0)));
parameters.setSmoothing(new Smoothing(13));
IsochronesResponse response = req.makeRequest();

Geocode Search

String key = ApiKeyGetter.getApiKey();
GeocodeSearchRequest request = ORSEndpoints.getGeocodeSearch(key);
request.getParameters().setText(new Text("Avenida Getúlio Vargas, JM"));
GeocodeSearchResponse response = request.makeRequest();

Optimization

OptimizationRequest req = ORSEndpoints.getOptimization(ApiKeyGetter.getApiKey());
req.getParameters().setVehicles(new Vehicles(Arrays.asList(
        new Vehicle(
                1,
                EnumProfile.DRIVING_HGV,
                new Coordinate(2.35044,
                        48.71764),
                null,
                new Coordinate(2.35044,
                        48.71764),
                null,
                Arrays.asList(4),
                Arrays.asList(1, 14),
                new TimeWindow(28800, 43200),
                Arrays.asList(
                        new Break(1, Arrays.asList(new TimeWindow(32400, 34200)), 0)
                )
        ),
        new Vehicle(
                2,
                EnumProfile.DRIVING_HGV,
                new Coordinate(2.35044,
                        48.71764),
                null,
                new Coordinate(2.35044,
                        48.71764),
                null,
                Arrays.asList(4),
                Arrays.asList(2,14),
                new TimeWindow(28800, 43200),
                Arrays.asList(new Break(2, Arrays.asList(new TimeWindow(34200, 36000)), 300))
        )
)));
req.getParameters().setJobs(new Jobs(Arrays.asList(
        new Job(
                1,
                new Coordinate(1.98935,
                        48.701),
                null,
                300,
                Arrays.asList(1),
                null,
                Arrays.asList(1),
                null,
                Arrays.asList(new TimeWindow(32400, 36000))
        ),
        new Job(
                2,
                new Coordinate(2.03655,
                        48.61128),
                null,
                300,
                null,
                Arrays.asList(1),
                Arrays.asList(1),
                null,
                null
        ),
        new Job(
                5,
                new Coordinate(2.28325,
                        48.5958),
                null,
                300,
                Arrays.asList(1),
                null,
                Arrays.asList(14),
                null,
                null
        ),
        new Job(
                6,
                new Coordinate(2.89357,
                        48.90736),
                null,
                300,
                Arrays.asList(1),
                null,
                Arrays.asList(14),
                null,
                null
        )
)));
req.getParameters().setShipments(new Shipments(Arrays.asList(
        new Shipment(
                new ShipmentStep(
                        4,
                        new Coordinate(2.41808,
                                49.22619),
                        null,
                        300,
                        null
                ),
                new ShipmentStep(
                        3,
                        new Coordinate(2.39719,
                                49.07611),
                        null,
                        300,
                        null
                ),
                Arrays.asList(1),
                Arrays.asList(2),
                null
        )
)));
OptimizationResponse res = req.makeRequest();

Pois

PoisRequest req = ORSEndpoints.getPois(ApiKeyGetter.getApiKey());
req.getParameters().setRequest(new PoisParameterRequest(PoisRequestEnum.POIS));
req.getParameters().setGeometry(new PoisGeometry(new BoundingBox(53.0756,
        53.0456,
        8.8034,
        8.7834
), new GeoJSON(new Coordinate(8.8034,
        53.0756)), 500));
req.getParameters().setLimit(new Limit(12));
req.getParameters().setSortBy(new SortBy(SortByEnum.DISTANCE));
PoisResponse res = req.makeRequest();

orsapitools's People

Contributors

marcoshsc avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

orsapitools's Issues

Module is not able to handle the 502 proxy error

The 502 proxy error is a known error for the ORS API matrix service, more information about it can be found here.
Suggestion to fix the bug is to detect whether the 502 proxy error happens, and re-sending the request in smaller parts, trying to avoid the error happening again.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.