Demande d'API OpenTripPlanner Rest

8

Suite à ce tutoriel, j'ai configuré un serveur autonome OpenTripPlanner (version 0.11.0). Cela fonctionne très bien à

 http://localhost:8080/index.html

et par exemple à

http://localhost:8080/otp/routers/default/index/routes 

renvoie un json de routes.

Maintenant, je ferais une demande d'api de repos (je suis intéressant pour l'api Isochrone). J'essaie de retourner la géométrie isochrone sous la forme d'un ensemble de polygones GeoJSON à l'URL spécifiée sur ce lien, mais cela ne fonctionne pas.

Pouvez-vous suggérer la bonne URL pour obtenir Isochrone GeoJSON?

franco_b
la source

Réponses:

4

Je suis à peu près dans le même bateau que vous, mais je pense avoir compris comment créer une isochrone. J'utilise la version 0.18.0, je ne sais pas si cela est pertinent ou non.

Voici où j'ai trouvé l' exemple

Voici un échantillon d'isochrone que j'ai obtenu

http://localhost:8080/otp/routers/default/isochrone?&fromPlace=39.78,-86.1476&date=2015/01/09&time=12:00:00&mode=WALK&&walkSpeed=5&cutoffSec=4000

Cela semble assez intuitif, mais je ne pense pas que les documents que j'ai trouvés sont à jour, donc je ne sais pas comment modifier l'isochrone, sauf de manière simple. J'espère que c'est utile.

Ravi Mehta
la source
2

Je crois qu'il est très important de savoir quelle version d'OTP vous utilisez, car les développeurs apportent constamment des changements - je n'ai que récemment creusé dans la v0.19 et ci-dessous sont deux exemples de wrappers en cours de travail d'appeler l'API isochrone d'OTP avec lui.

@Ravi vous a déjà donné l'appel URL pour l'API isochrone, si cela ne fonctionne pas lorsque vous mettez à jour le Lat / Lon pour votre zone et l'entrez dans votre navigateur après avoir lancé OTP, puis revenez aux bases et assurez-vous que votre instance des travaux OTP - notez que la réponse d'OTP à l'URL sera différente si vous incluez l' --analystindicateur (renvoie GeoJSON) ou non (retourne un fichier de formes) lors du lancement d'OTP. J'ai ajouté une poignée de liens qui m'ont été utiles au post de @ Ravi sur les tutoriels OTP.

En termes d'utilisation de la réponse ci-dessous, deux options sont, espérons-le, utiles.

Tout d'abord, voici une fonction Python dirigée dans le même sens que la requête SQL ci-dessous (notez qu'elle écrit juste le GeoJSON de retour car je n'ai pas encore pris le temps d'extraire / lire la réponse en Python) - J'imagine une variante de cela est ce dont vous auriez besoin pour la cartographie Web (en fonction clairement de la langue dans laquelle l'analyse de votre site est, supposez que ce serait encore plus simple en javascript), mais je n'ai pas cherché d'exemples (FYI semble qu'il y ait un Web site qui a utilisé OTP pour créer des isochrones)

import json, requests
def OTPIsochroneAPI(orig, o_code, depTime = '8:00:00', cutoff = 2700, interimFolder = './interim_isochrones'):
    # create query
    baseURL = 'http://localhost:8080/otp/routers/default/isochrone?'
    qryDT = '&date=2015/12/7&time={0}&mode=WALK,TRANSIT&cutoffSec={1}'.format(depTime, cutoff)
    url = '{0}fromPlace={1},{2}&{3}'.format(baseURL, orig.lat, orig.lon, qryDT)
    # print url # print out for testing
    # get isochrone response
    try:
        response = requests.get(url)
        data = json.loads(response.text)
        #print 'response received for %s' % (str(o_code))
    # save out response
        isoFile = '{0}/isochrone_{1}_8am.geojson'.format(interimFolder, (str(o_code)))
        with open(isoFile, 'w') as outfile:
            json.dump(data, outfile)
        # TO DO: return data (plus parse and reformat for some Python spatial library) 
        print 'wrote GeoJSON for o_code %s' % (o_code)
    except IOError as (errno, strerror):
        print "I/O error({0}): {1}".format(errno, strerror)
    except ValueError:
        print "No JSON object could be decoded"
    except:
        print "Unexpected error:", sys.exc_info()[0]
        raise

Alternativement, si vous êtes à l'aise dans PostGIS, voici une approche sur laquelle j'ai travaillé hier, notez que cela nécessite que l' extension HTTP de Paul Ramsey soit installée sur votre base de données et que je n'ai testé cela que sur le PostgreSQL le plus récent (9.5) avec PostGIS 2.2. Notez également que cela ne vise qu'à extraire une seule isochrone (donc une seule &cutoffSec=donnée), il faudrait l'adapter pour en extraire plusieurs - je pense avec unnest()à la place (ou un ajout à?) La json_array_elements()fonction

SELECT q.id_column, 
    CASE WHEN (q.resp).status = 200 -- check if response is OK
    THEN ST_SetSRID( -- creating a new geometry so need to set SRID
        ST_GeomFromGeoJSON( --OTP analyst responds with a GeoJSON
          -- but ST_GeomFromGeoJSON only handles a feature at a time 
          -- so we need to extract it, thus the functional but messy SQL below
        (json_array_elements( 
        (q.resp).content::JSON->'features')->'geometry')::text)
        ,4326) 
    ELSE NULL -- there was a problem. maybe your origin was in the ocean
    END as geom_isochrone -- name your extracted geometry column
FROM ( SELECT id_column, -- grab a column identifier, then extract API response:
    http_get('http://localhost:8080/otp/routers/default/isochrone?fromPlace=' 
    || y || ',' || x || -- set your lat and lon from input data
    '&date=2015/12/7&time=8:00:00&mode=WALK,TRANSIT&cutoffSec=2700') as resp 
    FROM input_table -- your input table
) q;
claytonrsh
la source