Yêu cầu api nghỉ ngơi của OpenTripPlanner


8

theo hướng dẫn này, tôi đã thiết lập máy chủ độc lập OpenTripPlanner (phiên bản 0.11.0). Nó hoạt động rất tốt tại

 http://localhost:8080/index.html

và ví dụ tại

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

trả về một tuyến đường json.

Bây giờ tôi sẽ thực hiện yêu cầu api còn lại (Tôi rất thú vị với Isochrone api). Tôi thử trả về hình học isochrone dưới dạng một tập hợp đa giác GeoJSON tại url được chỉ định tại liên kết này nhưng không hoạt động.

Bạn có thể đề xuất url đúng để nhận Isochrone GeoJSON không?

Câu trả lời:


4

Tôi khá nhiều trong cùng một chiếc thuyền với bạn nhưng tôi nghĩ rằng tôi đã tìm ra cách tạo ra một isochrone. Tôi đang sử dụng phiên bản 0.18.0, không chắc điều đó có liên quan hay không.

Đây là nơi tôi tìm thấy ví dụ

Đây là một mẫu isochrone mà tôi đã nhận

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

Nó trông khá trực quan, nhưng tôi không nghĩ rằng các tài liệu mà tôi tìm thấy được cập nhật nên tôi không biết làm thế nào để thay đổi isochrone ngoại trừ theo những cách đơn giản. Hy vọng điều này là hữu ích.


2

Tôi tin rằng điều rất quan trọng là phiên bản OTP nào bạn sử dụng khi các nhà phát triển liên tục thực hiện các thay đổi - gần đây tôi mới đào sâu vào phiên bản 19 và dưới đây là hai trình bao bọc đang thực hiện để gọi API isochrone của OTP với nó.

@Ravi đã cung cấp cho bạn lệnh gọi URL cho API isochrone, nếu nó không hoạt động khi bạn cập nhật Lat / Lon cho khu vực của bạn và nhập nó vào trình duyệt của bạn sau khi khởi chạy OTP, hãy quay lại cơ bản và đảm bảo ví dụ của bạn của OTP hoạt động - lưu ý rằng phản hồi của OTP đối với URL sẽ khác nếu bạn bao gồm --analystcờ (trả về GeoJSON) hoặc không (trả về một shapefile) khi khởi chạy OTP. Tôi đã thêm một số liên kết hữu ích cho tôi vào bài đăng của @ Ravi về hướng dẫn OTP.

Về mặt sử dụng phản hồi dưới đây là hai lựa chọn hy vọng hữu ích.

Đầu tiên, đây là một hàm Python có cùng hướng với truy vấn SQL bên dưới (lưu ý rằng nó chỉ viết ra GeoJSON trả về vì tôi chưa dành thời gian để trích xuất / đọc phản hồi trong Python) - Tôi tưởng tượng một số biến thể của điều này là những gì bạn cần cho web-mapping (rõ ràng tùy thuộc vào ngôn ngữ gì phân tích trang web của bạn là trong, đoán nó muốn được thậm chí đơn giản hơn trong javascript), nhưng tôi đã không tìm kiếm những ví dụ (FYI vẻ như có được một web trang web đã sử dụng OTP để tạo 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

Ngoài ra, nếu bạn cảm thấy thoải mái trong PostGIS, đây là cách tiếp cận tôi đã làm việc ngày hôm qua, lưu ý rằng nó yêu cầu tiện ích mở rộng HTTP của Paul Ramsey phải được cài đặt trên cơ sở dữ liệu của bạn và tôi chỉ thử nghiệm điều này trên PostgreQuery gần đây nhất (9.5) với PostGIS 2.2. Cũng lưu ý này chỉ có nghĩa là để trích xuất một đẳng thời độc thân (vì vậy chỉ có một &cutoffSec=nhất định), nó sẽ cần phải được điều chỉnh để chiết xuất nhiều - Tôi nghĩ rằng với unnest()ở vị trí của (hoặc ngoài?) json_array_elements()Chức năng

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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.