Improvements for the location plugin

- use an api_key if one is configured
- send the location by using the api
- provide same pin color as standard map
- send overview map based on the type of the location scale
- remove the temporary file after download
This commit is contained in:
Marcel van der Boom 2014-12-19 16:31:25 +01:00
parent e12690479a
commit 1cd7ce1a9f
2 changed files with 53 additions and 14 deletions

View File

@ -1,3 +1,14 @@
-- Implement a command !loc [area] which uses
-- the static map API to get a location image
-- Not sure if this is the proper way
-- Intent: get_latlong is in time.lua, we need it here
-- loadfile "time.lua"
-- Globals
-- If you have a google api key for the geocoding/timezone api
api_key = config.google_api_key or nil
base_api = "https://maps.googleapis.com/maps/api"
function delay_s(delay) function delay_s(delay)
delay = delay or 1 delay = delay or 1
@ -5,25 +16,52 @@ function delay_s(delay)
while os.time() < time_to do end while os.time() < time_to do end
end end
function get_staticmap(area)
local api = base_api .. "/staticmap?"
-- Get a sense of scale
lat,lng,acc,types = get_latlong(area)
local scale=types[1]
if scale=="locality" then zoom=8
elseif scale=="country" then zoom=4
else zoom=13 end
local parameters =
"size=600x300" ..
"&zoom=" .. zoom ..
"&center=" .. URL.escape(area) ..
"&markers=color:red"..URL.escape("|"..area)
if api_key ~=nil and api_key ~= "" then
parameters = parameters .. "&key="..api_key
end
return lat, lng, api..parameters
end
function run(msg, matches) function run(msg, matches)
local loc = string.gsub(matches[1], "%s+", "+") local receiver = get_receiver(msg)
local receiver = get_receiver(msg) local lat,lng,url = get_staticmap(matches[1])
local zooms = {16, 18} local file_path = download_to_file(url)
for i = 1, #zooms do -- Send the actual location, is a google maps link
local zoom = zooms[i] send_location(receiver, lat, lng, ok_cb, false)
local url = "http://maps.googleapis.com/maps/api/staticmap?zoom=" .. zoom .. "&size=600x300&maptype=roadmap&center=" .. loc .. "&markers=color:blue%7Clabel:A%7C" .. loc
local file = download_to_file(url)
send_photo(receiver, file, ok_cb, false)
delay_s(2)
end
return "www.google.es/maps/place/" .. loc -- Send a picture of the map, which takes scale into account
send_photo(receiver, file_path, ok_cb, false)
delay_s(2)
-- Clean up after some time
postpone(rmtmp_cb, file_path, 20.0)
-- Return a link to the google maps stuff is now not needed anymore
return nil
end end
return { return {
description = "generates a map showing the given location", description = "Gets information about a location, maplink and overview",
usage = "!loc (location)", usage = "!loc (location)",
patterns = {"^!loc (.*)$"}, patterns = {"^!loc (.*)$"},
run = run run = run

View File

@ -36,7 +36,8 @@ function get_latlong(area)
lat = data.results[1].geometry.location.lat lat = data.results[1].geometry.location.lat
lng = data.results[1].geometry.location.lng lng = data.results[1].geometry.location.lng
acc = data.results[1].geometry.location_type acc = data.results[1].geometry.location_type
return lat,lng,acc types= data.results[1].types
return lat,lng,acc,types
end end
end end