OpenTripPlanner REST APIリクエスト


8

このチュートリアルに従って、OpenTripPlanner(バージョン0.11.0)スタンドアロンサーバーをセットアップしました。それは非常にうまく機能します

 http://localhost:8080/index.html

そして例えば

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

ルートjsonを返します。

今、残りのapiリクエストを作成します(Isochrone apiに興味があります)。このリンクで指定されたURLで、GeoJSONポリゴンのセットとしてアイソクロネジオメトリを返そうとしましたが、機能しません。

Isochrone GeoJSONを取得するための正しいURLを提案できますか?

回答:


4

私はあなたとほとんど同じ船に乗っていますが、等時線を作成する方法を理解したと思います。私はバージョン0.18.0を使用していますが、それが適切かどうかはわかりません。

ここで私はを見つけました

これが私が手に入れたイソクロネのサンプルです

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

かなり直感的に見えますが、見つけたドキュメントは最新のものではないので、簡単な方法を除いて、イソクロンを変更する方法がわかりません。これがお役に立てば幸いです。


2

開発者は常に変更を加えているため、使用するOTPのバージョンは非常に重要だと思います。最近、v0.19を掘り下げたばかりで、OTPのisochrone APIを呼び出す進行中の2つのラッパーの例を以下に示します。

@Raviは既にisochrone APIのURL呼び出しを提供していますが、エリアの緯度/経度を更新してOTPを起動した後にブラウザーに入力しても機能しない場合は、基本に戻ってインスタンスを確認してくださいOTPの動作-OTPの--analyst起動時にフラグを含める(GeoJSONを返す)か含めない(シェープファイルを返す)かによって、URLに対するOTPの応答が異なることに注意してください。@Raviの OTPチュートリアルに関する投稿に役立つリンクをいくつか追加しました。

以下の応答の使用に関して、役立つと思われる2つのオプションがあります。

最初に、以下のSQLクエリと同じ方向に向かうPython関数があります(Pythonで応答を抽出/読み取るのにまだ時間がかかっていないため、返されたGeoJSONを書き込むだけです)-これにはいくつかのバリエーションがあると思いますWebマッピングに必要なものです(明らかに、サイトの分析がどの言語にあるかによって異なりますが、JavaScriptではさらに簡単になると思います)が、私は例を探していません(Webあったように見えます) OTPを使用して等時線を作成したサイト

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

あるいは、PostGISに慣れている場合は、昨日私が手に入れたアプローチです。PaulRamseyのHTTP拡張機能をデータベースにインストールする必要があることに注意してください。これは、PostGIS 2.2を搭載した最新(9.5)PostgreSQLでのみテストしました。また、これは単一の等時線を抽出することを意図しているだけなので(&cutoffSec=与えられた1つのみ)、複数を抽出するように調整する必要があります- 関数のunnest()代わりに(またはjson_array_elements()関数に追加して?)

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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.