Hi  everyone , My name’s Simone Zanda

i am trying to integrate the public transport service inside  the profile 
foot.lua,   (foot + bus)

in process_way(profile, way, result,relation_data) I can find all the ways that 
have the relation <tag k = "route" v = "bus" /> I thought I would change the 
mode.walking to mode.driving and everything is working.



my problem is that I would like to exchange profiles only when there is a node 
<tag k = "highway" v = "bus_stop" /> <tag k="public_transport" v="platform”/>


I would like to have the route like this:


Start point mode.walking  -> bus_stop. -> mode.driving -> bus_stop. ->   Stop 
point mode.walking


This is my process_way 

function process_way(profile, way, result,relation_data)


  local data = {
    -- prefetch tags
    highway = way:get_value_by_key('highway'),
    bridge = way:get_value_by_key('bridge'),
    route = way:get_value_by_key('route'),
    leisure = way:get_value_by_key('leisure'),
    man_made = way:get_value_by_key('man_made'),
    railway = way:get_value_by_key('railway'),
    platform = way:get_value_by_key('platform'),
    amenity = way:get_value_by_key('amenity'),
    public_transport = way:get_value_by_key('public_transport'),
  --  bus = get_from_rel(relations, way, "route", 'bus', "route"),
  }

  if next(data) == nil then     -- is the data table empty?
    return
  end

result.forward_mode = mode.walking
result.backward_mode = mode.walking


local rel_id_list = relation_data:get_relations(way)
        -- iterate over them
        for i, rel_id in ipairs(rel_id_list) do
                -- get the relation object
                local rel = relation_data:relation(rel_id)
                -- find the type of relation
                local reltype = rel:get_value_by_key("type")
                -- is the relation a route?relation
                if reltype == 'route' then
                        local route = rel:get_value_by_key("route")
                        local route_name = rel:get_value_by_key("name")
                        if route and ( route == 'bus' or route == 'tram' ) then
                                -- let's be sure we've done something
                                local street_name = way:get_value_by_key("name")
                                print('route',route_name,'on',street_name)
                                -- adjust the weight and rate
                                result.forward_speed = 45
                                result.backward_speed = 45
                                result.forward_rate = 10.0
                                result.backward_rate = 10.0

                                result.forward_mode = mode.driving
                                result.backward_mode = mode.driving
                                return result
                        end
                end
        end

local handlers = Sequence {
    -- set the default mode for this profile. if can be changed later
    -- in case it turns we're e.g. on a ferry
    WayHandlers.default_mode,

    -- check various tags that could indicate that the way is not
    -- routable. this includes things like status=impassable,
    -- toll=yes and oneway=reversible
    WayHandlers.blocked_ways,
  -- access tags, e.g: motorcar, motor_vehicle, vehicle
    WayHandlers.access,

    -- check whether forward/backward directons are routable
    WayHandlers.oneway,

    -- check whether forward/backward directons are routable
    WayHandlers.destinations,

    -- check whether we're using a special transport mode
    WayHandlers.ferries,
    WayHandlers.movables,
        

    -- compute speed taking into account way type, maxspeed tags, etc.
    WayHandlers.speed,
    WayHandlers.surface,

    -- handle turn lanes and road classification, used for guidance
 -- handle turn lanes and road classification, used for guidance
    WayHandlers.classification,

    -- handle various other flags
    WayHandlers.roundabouts,
    WayHandlers.startpoint,

    -- set name, ref and pronunciation
    WayHandlers.names,

    -- set weight properties of the way
    WayHandlers.weights
  }

  WayHandlers.run(profile,way,result,data,handlers)
end



All the best

Simone Zanda 

_______________________________________________
OSRM-talk mailing list
OSRM-talk@openstreetmap.org
https://lists.openstreetmap.org/listinfo/osrm-talk

Reply via email to