OpenTripPlanner Rest-API-Anfrage


8

Nach diesem Tutorial habe ich einen eigenständigen OpenTripPlanner-Server (Version 0.11.0) eingerichtet. Es funktioniert sehr gut bei

 http://localhost:8080/index.html

und zum Beispiel bei

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

gibt eine Route json zurück.

Jetzt würde ich eine Rest-API-Anfrage stellen (ich bin für Isochrone-API interessant). Ich versuche, Isochronengeometrie als Satz von GeoJSON-Polygonen unter der unter diesem Link angegebenen URL zurückzugeben , funktioniert aber nicht.

Können Sie die richtige URL vorschlagen, um Isochrone GeoJSON zu erhalten?

Antworten:


4

Ich bin so ziemlich im selben Boot wie Sie, aber ich glaube, ich habe herausgefunden, wie man eine Isochron erzeugt. Ich verwende Version 0.18.0 und bin mir nicht sicher, ob dies relevant ist oder nicht.

Hier habe ich das Beispiel gefunden

Hier ist ein Beispiel für Isochron, das ich bekommen habe

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

Es sieht ziemlich intuitiv aus, aber ich denke nicht, dass die Dokumente, die ich gefunden habe, aktuell sind, so dass ich keine Ahnung habe, wie ich die Isochron ändern kann, außer auf einfache Weise. Hoffe das ist nützlich.


2

Ich glaube, es ist sehr wichtig, welche OTP-Version Sie verwenden, da die Entwickler ständig Änderungen vornehmen. Ich habe mich erst kürzlich mit Version 0.19 befasst. Im Folgenden finden Sie zwei Beispiele für Work-in-Progress-Wrapper zum Aufrufen der Isochrone-API von OTP.

@Ravi hat Ihnen bereits den URL-Aufruf für die Isochrone-API gegeben. Wenn dies nicht funktioniert, wenn Sie Lat / Lon für Ihre Region aktualisieren und nach dem Start von OTP in Ihren Browser eingeben, kehren Sie zu den Grundlagen zurück und stellen Sie sicher, dass Ihre Instanz vorhanden ist von OTP funktioniert - Beachten Sie, dass die Antwort von OTP auf die URL unterschiedlich ist, wenn Sie --analystbeim Starten von OTP das Flag (gibt GeoJSON zurück) oder nicht (gibt ein Shapefile zurück) einfügen. Ich habe eine Handvoll Links, die für mich hilfreich waren, zu @ Ravis Beitrag über OTP-Tutorials hinzugefügt .

In Bezug auf die Verwendung der Antwort unten sind zwei Optionen, die hoffentlich hilfreich sind.

Hier ist zunächst eine Python-Funktion, die in die gleiche Richtung wie die folgende SQL-Abfrage geht (beachten Sie, dass sie nur den zurückgegebenen GeoJSON ausschreibt, da ich mir noch nicht die Zeit genommen habe, die Antwort in Python zu extrahieren / zu lesen) - ich stelle mir eine Variation davon vor Dies ist das, was Sie für das Web-Mapping benötigen (je nachdem, in welcher Sprache die Analyse Ihrer Website vorliegt, ist es in Javascript wahrscheinlich noch einfacher), aber ich habe nicht nach Beispielen gesucht (zu Ihrer Information, es gab ein Web Site , die OTP zum Erstellen von Isochronen verwendet hat)

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

Wenn Sie sich mit PostGIS auskennen, ist dies ein Ansatz, den ich gestern angewendet habe. Beachten Sie, dass die HTTP-Erweiterung von Paul Ramsey in Ihrer Datenbank installiert sein muss. Ich habe dies nur auf dem neuesten (9.5) PostgreSQL mit PostGIS 2.2 getestet. Beachten Sie auch, dass dies nur dazu gedacht ist, eine einzelne Isochron zu extrahieren (also nur eine &cutoffSec=gegeben). Es müsste angepasst werden, um mehrere zu extrahieren - ich denke mit unnest()anstelle (oder zusätzlich zu?) Der json_array_elements()Funktion

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.