開発者は常に変更を加えているため、使用する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;