Profile debug script to fetch a way from OSM
This commit is contained in:
		
							parent
							
								
									370081ec14
								
							
						
					
					
						commit
						9a20e8e614
					
				
							
								
								
									
										44
									
								
								profiles/debug_way.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								profiles/debug_way.lua
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
			
		||||
--
 | 
			
		||||
-- Fetch a way from the OpenStreetMap API and run the given profile over it.
 | 
			
		||||
--
 | 
			
		||||
-- You'll need to install luasec and xml2lua first:
 | 
			
		||||
--    > luarocks-5.1 install xml2lua
 | 
			
		||||
--    > luarocks-5.1 install luasec
 | 
			
		||||
-- [may require admin privileges]
 | 
			
		||||
-- 
 | 
			
		||||
-- Then to test way 2606296 using the foot profile:
 | 
			
		||||
--    > lua5.1 debug_way.lua foot 2606296
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
-- initialise libraries
 | 
			
		||||
local pprint = require('lib/pprint')
 | 
			
		||||
local Debug = require('lib/profile_debugger')
 | 
			
		||||
local xml2lua = require('xml2lua')
 | 
			
		||||
local handler = require('xmlhandler.tree')
 | 
			
		||||
local https = require('ssl.https')
 | 
			
		||||
 | 
			
		||||
-- load the profile
 | 
			
		||||
Debug.load_profile(arg[1])
 | 
			
		||||
 | 
			
		||||
-- load way from the OSM API
 | 
			
		||||
local url = 'https://www.openstreetmap.org/api/0.6/way/'..arg[2]
 | 
			
		||||
local body, statusCode, headers, statusText = https.request(url)
 | 
			
		||||
 | 
			
		||||
-- parse way tags
 | 
			
		||||
local parser = xml2lua.parser(handler)
 | 
			
		||||
parser:parse(body)
 | 
			
		||||
 | 
			
		||||
-- convert XML-flavoured table to a simple k/v table
 | 
			
		||||
local way = {}
 | 
			
		||||
for i, p in pairs(handler.root.osm.way.tag) do
 | 
			
		||||
  way[p._attr.k] = p._attr.v
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- call the way function
 | 
			
		||||
local result = {}
 | 
			
		||||
Debug.process_way(way,result)
 | 
			
		||||
 | 
			
		||||
-- print input and output
 | 
			
		||||
pprint(way)
 | 
			
		||||
print("=>")
 | 
			
		||||
pprint(result)
 | 
			
		||||
@ -52,7 +52,7 @@ end
 | 
			
		||||
function canonicalizeStringList(str)
 | 
			
		||||
  return str
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
-- debug helper
 | 
			
		||||
@ -123,11 +123,14 @@ function Debug.process_way(way,result)
 | 
			
		||||
  result.forward_classes = {}
 | 
			
		||||
  result.backward_classes = {}
 | 
			
		||||
  
 | 
			
		||||
  -- intercept tag function normally provided via C++
 | 
			
		||||
  -- intercept tag functions normally provided via C++
 | 
			
		||||
  function way:get_value_by_key(k)
 | 
			
		||||
    Debug.register_tag_fetch(k)
 | 
			
		||||
    return self[k]
 | 
			
		||||
  end
 | 
			
		||||
  function way:get_location_tag(k)
 | 
			
		||||
    return nil
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  -- reset tag counts
 | 
			
		||||
  Debug:reset_tag_fetch_counts()
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user