[pgrouting-dev] Proposal for OSRM access via PostgreSQL
Stephen Woodbridge
woodbri at swoodbridge.com
Sat Nov 16 09:27:01 PST 2013
Hi all,
Below are a list of PostgreSQL stored procedure function definitions
that could provide access to OSRM. Additional functions could be added
to like pgr_tsp_osrm(points[], ...) return the the optimized path ot
other useful higher level functions.
The functions below are mostly simple wrappers to access the osrm-routed
server(s). A few of points to help understand the functions below.
1. osrm_id is a reference to a table like:
create table osrm_servers (
id integer,
url text,
comment text
);
If it is set to -1 (default) the the assumed url is
'http://localhost:5000/', but is you have multiple local servers setup
on your network, then you can enter them in this table and pass in the
id for the server you want this query to access.
2. osrm_viaroute returns a json document as text. It seems to me that
the most efficient way to handle this is to just return the json
document and let the caller save it in a variable or table or where
ever. Then to provide functions to access the various objects of the
document to extract those objects in a useful structure.
3. If it is not obvious to the reader, this extension will require
postGIS extension because it is using geometry objects. This is also
required for pgRouting.
4. There is an implicit assumption that everything is using SRID:4326.
There might be a need to handle this more explicitly. For example, the
point geometry input and the geometry outputs are assumed to be
SRID:4326 and no attempt is made to transform them inside the C
functions. This also assume that the lat/lon data in OSRM is in SRID:4326.
I am aware the postgresql 9.3 has json parsing support, so that might
deprecate the osrm_jget_* functions in the future.
Looking for feedback on this proposal.
Any better or different ways of doing this?
Anything that is missing from your point of view?
Thoughts?
-Steve
---------------------------------------------------------------------
-- Core functions to access OSRM from postgresql
-- Author: Stephen Woodbridge <woodbri (at) swoodbridge (dot) com>
-- Date: 2013-11-16
---------------------------------------------------------------------
DROP TYPE IF EXISTS osrm_instruction CASCADE;
CREATE TYPE osrm_instruction AS (
rid integer,
seq integer,
direction integer,
name text,
meters integer,
postion integer,
time integer,
length text,
dir text,
azimuth float
);
CREATE OR REPLACE FUNCTION osrm_locate(
IN lat float8
IN lon float8
IN osrm_id integer default -1
OUT m_lat float8,
OUT m_lon float8
) RETURNS RECORD
CREATE OR REPLACE FUNCTION osrm_nearest(
IN lat float8
IN lon float8
IN osrm_id integer default -1
OUT m_lat float8,
OUT m_lon float8,
OUT name text
) RETURNS RECORD
CREATE OR REPLACE FUNCTION osrm_viaroute(
IN pnts geometry[],
IN alt boolean default false,
IN instructions boolean default false,
IN zoom integer default 18
IN osrm_id integer default -1
) RETURNS TEXT
CREATE OR REPLACE FUNCTION osrm_dmatrix(
IN pnts geometry[],
IN dist boolean default false,
IN osrm_id integer default -1
) RETURNS FLOAT8[]
CREATE OR REPLACE FUNCTION osrm_dmatrix(
IN pnt geometry,
IN pnts geometry[],
IN dist boolean default false,
IN osrm_id integer default -1
) RETURNS FLOAT8[]
CREATE OR REPLACE FUNCTION osrm_jget_version(
IN json text
) RETURNS TEXT
CREATE OR REPLACE FUNCTION osrm_jget_status(
IN json text,
OUT status integer,
OUT message text
) RETURNS RECORD
CREATE OR REPLACE FUNCTION osrm_jget_route(
IN json text,
IN alt boolean default false
OUT rid integer,
OUT geom geometry
) RETURNS SETOF RECORD
CREATE OR REPLACE FUNCTION osrm_jget_instructions(
IN json text,
IN alt boolean default false
) RETURNS SETOF osrm_instruction
CREATE OR REPLACE FUNCTION osrm_jget_summary(
IN json text,
IN alt boolean default false,
OUT rid integer
OUT tot_dist integer,
OUT tot_time integer,
OUT start_point text,
OUT end_point text
) RETURNS SETOF RECORD
CREATE OR REPLACE FUNCTION osrm_jget_viapoints(
IN json text
) RETURNS text
CREATE OR REPLACE FUNCTION osrm_jget_hints(
IN json text
) RETURNS text
More information about the pgrouting-dev
mailing list