diff --git a/monocle/db.py b/monocle/db.py index f1d1eeb28..72a752c6c 100644 --- a/monocle/db.py +++ b/monocle/db.py @@ -789,3 +789,17 @@ def get_all_spawn_coords(session, pokemon_id=None): if conf.REPORT_SINCE: points = points.filter(Sighting.expire_timestamp > SINCE_TIME) return points.all() + +def get_top_pokemon_by_spawnpoint(session): + query = session.execute(''' + select spawn_id, despawn_time, lat, lon, duration, pokemon_id, max(number) + from ( + select sightings.spawn_id, spawnpoints.despawn_time, spawnpoints.lat, spawnpoints.lon, spawnpoints.duration, sightings.pokemon_id, count(pokemon_id) as number + from sightings, spawnpoints + where sightings.spawn_id = spawnpoints.spawn_id + group by spawn_id, pokemon_id + order by spawn_id, number desc + ) test + group by spawn_id + ''') + return query diff --git a/monocle/static/js/main.js b/monocle/static/js/main.js index b83c147cd..0819ad792 100644 --- a/monocle/static/js/main.js +++ b/monocle/static/js/main.js @@ -235,7 +235,12 @@ function addGymsToMap (data, map) { function addSpawnsToMap (data, map) { data.forEach(function (item) { + var userPreference = getPreference('filter-'+item.top); var circle = L.circle([item.lat, item.lon], 5, {weight: 2}); + if (userPreference === 'pokemon'){ + var icon = new PokemonIcon({iconUrl: '/static/monocle-icons/icons/' + item.top + '.png', expires_at: 0}); + var circle = L.marker([item.lat, item.lon], {icon: icon, opacity: 1}); + } var time = '??'; if (item.despawn_time != null) { time = '' + Math.floor(item.despawn_time/60) + 'min ' + @@ -373,9 +378,12 @@ map.whenReady(function () { overlays.Pokestops.once('add', function(e) { getPokestops(); }) - getScanAreaCoords(); - getWorkers(); - overlays.Workers.hidden = true; + overlays.ScanArea.once('add', function(e) { + getScanAreaCoords(); + }) + overlays.Workers.once('add', function(e) { + getWorkers(); + }) setInterval(getWorkers, 14000); getPokemon(); setInterval(getPokemon, 30000); diff --git a/monocle/web_utils.py b/monocle/web_utils.py index 684b548d2..766a5f9f7 100644 --- a/monocle/web_utils.py +++ b/monocle/web_utils.py @@ -4,7 +4,7 @@ from time import time from monocle import sanitized as conf -from monocle.db import get_forts, Pokestop, session_scope, Sighting, Spawnpoint +from monocle.db import get_forts, get_top_pokemon_by_spawnpoint, Pokestop, session_scope, Sighting, Spawnpoint from monocle.utils import Units, get_address from monocle.names import DAMAGE, MOVES, POKEMON @@ -135,14 +135,19 @@ def get_gym_markers(names=POKEMON): def get_spawnpoint_markers(): with session_scope() as session: - spawns = session.query(Spawnpoint) - return [{ - 'spawn_id': spawn.spawn_id, - 'despawn_time': spawn.despawn_time, - 'lat': spawn.lat, - 'lon': spawn.lon, - 'duration': spawn.duration - } for spawn in spawns] + stat_spawns = get_top_pokemon_by_spawnpoint(session) + spawn_list = [] + for stat in stat_spawns: + if stat.spawn_id != -1: + spawn_list.append({ + 'spawn_id': stat.spawn_id, + 'despawn_time': stat.despawn_time, + 'lat': stat.lat, + 'lon': stat.lon, + 'duration': stat.duration, + 'top': stat.pokemon_id + }) + return spawn_list if conf.BOUNDARIES: from shapely.geometry import mapping