Implement raster source feature to read data from third-party sources, to be used in lua profiles.
* Adds a data structure, RasterSource, to store parsed + queryable data * Adds bindings for that and relevant data structures as well as source_function and segment_function * Adds relevant unit tests and cucumber tests * Bring-your-own-data feature
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
-- Rasterbot profile
|
||||
|
||||
-- Minimalist node_ and way_functions in order to test source_ and segment_functions
|
||||
|
||||
function node_function (node, result)
|
||||
end
|
||||
|
||||
function way_function (way, result)
|
||||
local highway = way:get_value_by_key("highway")
|
||||
local name = way:get_value_by_key("name")
|
||||
|
||||
if name then
|
||||
result.name = name
|
||||
end
|
||||
|
||||
result.forward_speed = 15
|
||||
result.backward_speed = 15
|
||||
end
|
||||
|
||||
function source_function ()
|
||||
raster_source = sources:load(
|
||||
"../test/rastersource.asc",
|
||||
0, -- lon_min
|
||||
0.1, -- lon_max
|
||||
0, -- lat_min
|
||||
0.1, -- lat_max
|
||||
5, -- nrows
|
||||
4 -- ncols
|
||||
)
|
||||
end
|
||||
|
||||
function segment_function (source, target, distance, weight)
|
||||
local sourceData = sources:interpolate(raster_source, source.lon, source.lat)
|
||||
local targetData = sources:interpolate(raster_source, target.lon, target.lat)
|
||||
print ("evaluating segment: " .. sourceData.datum .. " " .. targetData.datum)
|
||||
local invalid = sourceData.invalid_data()
|
||||
|
||||
if sourceData.datum ~= invalid and targetData.datum ~= invalid then
|
||||
local slope = math.abs(sourceData.datum - targetData.datum) / distance
|
||||
print (" slope: " .. slope)
|
||||
print (" was speed: " .. weight.speed)
|
||||
|
||||
weight.speed = weight.speed * (1 - (slope * 5))
|
||||
print (" new speed: " .. weight.speed)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,46 @@
|
||||
-- Rasterbot profile
|
||||
|
||||
-- Minimalist node_ and way_functions in order to test source_ and segment_functions
|
||||
|
||||
function node_function (node, result)
|
||||
end
|
||||
|
||||
function way_function (way, result)
|
||||
local highway = way:get_value_by_key("highway")
|
||||
local name = way:get_value_by_key("name")
|
||||
|
||||
if name then
|
||||
result.name = name
|
||||
end
|
||||
|
||||
result.forward_speed = 15
|
||||
result.backward_speed = 15
|
||||
end
|
||||
|
||||
function source_function ()
|
||||
raster_source = sources:load(
|
||||
"../test/rastersource.asc",
|
||||
0, -- lon_min
|
||||
0.1, -- lon_max
|
||||
0, -- lat_min
|
||||
0.1, -- lat_max
|
||||
5, -- nrows
|
||||
4 -- ncols
|
||||
)
|
||||
end
|
||||
|
||||
function segment_function (source, target, distance, weight)
|
||||
local sourceData = sources:query(raster_source, source.lon, source.lat)
|
||||
local targetData = sources:query(raster_source, target.lon, target.lat)
|
||||
print ("evaluating segment: " .. sourceData.datum .. " " .. targetData.datum)
|
||||
local invalid = sourceData.invalid_data()
|
||||
|
||||
if sourceData.datum ~= invalid and targetData.datum ~= invalid then
|
||||
local slope = math.abs(sourceData.datum - targetData.datum) / distance
|
||||
print (" slope: " .. slope)
|
||||
print (" was speed: " .. weight.speed)
|
||||
|
||||
weight.speed = weight.speed * (1 - (slope * 5))
|
||||
print (" new speed: " .. weight.speed)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user