├── .landscape.yml ├── pogom ├── exceptions.py ├── encrypt.dll ├── libencrypt.so ├── __init__.py ├── customLog.py └── transform.py ├── static ├── cover.png ├── icons │ ├── 1.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 2.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 3.png │ ├── 30.png │ ├── 31.png │ ├── 32.png │ ├── 33.png │ ├── 34.png │ ├── 35.png │ ├── 36.png │ ├── 37.png │ ├── 38.png │ ├── 39.png │ ├── 4.png │ ├── 40.png │ ├── 41.png │ ├── 42.png │ ├── 43.png │ ├── 44.png │ ├── 45.png │ ├── 46.png │ ├── 47.png │ ├── 48.png │ ├── 49.png │ ├── 5.png │ ├── 50.png │ ├── 51.png │ ├── 52.png │ ├── 53.png │ ├── 54.png │ ├── 55.png │ ├── 56.png │ ├── 57.png │ ├── 58.png │ ├── 59.png │ ├── 6.png │ ├── 60.png │ ├── 61.png │ ├── 62.png │ ├── 63.png │ ├── 64.png │ ├── 65.png │ ├── 66.png │ ├── 67.png │ ├── 68.png │ ├── 69.png │ ├── 7.png │ ├── 70.png │ ├── 71.png │ ├── 72.png │ ├── 73.png │ ├── 74.png │ ├── 75.png │ ├── 76.png │ ├── 77.png │ ├── 78.png │ ├── 79.png │ ├── 8.png │ ├── 80.png │ ├── 81.png │ ├── 82.png │ ├── 83.png │ ├── 84.png │ ├── 85.png │ ├── 86.png │ ├── 87.png │ ├── 88.png │ ├── 89.png │ ├── 9.png │ ├── 90.png │ ├── 91.png │ ├── 92.png │ ├── 93.png │ ├── 94.png │ ├── 95.png │ ├── 96.png │ ├── 97.png │ ├── 98.png │ ├── 99.png │ ├── 100.png │ ├── 101.png │ ├── 102.png │ ├── 103.png │ ├── 104.png │ ├── 105.png │ ├── 106.png │ ├── 107.png │ ├── 108.png │ ├── 109.png │ ├── 110.png │ ├── 111.png │ ├── 112.png │ ├── 113.png │ ├── 114.png │ ├── 115.png │ ├── 116.png │ ├── 117.png │ ├── 118.png │ ├── 119.png │ ├── 120.png │ ├── 121.png │ ├── 122.png │ ├── 123.png │ ├── 124.png │ ├── 125.png │ ├── 126.png │ ├── 127.png │ ├── 128.png │ ├── 129.png │ ├── 130.png │ ├── 131.png │ ├── 132.png │ ├── 133.png │ ├── 134.png │ ├── 135.png │ ├── 136.png │ ├── 137.png │ ├── 138.png │ ├── 139.png │ ├── 140.png │ ├── 141.png │ ├── 142.png │ ├── 143.png │ ├── 144.png │ ├── 145.png │ ├── 146.png │ ├── 147.png │ ├── 148.png │ ├── 149.png │ ├── 150.png │ └── 151.png ├── images │ ├── ph.png │ ├── close.png │ └── loading.gif ├── forts │ ├── Harmony.png │ ├── Mystic.png │ ├── Pstop.png │ ├── Valor.png │ ├── Instinct.png │ ├── Mystic_large.png │ ├── PstopLured.png │ ├── Uncontested.png │ ├── Valor_large.png │ ├── Harmony_large.png │ ├── Instinct_large.png │ └── Uncontested_large.png ├── icons-sprite.png ├── pixel_icons │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ ├── 10.png │ ├── 100.png │ ├── 101.png │ ├── 102.png │ ├── 103.png │ ├── 104.png │ ├── 105.png │ ├── 106.png │ ├── 107.png │ ├── 108.png │ ├── 109.png │ ├── 11.png │ ├── 110.png │ ├── 111.png │ ├── 112.png │ ├── 113.png │ ├── 114.png │ ├── 115.png │ ├── 116.png │ ├── 117.png │ ├── 118.png │ ├── 119.png │ ├── 12.png │ ├── 120.png │ ├── 121.png │ ├── 122.png │ ├── 123.png │ ├── 124.png │ ├── 125.png │ ├── 126.png │ ├── 127.png │ ├── 128.png │ ├── 129.png │ ├── 13.png │ ├── 130.png │ ├── 131.png │ ├── 132.png │ ├── 133.png │ ├── 134.png │ ├── 135.png │ ├── 136.png │ ├── 137.png │ ├── 138.png │ ├── 139.png │ ├── 14.png │ ├── 140.png │ ├── 141.png │ ├── 142.png │ ├── 143.png │ ├── 144.png │ ├── 145.png │ ├── 146.png │ ├── 147.png │ ├── 148.png │ ├── 149.png │ ├── 15.png │ ├── 150.png │ ├── 151.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 30.png │ ├── 31.png │ ├── 32.png │ ├── 33.png │ ├── 34.png │ ├── 35.png │ ├── 36.png │ ├── 37.png │ ├── 38.png │ ├── 39.png │ ├── 40.png │ ├── 41.png │ ├── 42.png │ ├── 43.png │ ├── 44.png │ ├── 45.png │ ├── 46.png │ ├── 47.png │ ├── 48.png │ ├── 49.png │ ├── 50.png │ ├── 51.png │ ├── 52.png │ ├── 53.png │ ├── 54.png │ ├── 55.png │ ├── 56.png │ ├── 57.png │ ├── 58.png │ ├── 59.png │ ├── 60.png │ ├── 61.png │ ├── 62.png │ ├── 63.png │ ├── 64.png │ ├── 65.png │ ├── 66.png │ ├── 67.png │ ├── 68.png │ ├── 69.png │ ├── 70.png │ ├── 71.png │ ├── 72.png │ ├── 73.png │ ├── 74.png │ ├── 75.png │ ├── 76.png │ ├── 77.png │ ├── 78.png │ ├── 79.png │ ├── 80.png │ ├── 81.png │ ├── 82.png │ ├── 83.png │ ├── 84.png │ ├── 85.png │ ├── 86.png │ ├── 87.png │ ├── 88.png │ ├── 89.png │ ├── 90.png │ ├── 91.png │ ├── 92.png │ ├── 93.png │ ├── 94.png │ ├── 95.png │ ├── 96.png │ ├── 97.png │ ├── 98.png │ └── 99.png ├── sounds │ └── ding.mp3 ├── appicons │ ├── 114x114.png │ ├── 120x120.png │ ├── 144x144.png │ ├── 152x152.png │ ├── 180x180.png │ └── favicon.ico ├── icons-large-sprite.png ├── mylocation-sprite-1x.png ├── sass │ ├── components │ │ ├── _icon.scss │ │ ├── _box.scss │ │ ├── _grid-demo.scss │ │ ├── _section.scss │ │ ├── _image.scss │ │ ├── _table.scss │ │ ├── _button.scss │ │ ├── _overlay.scss │ │ ├── _list.scss │ │ └── _form.scss │ ├── layout │ │ ├── _main.scss │ │ ├── _footer.scss │ │ ├── _banner.scss │ │ ├── _header.scss │ │ ├── _stats.scss │ │ └── _nav.scss │ ├── base │ │ ├── _page.scss │ │ └── _typography.scss │ ├── libs │ │ ├── _functions.scss │ │ ├── _mixins.scss │ │ └── _vars.scss │ ├── mobile.scss │ └── main.scss ├── data │ └── mapstyle.json ├── js │ ├── vendor │ │ ├── svg-overlay.js │ │ ├── classie.js │ │ └── modernizr.custom.js │ ├── mobile.js │ ├── app.js │ └── stats.js └── css │ └── statistics.css ├── .eslintignore ├── .dockerignore ├── Procfile ├── .gitignore ├── .travis.yml ├── requirements.txt ├── .eslintrc.json ├── manifest.yml ├── Tools ├── Easy-Setup │ ├── easy-setup.sh │ └── setup.bat └── Hex-Beehive-Generator │ ├── Instructions for location_generator.txt │ └── location_generator.py ├── templates ├── mobile_list.html ├── statistics.html └── map.html ├── scalingo.json ├── Dockerfile.dev ├── .github ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── app.json ├── Dockerfile ├── config └── config.ini.example ├── package.json ├── search.diff ├── README.md ├── beehive.sh ├── Gruntfile.js └── runserver.py /.landscape.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pogom/exceptions.py: -------------------------------------------------------------------------------- 1 | class APIKeyException(Exception): 2 | pass 3 | -------------------------------------------------------------------------------- /static/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/cover.png -------------------------------------------------------------------------------- /pogom/encrypt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/pogom/encrypt.dll -------------------------------------------------------------------------------- /pogom/libencrypt.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/pogom/libencrypt.so -------------------------------------------------------------------------------- /static/icons/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/1.png -------------------------------------------------------------------------------- /static/icons/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/10.png -------------------------------------------------------------------------------- /static/icons/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/11.png -------------------------------------------------------------------------------- /static/icons/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/12.png -------------------------------------------------------------------------------- /static/icons/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/13.png -------------------------------------------------------------------------------- /static/icons/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/14.png -------------------------------------------------------------------------------- /static/icons/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/15.png -------------------------------------------------------------------------------- /static/icons/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/16.png -------------------------------------------------------------------------------- /static/icons/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/17.png -------------------------------------------------------------------------------- /static/icons/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/18.png -------------------------------------------------------------------------------- /static/icons/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/19.png -------------------------------------------------------------------------------- /static/icons/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/2.png -------------------------------------------------------------------------------- /static/icons/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/20.png -------------------------------------------------------------------------------- /static/icons/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/21.png -------------------------------------------------------------------------------- /static/icons/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/22.png -------------------------------------------------------------------------------- /static/icons/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/23.png -------------------------------------------------------------------------------- /static/icons/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/24.png -------------------------------------------------------------------------------- /static/icons/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/25.png -------------------------------------------------------------------------------- /static/icons/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/26.png -------------------------------------------------------------------------------- /static/icons/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/27.png -------------------------------------------------------------------------------- /static/icons/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/28.png -------------------------------------------------------------------------------- /static/icons/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/29.png -------------------------------------------------------------------------------- /static/icons/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/3.png -------------------------------------------------------------------------------- /static/icons/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/30.png -------------------------------------------------------------------------------- /static/icons/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/31.png -------------------------------------------------------------------------------- /static/icons/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/32.png -------------------------------------------------------------------------------- /static/icons/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/33.png -------------------------------------------------------------------------------- /static/icons/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/34.png -------------------------------------------------------------------------------- /static/icons/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/35.png -------------------------------------------------------------------------------- /static/icons/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/36.png -------------------------------------------------------------------------------- /static/icons/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/37.png -------------------------------------------------------------------------------- /static/icons/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/38.png -------------------------------------------------------------------------------- /static/icons/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/39.png -------------------------------------------------------------------------------- /static/icons/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/4.png -------------------------------------------------------------------------------- /static/icons/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/40.png -------------------------------------------------------------------------------- /static/icons/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/41.png -------------------------------------------------------------------------------- /static/icons/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/42.png -------------------------------------------------------------------------------- /static/icons/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/43.png -------------------------------------------------------------------------------- /static/icons/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/44.png -------------------------------------------------------------------------------- /static/icons/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/45.png -------------------------------------------------------------------------------- /static/icons/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/46.png -------------------------------------------------------------------------------- /static/icons/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/47.png -------------------------------------------------------------------------------- /static/icons/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/48.png -------------------------------------------------------------------------------- /static/icons/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/49.png -------------------------------------------------------------------------------- /static/icons/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/5.png -------------------------------------------------------------------------------- /static/icons/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/50.png -------------------------------------------------------------------------------- /static/icons/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/51.png -------------------------------------------------------------------------------- /static/icons/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/52.png -------------------------------------------------------------------------------- /static/icons/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/53.png -------------------------------------------------------------------------------- /static/icons/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/54.png -------------------------------------------------------------------------------- /static/icons/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/55.png -------------------------------------------------------------------------------- /static/icons/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/56.png -------------------------------------------------------------------------------- /static/icons/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/57.png -------------------------------------------------------------------------------- /static/icons/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/58.png -------------------------------------------------------------------------------- /static/icons/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/59.png -------------------------------------------------------------------------------- /static/icons/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/6.png -------------------------------------------------------------------------------- /static/icons/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/60.png -------------------------------------------------------------------------------- /static/icons/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/61.png -------------------------------------------------------------------------------- /static/icons/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/62.png -------------------------------------------------------------------------------- /static/icons/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/63.png -------------------------------------------------------------------------------- /static/icons/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/64.png -------------------------------------------------------------------------------- /static/icons/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/65.png -------------------------------------------------------------------------------- /static/icons/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/66.png -------------------------------------------------------------------------------- /static/icons/67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/67.png -------------------------------------------------------------------------------- /static/icons/68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/68.png -------------------------------------------------------------------------------- /static/icons/69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/69.png -------------------------------------------------------------------------------- /static/icons/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/7.png -------------------------------------------------------------------------------- /static/icons/70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/70.png -------------------------------------------------------------------------------- /static/icons/71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/71.png -------------------------------------------------------------------------------- /static/icons/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/72.png -------------------------------------------------------------------------------- /static/icons/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/73.png -------------------------------------------------------------------------------- /static/icons/74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/74.png -------------------------------------------------------------------------------- /static/icons/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/75.png -------------------------------------------------------------------------------- /static/icons/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/76.png -------------------------------------------------------------------------------- /static/icons/77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/77.png -------------------------------------------------------------------------------- /static/icons/78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/78.png -------------------------------------------------------------------------------- /static/icons/79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/79.png -------------------------------------------------------------------------------- /static/icons/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/8.png -------------------------------------------------------------------------------- /static/icons/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/80.png -------------------------------------------------------------------------------- /static/icons/81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/81.png -------------------------------------------------------------------------------- /static/icons/82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/82.png -------------------------------------------------------------------------------- /static/icons/83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/83.png -------------------------------------------------------------------------------- /static/icons/84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/84.png -------------------------------------------------------------------------------- /static/icons/85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/85.png -------------------------------------------------------------------------------- /static/icons/86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/86.png -------------------------------------------------------------------------------- /static/icons/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/87.png -------------------------------------------------------------------------------- /static/icons/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/88.png -------------------------------------------------------------------------------- /static/icons/89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/89.png -------------------------------------------------------------------------------- /static/icons/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/9.png -------------------------------------------------------------------------------- /static/icons/90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/90.png -------------------------------------------------------------------------------- /static/icons/91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/91.png -------------------------------------------------------------------------------- /static/icons/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/92.png -------------------------------------------------------------------------------- /static/icons/93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/93.png -------------------------------------------------------------------------------- /static/icons/94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/94.png -------------------------------------------------------------------------------- /static/icons/95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/95.png -------------------------------------------------------------------------------- /static/icons/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/96.png -------------------------------------------------------------------------------- /static/icons/97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/97.png -------------------------------------------------------------------------------- /static/icons/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/98.png -------------------------------------------------------------------------------- /static/icons/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/99.png -------------------------------------------------------------------------------- /static/icons/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/100.png -------------------------------------------------------------------------------- /static/icons/101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/101.png -------------------------------------------------------------------------------- /static/icons/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/102.png -------------------------------------------------------------------------------- /static/icons/103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/103.png -------------------------------------------------------------------------------- /static/icons/104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/104.png -------------------------------------------------------------------------------- /static/icons/105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/105.png -------------------------------------------------------------------------------- /static/icons/106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/106.png -------------------------------------------------------------------------------- /static/icons/107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/107.png -------------------------------------------------------------------------------- /static/icons/108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/108.png -------------------------------------------------------------------------------- /static/icons/109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/109.png -------------------------------------------------------------------------------- /static/icons/110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/110.png -------------------------------------------------------------------------------- /static/icons/111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/111.png -------------------------------------------------------------------------------- /static/icons/112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/112.png -------------------------------------------------------------------------------- /static/icons/113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/113.png -------------------------------------------------------------------------------- /static/icons/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/114.png -------------------------------------------------------------------------------- /static/icons/115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/115.png -------------------------------------------------------------------------------- /static/icons/116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/116.png -------------------------------------------------------------------------------- /static/icons/117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/117.png -------------------------------------------------------------------------------- /static/icons/118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/118.png -------------------------------------------------------------------------------- /static/icons/119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/119.png -------------------------------------------------------------------------------- /static/icons/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/120.png -------------------------------------------------------------------------------- /static/icons/121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/121.png -------------------------------------------------------------------------------- /static/icons/122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/122.png -------------------------------------------------------------------------------- /static/icons/123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/123.png -------------------------------------------------------------------------------- /static/icons/124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/124.png -------------------------------------------------------------------------------- /static/icons/125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/125.png -------------------------------------------------------------------------------- /static/icons/126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/126.png -------------------------------------------------------------------------------- /static/icons/127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/127.png -------------------------------------------------------------------------------- /static/icons/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/128.png -------------------------------------------------------------------------------- /static/icons/129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/129.png -------------------------------------------------------------------------------- /static/icons/130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/130.png -------------------------------------------------------------------------------- /static/icons/131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/131.png -------------------------------------------------------------------------------- /static/icons/132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/132.png -------------------------------------------------------------------------------- /static/icons/133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/133.png -------------------------------------------------------------------------------- /static/icons/134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/134.png -------------------------------------------------------------------------------- /static/icons/135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/135.png -------------------------------------------------------------------------------- /static/icons/136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/136.png -------------------------------------------------------------------------------- /static/icons/137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/137.png -------------------------------------------------------------------------------- /static/icons/138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/138.png -------------------------------------------------------------------------------- /static/icons/139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/139.png -------------------------------------------------------------------------------- /static/icons/140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/140.png -------------------------------------------------------------------------------- /static/icons/141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/141.png -------------------------------------------------------------------------------- /static/icons/142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/142.png -------------------------------------------------------------------------------- /static/icons/143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/143.png -------------------------------------------------------------------------------- /static/icons/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/144.png -------------------------------------------------------------------------------- /static/icons/145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/145.png -------------------------------------------------------------------------------- /static/icons/146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/146.png -------------------------------------------------------------------------------- /static/icons/147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/147.png -------------------------------------------------------------------------------- /static/icons/148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/148.png -------------------------------------------------------------------------------- /static/icons/149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/149.png -------------------------------------------------------------------------------- /static/icons/150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/150.png -------------------------------------------------------------------------------- /static/icons/151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons/151.png -------------------------------------------------------------------------------- /static/images/ph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/images/ph.png -------------------------------------------------------------------------------- /static/forts/Harmony.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Harmony.png -------------------------------------------------------------------------------- /static/forts/Mystic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Mystic.png -------------------------------------------------------------------------------- /static/forts/Pstop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Pstop.png -------------------------------------------------------------------------------- /static/forts/Valor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Valor.png -------------------------------------------------------------------------------- /static/icons-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons-sprite.png -------------------------------------------------------------------------------- /static/images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/images/close.png -------------------------------------------------------------------------------- /static/pixel_icons/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/1.png -------------------------------------------------------------------------------- /static/pixel_icons/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/2.png -------------------------------------------------------------------------------- /static/pixel_icons/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/3.png -------------------------------------------------------------------------------- /static/pixel_icons/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/4.png -------------------------------------------------------------------------------- /static/pixel_icons/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/5.png -------------------------------------------------------------------------------- /static/pixel_icons/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/6.png -------------------------------------------------------------------------------- /static/pixel_icons/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/7.png -------------------------------------------------------------------------------- /static/pixel_icons/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/8.png -------------------------------------------------------------------------------- /static/pixel_icons/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/9.png -------------------------------------------------------------------------------- /static/sounds/ding.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/sounds/ding.mp3 -------------------------------------------------------------------------------- /static/forts/Instinct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Instinct.png -------------------------------------------------------------------------------- /static/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/images/loading.gif -------------------------------------------------------------------------------- /static/pixel_icons/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/10.png -------------------------------------------------------------------------------- /static/pixel_icons/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/100.png -------------------------------------------------------------------------------- /static/pixel_icons/101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/101.png -------------------------------------------------------------------------------- /static/pixel_icons/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/102.png -------------------------------------------------------------------------------- /static/pixel_icons/103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/103.png -------------------------------------------------------------------------------- /static/pixel_icons/104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/104.png -------------------------------------------------------------------------------- /static/pixel_icons/105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/105.png -------------------------------------------------------------------------------- /static/pixel_icons/106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/106.png -------------------------------------------------------------------------------- /static/pixel_icons/107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/107.png -------------------------------------------------------------------------------- /static/pixel_icons/108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/108.png -------------------------------------------------------------------------------- /static/pixel_icons/109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/109.png -------------------------------------------------------------------------------- /static/pixel_icons/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/11.png -------------------------------------------------------------------------------- /static/pixel_icons/110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/110.png -------------------------------------------------------------------------------- /static/pixel_icons/111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/111.png -------------------------------------------------------------------------------- /static/pixel_icons/112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/112.png -------------------------------------------------------------------------------- /static/pixel_icons/113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/113.png -------------------------------------------------------------------------------- /static/pixel_icons/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/114.png -------------------------------------------------------------------------------- /static/pixel_icons/115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/115.png -------------------------------------------------------------------------------- /static/pixel_icons/116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/116.png -------------------------------------------------------------------------------- /static/pixel_icons/117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/117.png -------------------------------------------------------------------------------- /static/pixel_icons/118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/118.png -------------------------------------------------------------------------------- /static/pixel_icons/119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/119.png -------------------------------------------------------------------------------- /static/pixel_icons/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/12.png -------------------------------------------------------------------------------- /static/pixel_icons/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/120.png -------------------------------------------------------------------------------- /static/pixel_icons/121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/121.png -------------------------------------------------------------------------------- /static/pixel_icons/122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/122.png -------------------------------------------------------------------------------- /static/pixel_icons/123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/123.png -------------------------------------------------------------------------------- /static/pixel_icons/124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/124.png -------------------------------------------------------------------------------- /static/pixel_icons/125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/125.png -------------------------------------------------------------------------------- /static/pixel_icons/126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/126.png -------------------------------------------------------------------------------- /static/pixel_icons/127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/127.png -------------------------------------------------------------------------------- /static/pixel_icons/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/128.png -------------------------------------------------------------------------------- /static/pixel_icons/129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/129.png -------------------------------------------------------------------------------- /static/pixel_icons/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/13.png -------------------------------------------------------------------------------- /static/pixel_icons/130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/130.png -------------------------------------------------------------------------------- /static/pixel_icons/131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/131.png -------------------------------------------------------------------------------- /static/pixel_icons/132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/132.png -------------------------------------------------------------------------------- /static/pixel_icons/133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/133.png -------------------------------------------------------------------------------- /static/pixel_icons/134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/134.png -------------------------------------------------------------------------------- /static/pixel_icons/135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/135.png -------------------------------------------------------------------------------- /static/pixel_icons/136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/136.png -------------------------------------------------------------------------------- /static/pixel_icons/137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/137.png -------------------------------------------------------------------------------- /static/pixel_icons/138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/138.png -------------------------------------------------------------------------------- /static/pixel_icons/139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/139.png -------------------------------------------------------------------------------- /static/pixel_icons/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/14.png -------------------------------------------------------------------------------- /static/pixel_icons/140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/140.png -------------------------------------------------------------------------------- /static/pixel_icons/141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/141.png -------------------------------------------------------------------------------- /static/pixel_icons/142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/142.png -------------------------------------------------------------------------------- /static/pixel_icons/143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/143.png -------------------------------------------------------------------------------- /static/pixel_icons/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/144.png -------------------------------------------------------------------------------- /static/pixel_icons/145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/145.png -------------------------------------------------------------------------------- /static/pixel_icons/146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/146.png -------------------------------------------------------------------------------- /static/pixel_icons/147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/147.png -------------------------------------------------------------------------------- /static/pixel_icons/148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/148.png -------------------------------------------------------------------------------- /static/pixel_icons/149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/149.png -------------------------------------------------------------------------------- /static/pixel_icons/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/15.png -------------------------------------------------------------------------------- /static/pixel_icons/150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/150.png -------------------------------------------------------------------------------- /static/pixel_icons/151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/151.png -------------------------------------------------------------------------------- /static/pixel_icons/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/16.png -------------------------------------------------------------------------------- /static/pixel_icons/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/17.png -------------------------------------------------------------------------------- /static/pixel_icons/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/18.png -------------------------------------------------------------------------------- /static/pixel_icons/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/19.png -------------------------------------------------------------------------------- /static/pixel_icons/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/20.png -------------------------------------------------------------------------------- /static/pixel_icons/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/21.png -------------------------------------------------------------------------------- /static/pixel_icons/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/22.png -------------------------------------------------------------------------------- /static/pixel_icons/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/23.png -------------------------------------------------------------------------------- /static/pixel_icons/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/24.png -------------------------------------------------------------------------------- /static/pixel_icons/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/25.png -------------------------------------------------------------------------------- /static/pixel_icons/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/26.png -------------------------------------------------------------------------------- /static/pixel_icons/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/27.png -------------------------------------------------------------------------------- /static/pixel_icons/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/28.png -------------------------------------------------------------------------------- /static/pixel_icons/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/29.png -------------------------------------------------------------------------------- /static/pixel_icons/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/30.png -------------------------------------------------------------------------------- /static/pixel_icons/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/31.png -------------------------------------------------------------------------------- /static/pixel_icons/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/32.png -------------------------------------------------------------------------------- /static/pixel_icons/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/33.png -------------------------------------------------------------------------------- /static/pixel_icons/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/34.png -------------------------------------------------------------------------------- /static/pixel_icons/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/35.png -------------------------------------------------------------------------------- /static/pixel_icons/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/36.png -------------------------------------------------------------------------------- /static/pixel_icons/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/37.png -------------------------------------------------------------------------------- /static/pixel_icons/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/38.png -------------------------------------------------------------------------------- /static/pixel_icons/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/39.png -------------------------------------------------------------------------------- /static/pixel_icons/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/40.png -------------------------------------------------------------------------------- /static/pixel_icons/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/41.png -------------------------------------------------------------------------------- /static/pixel_icons/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/42.png -------------------------------------------------------------------------------- /static/pixel_icons/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/43.png -------------------------------------------------------------------------------- /static/pixel_icons/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/44.png -------------------------------------------------------------------------------- /static/pixel_icons/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/45.png -------------------------------------------------------------------------------- /static/pixel_icons/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/46.png -------------------------------------------------------------------------------- /static/pixel_icons/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/47.png -------------------------------------------------------------------------------- /static/pixel_icons/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/48.png -------------------------------------------------------------------------------- /static/pixel_icons/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/49.png -------------------------------------------------------------------------------- /static/pixel_icons/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/50.png -------------------------------------------------------------------------------- /static/pixel_icons/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/51.png -------------------------------------------------------------------------------- /static/pixel_icons/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/52.png -------------------------------------------------------------------------------- /static/pixel_icons/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/53.png -------------------------------------------------------------------------------- /static/pixel_icons/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/54.png -------------------------------------------------------------------------------- /static/pixel_icons/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/55.png -------------------------------------------------------------------------------- /static/pixel_icons/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/56.png -------------------------------------------------------------------------------- /static/pixel_icons/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/57.png -------------------------------------------------------------------------------- /static/pixel_icons/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/58.png -------------------------------------------------------------------------------- /static/pixel_icons/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/59.png -------------------------------------------------------------------------------- /static/pixel_icons/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/60.png -------------------------------------------------------------------------------- /static/pixel_icons/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/61.png -------------------------------------------------------------------------------- /static/pixel_icons/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/62.png -------------------------------------------------------------------------------- /static/pixel_icons/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/63.png -------------------------------------------------------------------------------- /static/pixel_icons/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/64.png -------------------------------------------------------------------------------- /static/pixel_icons/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/65.png -------------------------------------------------------------------------------- /static/pixel_icons/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/66.png -------------------------------------------------------------------------------- /static/pixel_icons/67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/67.png -------------------------------------------------------------------------------- /static/pixel_icons/68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/68.png -------------------------------------------------------------------------------- /static/pixel_icons/69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/69.png -------------------------------------------------------------------------------- /static/pixel_icons/70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/70.png -------------------------------------------------------------------------------- /static/pixel_icons/71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/71.png -------------------------------------------------------------------------------- /static/pixel_icons/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/72.png -------------------------------------------------------------------------------- /static/pixel_icons/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/73.png -------------------------------------------------------------------------------- /static/pixel_icons/74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/74.png -------------------------------------------------------------------------------- /static/pixel_icons/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/75.png -------------------------------------------------------------------------------- /static/pixel_icons/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/76.png -------------------------------------------------------------------------------- /static/pixel_icons/77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/77.png -------------------------------------------------------------------------------- /static/pixel_icons/78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/78.png -------------------------------------------------------------------------------- /static/pixel_icons/79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/79.png -------------------------------------------------------------------------------- /static/pixel_icons/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/80.png -------------------------------------------------------------------------------- /static/pixel_icons/81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/81.png -------------------------------------------------------------------------------- /static/pixel_icons/82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/82.png -------------------------------------------------------------------------------- /static/pixel_icons/83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/83.png -------------------------------------------------------------------------------- /static/pixel_icons/84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/84.png -------------------------------------------------------------------------------- /static/pixel_icons/85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/85.png -------------------------------------------------------------------------------- /static/pixel_icons/86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/86.png -------------------------------------------------------------------------------- /static/pixel_icons/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/87.png -------------------------------------------------------------------------------- /static/pixel_icons/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/88.png -------------------------------------------------------------------------------- /static/pixel_icons/89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/89.png -------------------------------------------------------------------------------- /static/pixel_icons/90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/90.png -------------------------------------------------------------------------------- /static/pixel_icons/91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/91.png -------------------------------------------------------------------------------- /static/pixel_icons/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/92.png -------------------------------------------------------------------------------- /static/pixel_icons/93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/93.png -------------------------------------------------------------------------------- /static/pixel_icons/94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/94.png -------------------------------------------------------------------------------- /static/pixel_icons/95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/95.png -------------------------------------------------------------------------------- /static/pixel_icons/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/96.png -------------------------------------------------------------------------------- /static/pixel_icons/97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/97.png -------------------------------------------------------------------------------- /static/pixel_icons/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/98.png -------------------------------------------------------------------------------- /static/pixel_icons/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/pixel_icons/99.png -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/vendor/** 2 | **/dist/** 3 | **/node_modules/** 4 | **/server.js 5 | **/venv/** 6 | Gruntfile.js 7 | -------------------------------------------------------------------------------- /static/appicons/114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/appicons/114x114.png -------------------------------------------------------------------------------- /static/appicons/120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/appicons/120x120.png -------------------------------------------------------------------------------- /static/appicons/144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/appicons/144x144.png -------------------------------------------------------------------------------- /static/appicons/152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/appicons/152x152.png -------------------------------------------------------------------------------- /static/appicons/180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/appicons/180x180.png -------------------------------------------------------------------------------- /static/appicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/appicons/favicon.ico -------------------------------------------------------------------------------- /static/forts/Mystic_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Mystic_large.png -------------------------------------------------------------------------------- /static/forts/PstopLured.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/PstopLured.png -------------------------------------------------------------------------------- /static/forts/Uncontested.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Uncontested.png -------------------------------------------------------------------------------- /static/forts/Valor_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Valor_large.png -------------------------------------------------------------------------------- /static/icons-large-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/icons-large-sprite.png -------------------------------------------------------------------------------- /static/forts/Harmony_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Harmony_large.png -------------------------------------------------------------------------------- /static/forts/Instinct_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Instinct_large.png -------------------------------------------------------------------------------- /static/mylocation-sprite-1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/mylocation-sprite-1x.png -------------------------------------------------------------------------------- /static/forts/Uncontested_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/scottstamp/PokemonGo-Map/HEAD/static/forts/Uncontested_large.png -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .github 3 | .gitignore 4 | credentials.example.json 5 | node_modules 6 | Easy\ Setup 7 | pogom.db 8 | core 9 | pogom.db-* 10 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: python runserver.py -a "$AUTH_SERVICE" -u "$USERNAME" -p "$PASSWORD" -l "$LOCATION" -st $STEP_COUNT -H 0.0.0.0 -P $PORT -k $GMAPS_KEY $EXTRA_ARGS 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.idea 3 | *.db 4 | *.db-* 5 | *.sass-cache 6 | *.orig 7 | config/config.ini 8 | static/dist/ 9 | node_modules/ 10 | venv/ 11 | core 12 | src/ 13 | -------------------------------------------------------------------------------- /static/sass/components/_icon.scss: -------------------------------------------------------------------------------- 1 | /* Icon */ 2 | 3 | .icon { 4 | @include icon; 5 | border-bottom: none; 6 | position: relative; 7 | 8 | > .label { 9 | display: none; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /pogom/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | 4 | config = { 5 | 'LOCALE': 'en', 6 | 'LOCALES_DIR': 'static/dist/locales', 7 | 'ROOT_PATH': '', 8 | 'DATA_DIR': 'static/dist/data', 9 | 'GMAPS_KEY': None 10 | } 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: python 3 | python: 4 | - 2.7 5 | env: 6 | - FLASK=0.11.1 7 | install: 8 | - nvm install 4.4.7 9 | - pip install Flask==$FLASK 10 | - pip install -r requirements.txt 11 | - npm install grunt-cli -g 12 | - npm install 13 | script: 14 | - npm run build 15 | - nosetests 16 | -------------------------------------------------------------------------------- /static/data/mapstyle.json: -------------------------------------------------------------------------------- 1 | { 2 | "roadmap": "Roadmap", 3 | "satellite": "Satellite", 4 | "nolabels_style": "No Labels", 5 | "dark_style": "Dark", 6 | "style_light2": "Light2", 7 | "style_pgo": "PokemonGo", 8 | "dark_style_nl": "Dark (No Labels)", 9 | "style_light2_nl": "Light2 (No Labels)", 10 | "style_pgo_nl": "PokemonGo (No Labels)" 11 | } 12 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | six==1.10.0 2 | Flask==0.11.1 3 | Jinja2==2.8 4 | MarkupSafe==0.23 5 | Werkzeug==0.11.10 6 | configargparse==0.10.0 7 | click==6.6 8 | itsdangerous==0.24 9 | peewee==2.8.1 10 | wsgiref==0.1.2 11 | geopy==1.11.0 12 | s2sphere==0.2.4 13 | gpsoauth==0.3.0 14 | PyMySQL==0.7.5 15 | flask-cors==2.1.2 16 | flask-compress==1.3.0 17 | LatLon==1.0.1 18 | -e git://github.com/keyphact/pgoapi.git#egg=pgoapi 19 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "standard", 3 | "parserOptions": { 4 | "ecmaFeatures": { 5 | "jsx": false 6 | }, 7 | "ecmaVersion": 6, 8 | "sourceType": "module" 9 | }, 10 | "env": { 11 | "browser": true, 12 | "jquery": true 13 | }, 14 | "globals": { 15 | "google": true, 16 | "centerLat": true, 17 | "centerLng": true 18 | }, 19 | "rules": { 20 | "semi": 0 21 | } 22 | } -------------------------------------------------------------------------------- /static/sass/components/_box.scss: -------------------------------------------------------------------------------- 1 | /* Box */ 2 | 3 | .box { 4 | border-radius: _size(border-radius); 5 | border: solid _size(border-width) _palette(border); 6 | margin-bottom: _size(element-margin); 7 | padding: 1.5em; 8 | 9 | > :last-child, 10 | > :last-child > :last-child, 11 | > :last-child > :last-child > :last-child { 12 | margin-bottom: 0; 13 | } 14 | 15 | &.alt { 16 | border: 0; 17 | border-radius: 0; 18 | padding: 0; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /static/sass/components/_grid-demo.scss: -------------------------------------------------------------------------------- 1 | /* Grid Demo */ 2 | 3 | .grid-demo { 4 | display: block; 5 | margin: 0 0 _size(element-margin) 0; 6 | 7 | span { 8 | background: lighten(_palette(accent1, bg), 30); 9 | border-radius: _size(border-radius); 10 | color: rgba(0,0,0,0.25); 11 | display: block; 12 | font-weight: _font(weight-bold); 13 | height: _size(element-height); 14 | line-height: _size(element-height); 15 | text-align: center; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /static/sass/layout/_main.scss: -------------------------------------------------------------------------------- 1 | /* Main */ 2 | html, body { 3 | height: 100%; 4 | margin: 0; 5 | padding: 0; 6 | overflow: hidden; 7 | } 8 | 9 | #main { 10 | height: 100%; 11 | margin-top: 3.5em; 12 | } 13 | 14 | .wrapper { 15 | position: relative; 16 | width: 100%; 17 | height: 100%; 18 | } 19 | 20 | #header, #map, #footer { 21 | position: absolute; 22 | } 23 | 24 | #header { 25 | height: 3.5em; 26 | width: 100%; 27 | } 28 | 29 | #map { 30 | top: 3.5em; 31 | bottom: 0px; 32 | width: 100%; 33 | } 34 | -------------------------------------------------------------------------------- /static/sass/components/_section.scss: -------------------------------------------------------------------------------- 1 | /* Section/Article */ 2 | 3 | section, article { 4 | &.special { 5 | text-align: center; 6 | } 7 | } 8 | 9 | header { 10 | p { 11 | color: _palette(fg-light); 12 | position: relative; 13 | margin: 0 0 (_size(element-margin) * 0.75) 0; 14 | } 15 | 16 | h2 + p { 17 | font-size: 1.25em; 18 | margin-top: (_size(element-margin) * -0.5); 19 | } 20 | 21 | h3 + p { 22 | font-size: 1.1em; 23 | margin-top: (_size(element-margin) * -0.4); 24 | } 25 | 26 | h4 + p, 27 | h5 + p, 28 | h6 + p { 29 | font-size: 0.9em; 30 | margin-top: (_size(element-margin) * -0.3); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /manifest.yml: -------------------------------------------------------------------------------- 1 | # Edit the env and host fields below. Insert your own values. 2 | # For host you should choose something unique 3 | # like: "username-pokemongo-map" (without the quotes) 4 | # auth service can either be "google" or "PTC" 5 | --- 6 | applications: 7 | - name: pokemongo-map 8 | memory: 256M 9 | host: yourchosenservicename 10 | disk_quota: 200M 11 | instances: 1 12 | buildpack: https://github.com/cloudfoundry/buildpack-python.git 13 | env: 14 | AUTH_SERVICE: yourchosenauthservice 15 | GMAPS_KEY: yourgmapsapikey 16 | USERNAME: yourauthserviceusername 17 | PASSWORD: yourauthservicepassword 18 | LOCATION: "yourlocation" 19 | STEP_COUNT: 5 -------------------------------------------------------------------------------- /static/sass/base/_page.scss: -------------------------------------------------------------------------------- 1 | /* Basic */ 2 | 3 | // MSIE: Required for IEMobile. 4 | @-ms-viewport { 5 | width: device-width; 6 | } 7 | 8 | // MSIE: Prevents scrollbar from overlapping content. 9 | body { 10 | -ms-overflow-style: scrollbar; 11 | } 12 | 13 | // Ensures page width is always >=320px. 14 | @include breakpoint(xsmall) { 15 | html, body { 16 | min-width: 320px; 17 | } 18 | } 19 | 20 | body { 21 | background: _palette(bg); 22 | 23 | // Prevents animation/transition "flicker" on page load. 24 | // Automatically added/removed by js/main.js. 25 | &.is-loading { 26 | *, *:before, *:after { 27 | @include vendor('animation', 'none !important'); 28 | @include vendor('transition', 'none !important'); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /static/sass/layout/_footer.scss: -------------------------------------------------------------------------------- 1 | /* Footer */ 2 | 3 | #footer { 4 | @include padding(4em, 0); 5 | background: #f2f2f2; 6 | 7 | .copyright { 8 | color: _palette(fg-light); 9 | font-size: 0.9em; 10 | margin: 0 0 _size(element-margin) 0; 11 | padding: 0; 12 | text-align: center; 13 | 14 | li { 15 | border-left: solid _size(border-width) _palette(border); 16 | display: inline-block; 17 | list-style: none; 18 | margin-left: 1.5em; 19 | padding-left: 1.5em; 20 | 21 | &:first-child { 22 | border-left: 0; 23 | margin-left: 0; 24 | padding-left: 0; 25 | } 26 | } 27 | } 28 | 29 | @include breakpoint(small) { 30 | @include padding(3em, 0); 31 | 32 | .copyright { 33 | li { 34 | display: block; 35 | border-left: 0; 36 | margin-left: 0; 37 | padding-left: 0; 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /static/sass/libs/_functions.scss: -------------------------------------------------------------------------------- 1 | /// Gets a duration value. 2 | /// @param {string} $keys Key(s). 3 | /// @return {string} Value. 4 | @function _duration($keys...) { 5 | @return val($duration, $keys...); 6 | } 7 | 8 | /// Gets a font value. 9 | /// @param {string} $keys Key(s). 10 | /// @return {string} Value. 11 | @function _font($keys...) { 12 | @return val($font, $keys...); 13 | } 14 | 15 | /// Gets a misc value. 16 | /// @param {string} $keys Key(s). 17 | /// @return {string} Value. 18 | @function _misc($keys...) { 19 | @return val($misc, $keys...); 20 | } 21 | 22 | /// Gets a palette value. 23 | /// @param {string} $keys Key(s). 24 | /// @return {string} Value. 25 | @function _palette($keys...) { 26 | @return val($palette, $keys...); 27 | } 28 | 29 | /// Gets a size value. 30 | /// @param {string} $keys Key(s). 31 | /// @return {string} Value. 32 | @function _size($keys...) { 33 | @return val($size, $keys...); 34 | } 35 | -------------------------------------------------------------------------------- /static/sass/layout/_banner.scss: -------------------------------------------------------------------------------- 1 | /* Banner */ 2 | 3 | #banner { 4 | @include padding(8em, 0); 5 | background: #f6f6f6; 6 | text-align: center; 7 | 8 | h2 { 9 | font-size: 4em; 10 | line-height: 1em; 11 | margin: 0 0 0.5em 0; 12 | padding: 0; 13 | } 14 | 15 | p { 16 | font-size: 1.5em; 17 | margin-bottom: 1.75em; 18 | } 19 | 20 | @include breakpoint(xlarge) { 21 | @include padding(7em, 0); 22 | } 23 | 24 | @include breakpoint(large) { 25 | @include padding(5em, 0); 26 | 27 | h2 { 28 | font-size: 3.5em; 29 | } 30 | } 31 | 32 | @include breakpoint(medium) { 33 | @include padding(6em, 2em); 34 | } 35 | 36 | @include breakpoint(small) { 37 | @include padding(4em, 2em); 38 | 39 | h2 { 40 | font-size: 2.25em; 41 | } 42 | 43 | p { 44 | font-size: 1.25em; 45 | } 46 | } 47 | 48 | @include breakpoint(xsmall) { 49 | @include padding(4em, 2em); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /static/sass/components/_image.scss: -------------------------------------------------------------------------------- 1 | /* Image */ 2 | 3 | .image { 4 | border-radius: _size(border-radius); 5 | border: 0; 6 | display: inline-block; 7 | position: relative; 8 | 9 | img { 10 | border-radius: _size(border-radius); 11 | display: block; 12 | } 13 | 14 | &.left, 15 | &.right { 16 | max-width: 40%; 17 | 18 | img { 19 | width: 100%; 20 | } 21 | } 22 | 23 | &.left { 24 | float: left; 25 | padding: 0 1.5em 1em 0; 26 | top: 0.25em; 27 | } 28 | 29 | &.right { 30 | float: right; 31 | padding: 0 0 1em 1.5em; 32 | top: 0.25em; 33 | } 34 | 35 | &.fit { 36 | display: block; 37 | margin: 0 0 _size(element-margin) 0; 38 | width: 100%; 39 | 40 | img { 41 | width: 100%; 42 | } 43 | } 44 | 45 | &.main { 46 | display: block; 47 | margin: 0 0 (_size(element-margin) * 1.5) 0; 48 | width: 100%; 49 | 50 | img { 51 | width: 100%; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /Tools/Easy-Setup/easy-setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | scriptDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 | 5 | echo "Installing PokemonGo-Map Requirements." 6 | echo "This script may ask for your sudo/root password to perform the installation." 7 | echo "" 8 | 9 | if [ "$(grep -Ei 'debian|buntu|mint' /etc/*release)" ]; then 10 | echo "Installing python development tools..." 11 | sudo apt-get install python python-dev 12 | else 13 | echo "This script only supports debain based Linux distros." 14 | echo "Please install manually." 15 | exit 1 16 | fi 17 | 18 | echo "Installing pip..." 19 | sudo python get-pip.py 20 | echo "Installing required python packages..." 21 | pip install -r $scriptDir/../../requirements.txt 22 | 23 | echo "Configuring Google Maps API..." 24 | cp $scriptDir/../../config/config.ini.example $scriptDir/../../config/config.ini 25 | echo -n "Enter your Google Maps API key here:" 26 | read key 27 | sed -i -e "s/\"\#gmaps-key\":\ \"\"/\"gmaps-key\":\ \""$key"\"/g" $scriptDir/../config/config.ini 28 | 29 | echo "All done!" 30 | -------------------------------------------------------------------------------- /templates/mobile_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Nearby Pokémon 4 | 5 | 6 | 7 | 8 | 9 |

Nearby Pokémon

10 | 11 |
    12 | {% for pokemon in pokemon_list[:20] %} 13 |
  1. 15 |
    {{pokemon.name}}
    16 |
    - {{pokemon.distance}}m ({{pokemon.card_dir}}) -
    17 |
    {{pokemon.time_to_disappear}}
    18 |
  2. 19 | {% endfor %} 20 |
21 | 22 | 28 | 29 | origin location 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /scalingo.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PokemonGo Map", 3 | "description": "Live visualization of all the Pokémon (with option to show gyms and pokéstops) in an area on Pokémon Go.", 4 | "repository": "https://github.com/AHAAAAAAA/PokemonGo-Map", 5 | "website": "https://jz6.github.io/PoGoMap/", 6 | "env": { 7 | "AUTH_SERVICE": { 8 | "description": "Authentication service to use. (ptc or google)" 9 | }, 10 | "USERNAME": { 11 | "description": "Your username to login to the specified authentication service." 12 | }, 13 | "PASSWORD": { 14 | "description": "Your password to login to the specified authentication service." 15 | }, 16 | "LOCATION": { 17 | "description": "Location on which the map should be centered. This can be an address, co-ordinates or anything that Google Maps accepts." 18 | }, 19 | "GMAPS_KEY": { 20 | "description": "A Google Maps API key for this application." 21 | }, 22 | "STEP_COUNT": { 23 | "description": "The number of steps to take.", 24 | "value": "5" 25 | }, 26 | "EXTRA_ARGS": { 27 | "description": "Any extra arguments that you want to pass to runserver.py.", 28 | "required": false 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /static/sass/libs/_mixins.scss: -------------------------------------------------------------------------------- 1 | /// Makes an element's :before pseudoelement a FontAwesome icon. 2 | /// @param {string} $content Optional content value to use. 3 | @mixin icon($content: false) { 4 | 5 | text-decoration: none; 6 | 7 | &:before { 8 | 9 | @if $content { 10 | content: $content; 11 | } 12 | 13 | -moz-osx-font-smoothing: grayscale; 14 | -webkit-font-smoothing: antialiased; 15 | font-family: FontAwesome; 16 | font-style: normal; 17 | font-weight: normal; 18 | text-transform: none !important; 19 | 20 | } 21 | 22 | } 23 | 24 | /// Applies padding to an element, taking the current element-margin value into account. 25 | /// @param {mixed} $tb Top/bottom padding. 26 | /// @param {mixed} $lr Left/right padding. 27 | /// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left) 28 | @mixin padding($tb, $lr, $pad: (0,0,0,0)) { 29 | padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max(0.1em, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)); 30 | } 31 | 32 | /// Disable's the ability for the user to select an element. 33 | @mixin noSelect() { 34 | -khtml-user-select: none; 35 | -moz-user-select: none; 36 | -ms-user-select: none; 37 | -webkit-touch-callout: none; 38 | -webkit-user-select: none; 39 | user-select: none; 40 | } -------------------------------------------------------------------------------- /Dockerfile.dev: -------------------------------------------------------------------------------- 1 | # Expected Usage: 2 | # 3 | # # Get the repo 4 | # git clone git@github.com:AHAAAAAAA/PokemonGo-Map.git 5 | # 6 | # # Go into it 7 | # cd PokemonGo-Map 8 | # 9 | # # Build the dev container 10 | # docker build -f Dockerfile.dev -t pgodev . 11 | # 12 | # # Start the dev container in the background, mounting 13 | # # this directory over it and port mapping 5000 through 14 | # docker run -td -v `pwd`:/usr/src/app -p 5000:5000 --name pgd pgodev 15 | # 16 | # Now you can `exec` in as needed and run all the dependency 17 | # install steps, start grunt, and even start an instance, 18 | # like: 19 | # docker exec -ti pgd npm install 20 | # docker exec -ti pgd pip install -r requirements.txt --upgrade 21 | # docker exec -ti pgd grunt 22 | # or even 23 | # docker exec -ti pgd sh 24 | # > echo 'its a shell prompt, do whatever' 25 | 26 | # Be small, thanks 27 | FROM python:2.7-alpine 28 | 29 | # Default location; also where we mount over 30 | WORKDIR /usr/src/app 31 | 32 | # The basic command 33 | CMD [ "sh" ] 34 | 35 | # basic packages we're using 36 | RUN apk add --update ca-certificates build-base nodejs ruby ruby-dev libffi-dev 37 | 38 | # so that the npm-installed grunt can be called with just "grunt" 39 | RUN npm install -g grunt-cli 40 | 41 | # For travis-ci 42 | RUN gem install travis -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Expected Behavior 4 | 5 | 6 | 7 | ## Current Behavior 8 | 9 | 10 | 11 | ## Possible Solution 12 | 13 | 14 | 15 | ## Steps to Reproduce (for bugs) 16 | 17 | 18 | 1. 19 | 2. 20 | 3. 21 | 4. 22 | 23 | ## Context 24 | 25 | 26 | 27 | ## Your Environment 28 | 29 | * Version used: 30 | * Environment name and version (e.g. Python 2.7): 31 | * Operating System and version (desktop or mobile): 32 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "PokemonGo Map", 3 | "description": "Live visualization of all the Pokémon (with option to show gyms and pokéstops) in an area on Pokémon Go.", 4 | "repository": "https://github.com/AHAAAAAAA/PokemonGo-Map", 5 | "keywords": ["pokemon", "pokemon go"], 6 | "env": { 7 | "AUTH_SERVICE": { 8 | "description": "Authentication service to use. (ptc or google)" 9 | }, 10 | "USERNAME": { 11 | "description": "Your username to login to the specified authentication service." 12 | }, 13 | "PASSWORD": { 14 | "description": "Your password to login to the specified authentication service." 15 | }, 16 | "LOCATION": { 17 | "description": "Location on which the map should be centered. This can be an address, co-ordinates or anything that Google Maps accepts." 18 | }, 19 | "GMAPS_KEY": { 20 | "description": "A Google Maps API key for this application." 21 | }, 22 | "STEP_COUNT": { 23 | "description": "The number of steps to take.", 24 | "value": "5" 25 | }, 26 | "EXTRA_ARGS": { 27 | "description": "Any extra arguments that you want to pass to runserver.py.", 28 | "required": false 29 | } 30 | }, 31 | "buildpacks": [ 32 | { 33 | "url": "heroku/nodejs" 34 | }, 35 | { 36 | "url": "heroku/python" 37 | } 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Basic docker image for PokemonGo-Map 2 | # Usage: 3 | # docker build -t pokemongo-map . 4 | # docker run -d -P pokemongo-map -a ptc -u YOURUSERNAME -p YOURPASSWORD -l "Seattle, WA" -st 10 --gmaps-key CHECKTHEWIKI 5 | 6 | FROM python:2.7-alpine 7 | 8 | # Default port the webserver runs on 9 | EXPOSE 5000 10 | 11 | # Working directory for the application 12 | WORKDIR /usr/src/app 13 | 14 | # Set Entrypoint with hard-coded options 15 | ENTRYPOINT ["python", "./runserver.py", "--host", "0.0.0.0"] 16 | 17 | # Set default options when container is run without any command line arguments 18 | CMD ["-h"] 19 | 20 | # Install required system packages 21 | RUN apk add --no-cache ca-certificates 22 | RUN apk add --no-cache bash git openssh 23 | 24 | COPY requirements.txt /usr/src/app/ 25 | 26 | RUN apk add --no-cache build-base \ 27 | && pip install --no-cache-dir -r requirements.txt \ 28 | && apk del build-base 29 | 30 | COPY package.json Gruntfile.js /usr/src/app/ 31 | COPY static /usr/src/app/static 32 | 33 | RUN apk add --no-cache build-base nodejs \ 34 | && npm install -g grunt-cli \ 35 | && npm install \ 36 | && npm run-script build \ 37 | && npm uninstall -g grunt-cli \ 38 | && rm -rf node_modules \ 39 | && apk del build-base nodejs 40 | 41 | # Copy everything to the working directory (Python files, templates, config) in one go. 42 | COPY . /usr/src/app/ 43 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Description 4 | 5 | 6 | ## Motivation and Context 7 | 8 | 9 | 10 | ## How Has This Been Tested? 11 | 12 | 13 | 14 | 15 | ## Screenshots (if appropriate): 16 | 17 | ## Types of changes 18 | 19 | - [ ] Bug fix (non-breaking change which fixes an issue) 20 | - [ ] New feature (non-breaking change which adds functionality) 21 | - [ ] Breaking change (fix or feature that would cause existing functionality to change) 22 | 23 | ## Checklist: 24 | 25 | 26 | - [ ] My code follows the code style of this project. 27 | - [ ] My change requires a change to the documentation. 28 | - [ ] I have updated the documentation accordingly. 29 | -------------------------------------------------------------------------------- /pogom/customLog.py: -------------------------------------------------------------------------------- 1 | from .utils import get_pokemon_rarity, get_pokemon_name 2 | from pogom.utils import get_args 3 | from datetime import datetime 4 | 5 | args = get_args() 6 | #temporarily disabling because -o and -i is removed from 51f651228c00a96b86f5c38d1a2d53b32e5d9862 7 | #IGNORE = None 8 | #ONLY = None 9 | #if args.ignore: 10 | # IGNORE = [i.lower().strip() for i in args.ignore.split(',')] 11 | #elif args.only: 12 | # ONLY = [i.lower().strip() for i in args.only.split(',')] 13 | 14 | 15 | def printPokemon(id,lat,lng,itime): 16 | if args.display_in_console: 17 | pokemon_name = get_pokemon_name(id).lower() 18 | pokemon_rarity = get_pokemon_rarity(id).lower() 19 | pokemon_id = str(id) 20 | doPrint = True 21 | #if args.ignore: 22 | # if pokemon_name in IGNORE or pokemon_id in IGNORE: 23 | # doPrint = False 24 | #elif args.only: 25 | # if pokemon_name not in ONLY and pokemon_id not in ONLY: 26 | # doPrint = False 27 | if doPrint: 28 | timeLeft = itime-datetime.utcnow() 29 | print "======================================\n Name: %s\n Rarity: %s\n Coord: (%f,%f)\n ID: %s \n Remaining Time: %s\n======================================" % ( 30 | pokemon_name.encode('utf-8'), pokemon_rarity.encode('utf-8'),lat,lng,pokemon_id,str(timeLeft)) 31 | -------------------------------------------------------------------------------- /static/sass/mobile.scss: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: sans-serif; 3 | } 4 | h1 { 5 | margin: 5px 0 65px 0; 6 | } 7 | ol { 8 | margin: 0 -4px; 9 | padding: 0; 10 | } 11 | li { 12 | border: solid 1px #aaa; 13 | border-radius: 2px; 14 | box-shadow: 2px 2px 2px #eee; 15 | font-family: sans-serif; 16 | text-decoration: none; 17 | color: #444; 18 | background-repeat: no-repeat; 19 | background-size: 80px 60px; 20 | background-position: 0px 0px; 21 | padding-left: 80px; 22 | margin: 5px 2px; 23 | height: 60px; 24 | image-rendering: pixelated; 25 | cursor: pointer; 26 | > div { 27 | margin: 25px 2px 0px 2px; 28 | float: left; 29 | } 30 | } 31 | .origin { 32 | position: relative; 33 | top: 20px; 34 | padding-bottom: 10px; 35 | } 36 | #nav { 37 | position: absolute; 38 | top: 55px; 39 | left: 10px; 40 | button { 41 | float: left; 42 | padding: .7em 1em; 43 | border: solid 1px #ddd; 44 | background: white; 45 | font-size: 17px; 46 | border-radius: 3px; 47 | color: #333; 48 | cursor: pointer; 49 | width: 140px; 50 | } 51 | > div { 52 | display: inline-block; 53 | float: left; 54 | text-align: middle; 55 | } 56 | label { 57 | display: block; 58 | cursor: pointer; 59 | padding: 2px 0; 60 | input { 61 | margin-top: 15px; 62 | margin-left: 10px; 63 | } 64 | } 65 | } 66 | .name { 67 | font-weight: bold; 68 | } 69 | .remain { 70 | color: #999; 71 | } 72 | -------------------------------------------------------------------------------- /static/sass/main.scss: -------------------------------------------------------------------------------- 1 | @import 'libs/vars'; 2 | @import 'libs/functions'; 3 | @import 'libs/mixins'; 4 | @import 'libs/skel'; 5 | @import url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css); 6 | @import url(https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css); 7 | 8 | @include skel-breakpoints(( 9 | xlarge: '(max-width: 1680px)', 10 | large: '(max-width: 1280px)', 11 | medium: '(max-width: 980px)', 12 | small: '(max-width: 736px)', 13 | xsmall: '(max-width: 480px)' 14 | )); 15 | 16 | @include skel-layout(( 17 | reset: 'full', 18 | boxModel: 'border', 19 | grid: ( gutters: 2em ), 20 | breakpoints: ( 21 | large: ( 22 | grid: ( gutters: 1.5em ) 23 | ), 24 | small: ( 25 | grid: ( gutters: 1.25em ) 26 | ) 27 | ) 28 | )); 29 | 30 | // Base. 31 | 32 | @import 'base/page'; 33 | @import 'base/typography'; 34 | 35 | // Component. 36 | 37 | @import 'components/section'; 38 | @import 'components/form'; 39 | @import 'components/box'; 40 | @import 'components/icon'; 41 | @import 'components/image'; 42 | @import 'components/list'; 43 | @import 'components/table'; 44 | @import 'components/button'; 45 | @import 'components/grid-demo'; 46 | // @import 'components/overlay'; 47 | 48 | // Layout. 49 | 50 | @import 'layout/header'; 51 | @import 'layout/nav'; 52 | @import 'layout/stats'; 53 | @import 'layout/banner'; 54 | @import 'layout/main'; 55 | @import 'layout/footer'; 56 | -------------------------------------------------------------------------------- /Tools/Easy-Setup/setup.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | pushd %~dp0 3 | :: Running prompt elevated 4 | :------------------------------------- 5 | REM --> Check for permissions 6 | >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" 7 | 8 | REM --> If error flag set, we do not have admin. 9 | if '%errorlevel%' NEQ '0' ( 10 | goto UACPrompt 11 | ) else ( goto gotAdmin ) 12 | 13 | :UACPrompt 14 | echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 15 | echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs" 16 | 17 | "%temp%\getadmin.vbs" 18 | exit /B 19 | 20 | :gotAdmin 21 | if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" ) 22 | pushd "%CD%" 23 | CD /D "%~dp0" 24 | :-------------------------------------- 25 | 26 | IF EXIST C:\Python27 ( 27 | set PATH2=C:\Python27 28 | ) ELSE ( 29 | echo Python path not found, please specify or install. 30 | set /p PATH2= Specify Python path: 31 | ) 32 | 33 | setx PATH "%PATH%;%PATH2%;%PATH2%\Scripts;" 34 | 35 | popd 36 | 37 | "%PATH2%\python" get-pip.py 38 | cd ..\.. 39 | "%PATH2%\Scripts\pip" install -r requirements.txt 40 | "%PATH2%\Scripts\pip" install -r requirements.txt --upgrade 41 | 42 | cd config 43 | set /p API= Enter your Google API key here: 44 | "%PATH2%\python" -c "print open('config.ini.example').read().replace('#gmaps-key:','gmaps-key:%API%')" > config.ini 45 | 46 | echo All done! 47 | pause 48 | -------------------------------------------------------------------------------- /static/sass/libs/_vars.scss: -------------------------------------------------------------------------------- 1 | // Misc. 2 | $misc: ( 3 | z-index-base: 10000 4 | ); 5 | 6 | // Duration. 7 | $duration: ( 8 | nav: 0.5s, 9 | stats: 0.5s, 10 | transition: 0.2s 11 | ); 12 | 13 | // Size. 14 | $size: ( 15 | border-radius: 4px, 16 | border-width: 1px, 17 | element-height: 2.75em, 18 | element-margin: 2em 19 | ); 20 | 21 | // Font. 22 | $font: ( 23 | family: (Arial, Helvetica, sans-serif), 24 | family-fixed: ('Courier New', monospace), 25 | weight: normal, 26 | weight-bold: bold 27 | ); 28 | 29 | // Palette. 30 | $palette: ( 31 | bg: #fff, 32 | fg: #444, 33 | fg-bold: #555, 34 | fg-light: #bbb, 35 | border: rgba(144,144,144,0.25), 36 | border-bg: rgba(144,144,144,0.075), 37 | border2: rgba(144,144,144,0.5), 38 | border2-bg: rgba(144,144,144,0.2), 39 | 40 | accent1: ( 41 | bg: #5AA6ED, 42 | fg: mix(#5AA6ED, #ffffff, 25%), 43 | fg-bold: #ffffff, 44 | fg-light: mix(#5AA6ED, #ffffff, 40%), 45 | border: rgba(255,255,255,0.25), 46 | border-bg: rgba(255,255,255,0.075), 47 | border2: rgba(255,255,255,0.5), 48 | border2-bg: rgba(255,255,255,0.2) 49 | ), 50 | 51 | accent2: ( 52 | bg: #5a5a5a, 53 | fg: mix(#5a5a5a, #ffffff, 25%), 54 | fg-bold: #ffffff, 55 | fg-light: mix(#5a5a5a, #ffffff, 40%), 56 | border: rgba(255,255,255,0.15), 57 | border-bg: rgba(255,255,255,0.075), 58 | border2: rgba(255,255,255,0.5), 59 | border2-bg: rgba(255,255,255,0.2) 60 | ) 61 | ); 62 | -------------------------------------------------------------------------------- /static/sass/components/_table.scss: -------------------------------------------------------------------------------- 1 | /* Table */ 2 | 3 | .table-wrapper { 4 | -webkit-overflow-scrolling: touch; 5 | overflow-x: auto; 6 | } 7 | 8 | table { 9 | margin: 0 0 _size(element-margin) 0; 10 | width: 100%; 11 | 12 | tbody { 13 | tr { 14 | border: solid _size(border-width) _palette(border); 15 | border-left: 0; 16 | border-right: 0; 17 | 18 | &:nth-child(2n + 1) { 19 | background-color: _palette(border-bg); 20 | } 21 | } 22 | } 23 | 24 | td { 25 | padding: 0.75em 0.75em; 26 | } 27 | 28 | th { 29 | color: _palette(fg-bold); 30 | font-size: 0.9em; 31 | font-weight: _font(weight-bold); 32 | padding: 0 0.75em 0.75em 0.75em; 33 | text-align: left; 34 | } 35 | 36 | thead { 37 | border-bottom: solid (_size(border-width) * 2) _palette(border); 38 | } 39 | 40 | tfoot { 41 | border-top: solid (_size(border-width) * 2) _palette(border); 42 | } 43 | 44 | &.alt { 45 | border-collapse: separate; 46 | 47 | tbody { 48 | tr { 49 | td { 50 | border: solid _size(border-width) _palette(border); 51 | border-left-width: 0; 52 | border-top-width: 0; 53 | 54 | &:first-child { 55 | border-left-width: _size(border-width); 56 | } 57 | } 58 | 59 | &:first-child { 60 | td { 61 | border-top-width: _size(border-width); 62 | } 63 | } 64 | } 65 | } 66 | 67 | thead { 68 | border-bottom: 0; 69 | } 70 | 71 | tfoot { 72 | border-top: 0; 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /config/config.ini.example: -------------------------------------------------------------------------------- 1 | # Authentication settings 2 | auth-service: ptc 3 | username: [AxpRzzKvrJZc, IDWzWZiIGikN, DZkpGkVRSSmi, eUhMKLdipLhd, SYAawctxOLGG, vYjovKNlEdpZ, sboOrAboPkRc, wpWeQZIQXEag, wjMPqulLRYKK, MGpnTvSxodJi, jhuFUJLDQNUt, kSfuuDoTmNpO, bHApWvckRdWh, QRSuoVdagLDB, cENxIRiMwrkj, rkzpigECxDGE, pxzErHNZULNI, QXDghMPkDhTV, xOcaPIFuPLtV, DJwCqQSWIwCP, ihfUWzkGDzuA, IHeIWGpLovPX, VFEDYpSvYqLQ, UuemlkfOerew, uxHLvJOwciUP, cdLcKTPcdjNI, ODorRHGyYOKL, ssjjtPjxJZXi, jxPcndKUqlTg, hjUIxnearmjt, qHdrFQTJnvYQ, wKoRjnsmRwJQ] 4 | password: scottstamp 5 | 6 | # Database settings 7 | #db-type: sqlite # sqlite (default) or mysql 8 | #db-host: # required for mysql 9 | #db-name: # required for mysql 10 | #db-user: # required for mysql 11 | #db-pass: # required for mysql 12 | 13 | # Search settings 14 | #location: 15 | #no-gyms: # disables gym scanning (default false) 16 | #no-pokemon: # disables pokemon scanning (default false) 17 | #no-pokestops: # disables pokestop scanning (default false) 18 | #scan-delay: # default 5 19 | #step-limit: # default 12 20 | 21 | # Misc 22 | #gmaps-key: # your Google Maps API key 23 | #webhook: # webhook URL (including http://) 24 | 25 | # Webserver settings 26 | #host: # address to listen on (default 127.0.0.1) 27 | #port: # port to listen on (default 5000) 28 | 29 | #Uncomment a line when you want to change its default value (Remove # at the beginning) 30 | #username, password, location and gmaps-key are required 31 | -------------------------------------------------------------------------------- /static/js/vendor/svg-overlay.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var container = document.querySelector( 'div.container' ), 3 | triggerBttn = document.getElementById( 'trigger-overlay' ), 4 | overlay = document.querySelector( 'div.overlay' ), 5 | closeBttn = overlay.querySelector( 'button.overlay-close' ); 6 | transEndEventNames = { 7 | 'WebkitTransition': 'webkitTransitionEnd', 8 | 'MozTransition': 'transitionend', 9 | 'OTransition': 'oTransitionEnd', 10 | 'msTransition': 'MSTransitionEnd', 11 | 'transition': 'transitionend' 12 | }, 13 | transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ], 14 | support = { transitions : Modernizr.csstransitions }; 15 | 16 | function toggleOverlay() { 17 | if( classie.has( overlay, 'open' ) ) { 18 | classie.remove( overlay, 'open' ); 19 | classie.remove( container, 'overlay-open' ); 20 | classie.add( overlay, 'close' ); 21 | var onEndTransitionFn = function( ev ) { 22 | if( support.transitions ) { 23 | if( ev.propertyName !== 'visibility' ) return; 24 | this.removeEventListener( transEndEventName, onEndTransitionFn ); 25 | } 26 | classie.remove( overlay, 'close' ); 27 | }; 28 | if( support.transitions ) { 29 | overlay.addEventListener( transEndEventName, onEndTransitionFn ); 30 | } 31 | else { 32 | onEndTransitionFn(); 33 | } 34 | } 35 | else if( !classie.has( overlay, 'close' ) ) { 36 | classie.add( overlay, 'open' ); 37 | classie.add( container, 'overlay-open' ); 38 | } 39 | } 40 | 41 | triggerBttn.addEventListener( 'click', toggleOverlay ); 42 | closeBttn.addEventListener( 'click', toggleOverlay ); 43 | })(); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pogomap", 3 | "version": "0.1.0", 4 | "description": "Pokemon Go Map - Live Visualization", 5 | "main": "Gruntfile.js", 6 | "dependencies": { 7 | "babel-preset-es2015": "^6.9.0", 8 | "eslint": "^3.1.1", 9 | "eslint-config-standard": "^5.3.5", 10 | "eslint-plugin-promise": "^2.0.0", 11 | "eslint-plugin-standard": "^2.0.0", 12 | "grunt": "^0.4.5", 13 | "grunt-babel": "^6.0.0", 14 | "grunt-cli": "^1.2.0", 15 | "grunt-contrib-clean": "latest", 16 | "grunt-contrib-concat": "latest", 17 | "grunt-contrib-connect": "latest", 18 | "grunt-contrib-copy": "latest", 19 | "grunt-contrib-cssmin": "latest", 20 | "grunt-contrib-uglify": "latest", 21 | "grunt-contrib-watch": "latest", 22 | "grunt-eslint": "^19.0.0", 23 | "grunt-html-validation": "^0.1.18", 24 | "grunt-include-file": "^0.1.1", 25 | "grunt-legacssy": "latest", 26 | "grunt-minjson": "latest", 27 | "grunt-sass": "latest", 28 | "grunt-unused": "latest", 29 | "grunt-usemin": "latest" 30 | }, 31 | "scripts": { 32 | "postinstall": "./node_modules/.bin/grunt build", 33 | "build": "./node_modules/.bin/grunt build", 34 | "lint": "./node_modules/.bin/grunt lint" 35 | }, 36 | "repository": { 37 | "type": "git", 38 | "url": "git+https://github.com/AHAAAAAAA/PokemonGo-Map.git" 39 | }, 40 | "keywords": [ 41 | "Pokemon", 42 | "Go" 43 | ], 44 | "author": "Carl Taylor", 45 | "license": "MIT", 46 | "bugs": { 47 | "url": "https://github.com/AHAAAAAAA/PokemonGo-Map/issues" 48 | }, 49 | "homepage": "https://github.com/AHAAAAAAA/PokemonGo-Map#readme" 50 | } 51 | -------------------------------------------------------------------------------- /Tools/Hex-Beehive-Generator/Instructions for location_generator.txt: -------------------------------------------------------------------------------- 1 | https://github.com/AHAAAAAAA/PokemonGo-Map/wiki/How-to-use-Hex-Beehive-Generator 2 | 3 | Location_generator.py creates a list of locations in a hexagonal grid pattern around a central point. 4 | It generates a script to run all the workers for you. 5 | 6 | If you have a list of accounts, it will put the login details into the worker commands, rotating through your list 7 | 8 | 9 | Experimental Windows support! Use the --windows flag 10 | 11 | 12 | 13 | An example (Linux): 14 | python location_generator.py -lat -33.9 -lon 151.1 -st 5 -lp 3 --accounts /home/pika/accounts.csv 15 | An example (Windows): 16 | python location_generator.py -lat -33.9 -lon 151.1 -st 5 -lp 3 --accounts C:\Documents\accounts.csv --windows --installdir="C:\Downloads\PokemonGo-Map" 17 | 18 | 19 | usage: location_generator.py [-h] -lat LAT -lon LON [-st STEPS] [-lp LEAPS] 20 | [-o OUTPUT] [--accounts ACCOUNTS] [--auth AUTH] 21 | 22 | -lat LAT, --lat LAT latitude 23 | 24 | -lon LON, --lon LON longitude 25 | 26 | -st STEPS, --steps STEPS 27 | steps 28 | 29 | -lp LEAPS, --leaps LEAPS 30 | like 'steps' but for workers instead of scans 31 | 32 | -o OUTPUT, --output OUTPUT 33 | output file for the script 34 | 35 | --accounts ACCOUNTS List of your accounts, in csv [username],[password] 36 | format 37 | 38 | --auth AUTH Auth method (ptc or google) 39 | 40 | -v, --verbose Print lat/lng to stdout for debugging 41 | 42 | --windows Generate a bat file for Windows 43 | 44 | --installdir INSTALLDIR 45 | Installation directory (only used for Windows) 46 | -------------------------------------------------------------------------------- /search.diff: -------------------------------------------------------------------------------- 1 | --- a/pogom/search.py 2 | +++ b/pogom/search.py 3 | @@ -28,6 +28,7 @@ from queue import Queue, Empty 4 | from pgoapi import PGoApi 5 | from pgoapi.utilities import f2i 6 | from pgoapi import utilities as util 7 | +from pgoapi.exceptions import AuthException 8 | 9 | from . import config 10 | from .models import parse_map 11 | @@ -254,14 +255,20 @@ def check_login(args, account, api, position): 12 | 13 | # Try to login (a few times, but don't get stuck here) 14 | i = 0 15 | - while not api.login(account['auth_service'], account['username'], account['password'], position[0], position[1], position[2], False): 16 | - if i >= args.login_retries: 17 | - raise TooManyLoginAttempts('Exceeded login attempts') 18 | - else: 19 | - i += 1 20 | - log.error('Failed to login to Pokemon Go with account %s. Trying again in %g seconds', account['username'], args.login_delay) 21 | - time.sleep(args.login_delay) 22 | - 23 | + api.set_position(position[0], position[1], position[2]) 24 | + while i < args.login_retries: 25 | + try: 26 | + api.set_authentication(provider = account['auth_service'], username = account['username'], password = account['password']) 27 | + break 28 | + except AuthException: 29 | + if i >= args.login_retries: 30 | + raise TooManyLoginAttempts('Exceeded login attempts') 31 | + else: 32 | + i += 1 33 | + log.error('Failed to login to Pokemon Go with account %s. Trying again in %g seconds', account['username'], args.login_delay) 34 | + time.sleep(args.login_delay) 35 | + 36 | + api.activate_signature("encrypt.dll") 37 | log.debug('Login for account %s successful', account['username']) 38 | 39 | def map_request(api, position): 40 | -------------------------------------------------------------------------------- /pogom/transform.py: -------------------------------------------------------------------------------- 1 | from math import sqrt, sin, cos 2 | 3 | a = 6378245.0 4 | ee = 0.00669342162296594323 5 | pi = 3.14159265358979324 6 | 7 | 8 | def transform_from_wgs_to_gcj(latitude, longitude): 9 | if is_location_out_of_china(latitude, longitude): 10 | adjust_lat, adjust_lon = latitude, longitude 11 | else: 12 | adjust_lat = transform_lat(longitude - 105, latitude - 35.0) 13 | adjust_lon = transform_long(longitude - 105, latitude - 35.0) 14 | rad_lat = latitude / 180.0 * pi 15 | magic = sin(rad_lat) 16 | magic = 1 - ee * magic * magic 17 | sqrt_magic = sqrt(magic) 18 | adjust_lat = (adjust_lat * 180.0) / ((a * (1 - ee)) / (magic * sqrt_magic) * pi) 19 | adjust_lon = (adjust_lon * 180.0) / (a / sqrt_magic * cos(rad_lat) * pi) 20 | adjust_lat += latitude 21 | adjust_lon += longitude 22 | # print 'transfromed from ', wgs_loc, ' to ', adjust_loc 23 | return adjust_lat, adjust_lon 24 | 25 | 26 | def is_location_out_of_china(latitude, longitude): 27 | if longitude < 72.004 or longitude > 137.8347 or latitude < 0.8293 or latitude > 55.8271: 28 | return True 29 | return False 30 | 31 | 32 | def transform_lat(x, y): 33 | lat = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * sqrt(abs(x)) 34 | lat += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0 35 | lat += (20.0 * sin(y * pi) + 40.0 * sin(y / 3.0 * pi)) * 2.0 / 3.0 36 | lat += (160.0 * sin(y / 12.0 * pi) + 320 * sin(y * pi / 30.0)) * 2.0 / 3.0 37 | return lat 38 | 39 | 40 | def transform_long(x, y): 41 | lon = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * sqrt(abs(x)) 42 | lon += (20.0 * sin(6.0 * x * pi) + 20.0 * sin(2.0 * x * pi)) * 2.0 / 3.0 43 | lon += (20.0 * sin(x * pi) + 40.0 * sin(x / 3.0 * pi)) * 2.0 / 3.0 44 | lon += (150.0 * sin(x / 12.0 * pi) + 300.0 * sin(x / 30.0 * pi)) * 2.0 / 3.0 45 | return lon 46 | -------------------------------------------------------------------------------- /static/js/vendor/classie.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * classie - class helper functions 3 | * from bonzo https://github.com/ded/bonzo 4 | * 5 | * classie.has( elem, 'my-class' ) -> true/false 6 | * classie.add( elem, 'my-new-class' ) 7 | * classie.remove( elem, 'my-unwanted-class' ) 8 | * classie.toggle( elem, 'my-class' ) 9 | */ 10 | 11 | /*jshint browser: true, strict: true, undef: true */ 12 | /*global define: false */ 13 | 14 | ( function( window ) { 15 | 16 | 'use strict'; 17 | 18 | // class helper functions from bonzo https://github.com/ded/bonzo 19 | 20 | function classReg( className ) { 21 | return new RegExp("(^|\\s+)" + className + "(\\s+|$)"); 22 | } 23 | 24 | // classList support for class management 25 | // altho to be fair, the api sucks because it won't accept multiple classes at once 26 | var hasClass, addClass, removeClass; 27 | 28 | if ( 'classList' in document.documentElement ) { 29 | hasClass = function( elem, c ) { 30 | return elem.classList.contains( c ); 31 | }; 32 | addClass = function( elem, c ) { 33 | elem.classList.add( c ); 34 | }; 35 | removeClass = function( elem, c ) { 36 | elem.classList.remove( c ); 37 | }; 38 | } 39 | else { 40 | hasClass = function( elem, c ) { 41 | return classReg( c ).test( elem.className ); 42 | }; 43 | addClass = function( elem, c ) { 44 | if ( !hasClass( elem, c ) ) { 45 | elem.className = elem.className + ' ' + c; 46 | } 47 | }; 48 | removeClass = function( elem, c ) { 49 | elem.className = elem.className.replace( classReg( c ), ' ' ); 50 | }; 51 | } 52 | 53 | function toggleClass( elem, c ) { 54 | var fn = hasClass( elem, c ) ? removeClass : addClass; 55 | fn( elem, c ); 56 | } 57 | 58 | var classie = { 59 | // full names 60 | hasClass: hasClass, 61 | addClass: addClass, 62 | removeClass: removeClass, 63 | toggleClass: toggleClass, 64 | // short names 65 | has: hasClass, 66 | add: addClass, 67 | remove: removeClass, 68 | toggle: toggleClass 69 | }; 70 | 71 | // transport 72 | if ( typeof define === 'function' && define.amd ) { 73 | // AMD 74 | define( classie ); 75 | } else { 76 | // browser global 77 | window.classie = classie; 78 | } 79 | 80 | })( window ); 81 | -------------------------------------------------------------------------------- /static/js/mobile.js: -------------------------------------------------------------------------------- 1 | var useLoc = document.getElementById('use-loc'); 2 | useLoc.checked = localStorage.useLoc === 'true'; 3 | useLoc.onchange = function() { 4 | localStorage.useLoc = useLoc.checked; 5 | }; 6 | 7 | 8 | var navBtn = document.querySelector('#nav button'); 9 | navBtn.onclick = function() { 10 | if (localStorage.useLoc !== 'true') { 11 | navBtn.disabled = true; 12 | return (location.href="mobile"); 13 | } 14 | else if ("geolocation" in navigator) { 15 | // Getting the GPS position can be very slow on some devices 16 | navBtn.disabled = true; 17 | navBtn.innerText = 'Locating...'; 18 | 19 | // Get location and use it! 20 | navigator.geolocation.getCurrentPosition(function(p) { 21 | navBtn.innerText = 'Reloading...'; 22 | location.href='mobile?lat='+p.coords.latitude+'&lon='+p.coords.longitude; 23 | 24 | }, function(err) { 25 | navBtn.innerText = 'Reload'; 26 | navBtn.disabled = false; 27 | alert('Failed to get location: ' + err.message); 28 | 29 | }, { 30 | enableHighAccuracy: true, 31 | timeout: 5000, 32 | maximumAge: 5000 33 | }); 34 | } 35 | else { 36 | alert('Your device does not support web geolocation'); 37 | } 38 | }; 39 | 40 | function updateTimes() { 41 | // server tells us how many seconds are left we note the 42 | // pageload time and count down from there. 43 | // Yes, this could be a smidge innaccurate, but not by 44 | // more than 1 second or so which doesn't matter. 45 | // And now we don't have to deal with timestamps and dates! 46 | var remains = document.querySelectorAll('div.remain'); 47 | for (var i = 0; i < remains.length; ++i) { 48 | var element = remains[i]; 49 | var now = new Date().getTime(); 50 | var secondsPassed = Math.floor((now - page_loaded)/1000); 51 | var alivefor = element.getAttribute('disappear'); 52 | var remain = alivefor - secondsPassed; 53 | var min = Math.floor(remain / 60); 54 | var sec = remain % 60; 55 | element.innerText = (remain > 0) ? min + ' min ' + sec + ' sec' : '(expired)'; 56 | } 57 | }; 58 | setInterval(updateTimes, 1000); 59 | 60 | document.querySelectorAll("li").forEach(function(listItem) { 61 | listItem.onclick = function() { 62 | window.document.location = this.getAttribute('href'); 63 | }; 64 | }); 65 | -------------------------------------------------------------------------------- /static/sass/components/_button.scss: -------------------------------------------------------------------------------- 1 | /* Button */ 2 | 3 | input[type="submit"], 4 | input[type="reset"], 5 | input[type="button"], 6 | button, 7 | .button { 8 | @include vendor('appearance', 'none'); 9 | @include vendor('transition', 'background-color #{_duration(transition)} ease-in-out, color #{_duration(transition)} ease-in-out'); 10 | background-color: _palette(accent2, bg); 11 | border-radius: _size(border-radius); 12 | border: 0; 13 | color: _palette(accent2, fg-bold) !important; 14 | cursor: pointer; 15 | display: inline-block; 16 | font-weight: _font(weight-bold); 17 | height: 2.85em; 18 | line-height: 2.95em; 19 | padding: 0 1.5em; 20 | text-align: center; 21 | text-decoration: none; 22 | white-space: nowrap; 23 | 24 | &:hover { 25 | background-color: lighten(_palette(accent2, bg), 5); 26 | } 27 | 28 | &:active { 29 | background-color: darken(_palette(accent2, bg), 5); 30 | } 31 | 32 | &.icon { 33 | padding-left: 1.35em; 34 | 35 | &:before { 36 | margin-right: 0.5em; 37 | } 38 | } 39 | 40 | &.fit { 41 | display: block; 42 | margin: 0 0 (_size(element-margin) * 0.5) 0; 43 | width: 100%; 44 | } 45 | 46 | &.small { 47 | font-size: 0.8em; 48 | } 49 | 50 | &.big { 51 | font-size: 1.35em; 52 | } 53 | 54 | &.alt { 55 | background-color: transparent; 56 | box-shadow: inset 0 0 0 (_size(border-width) * 2) _palette(border); 57 | color: _palette(fg-bold) !important; 58 | 59 | &:hover { 60 | background-color: _palette(border-bg); 61 | } 62 | 63 | &:active { 64 | background-color: _palette(border2-bg); 65 | } 66 | 67 | &.icon { 68 | &:before { 69 | color: _palette(fg-light); 70 | } 71 | } 72 | } 73 | 74 | &.special { 75 | background-color: _palette(accent1, bg); 76 | color: _palette(accent1, fg-bold) !important; 77 | 78 | &:hover { 79 | background-color: lighten(_palette(accent1, bg), 5); 80 | } 81 | 82 | &:active { 83 | background-color: darken(_palette(accent1, bg), 5); 84 | } 85 | } 86 | 87 | &.disabled, 88 | &:disabled { 89 | background-color: _palette(fg) !important; 90 | box-shadow: inset 0 -0.15em 0 0 rgba(0,0,0,0.15); 91 | color: _palette(bg) !important; 92 | cursor: default; 93 | opacity: 0.25; 94 | } 95 | 96 | @include breakpoint(xsmall) { 97 | padding: 0; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /static/sass/components/_overlay.scss: -------------------------------------------------------------------------------- 1 | /* Overlay style */ 2 | 3 | .overlay { 4 | position: fixed; 5 | width: 100%; 6 | height: 100%; 7 | top: 0; 8 | left: 0; 9 | background: #3B3B3B; 10 | z-index: 200; 11 | 12 | /* Overlay closing cross */ 13 | .overlay-close { 14 | width: 80px; 15 | height: 80px; 16 | position: absolute; 17 | right: 20px; 18 | top: 20px; 19 | overflow: hidden; 20 | border: none; 21 | background: url(../img/cross.png) no-repeat center center; 22 | text-indent: 200%; 23 | color: transparent; 24 | outline: none; 25 | z-index: 100; 26 | } 27 | 28 | /* Menu style */ 29 | nav { 30 | text-align: center; 31 | position: relative; 32 | top: 50%; 33 | height: 60%; 34 | -webkit-transform: translateY(-50%); 35 | transform: translateY(-50%); 36 | } 37 | 38 | ul { 39 | list-style: none; 40 | padding: 0; 41 | margin: 0 auto; 42 | display: inline-block; 43 | height: 100%; 44 | position: relative; 45 | 46 | li { 47 | display: block; 48 | height: 20%; 49 | height: calc(100% / 5); 50 | min-height: 54px; 51 | 52 | a { 53 | font-size: 54px; 54 | font-weight: 300; 55 | display: block; 56 | color: #fff; 57 | -webkit-transition: color 0.2s; 58 | transition: color 0.2s; 59 | 60 | &:hover, &:focus { 61 | color: #f0f0f0; 62 | } 63 | } 64 | } 65 | } 66 | } 67 | 68 | /* Effects */ 69 | body { 70 | background: #ddd; 71 | } 72 | 73 | .container { 74 | background: #fff; 75 | -webkit-transition: -webkit-transform 0.5s; 76 | transition: transform 0.5s; 77 | 78 | &.overlay-open { 79 | -webkit-transform: scale(0.8); 80 | transform: scale(0.8); 81 | } 82 | } 83 | 84 | .overlay-contentscale { 85 | visibility: hidden; 86 | -webkit-transform: translateY(100%); 87 | transform: translateY(100%); 88 | -webkit-transition: -webkit-transform 0.5s, visibility 0s 0.5s; 89 | transition: transform 0.5s, visibility 0s 0.5s; 90 | 91 | &.open { 92 | visibility: visible; 93 | -webkit-transform: translateY(0%); 94 | transform: translateY(0%); 95 | -webkit-transition: -webkit-transform 0.5s; 96 | transition: transform 0.5s; 97 | } 98 | } 99 | 100 | @media screen and (max-height: 30.5em) { 101 | .overlay { 102 | nav { 103 | height: 70%; 104 | font-size: 34px; 105 | } 106 | 107 | ul li { 108 | min-height: 34px; 109 | } 110 | } 111 | } -------------------------------------------------------------------------------- /static/sass/layout/_header.scss: -------------------------------------------------------------------------------- 1 | /* Header */ 2 | 3 | body { 4 | padding-top: 3.125em; 5 | } 6 | 7 | #header { 8 | background: darken(_palette(accent2, bg), 12); 9 | color: _palette(accent2, fg); 10 | cursor: default; 11 | height: 3.50em; 12 | left: 0; 13 | line-height: 3.50em; 14 | position: fixed; 15 | text-align: left; 16 | top: 0; 17 | width: 100%; 18 | z-index: _misc(z-index-base) + 1; 19 | @include noSelect(); 20 | 21 | > h1 { 22 | color: _palette(accent2, fg-bold); 23 | display: inline-block; 24 | height: inherit; 25 | line-height: inherit; 26 | margin: 0; 27 | padding: 0; 28 | 29 | a { 30 | font-size: 1.25em; 31 | } 32 | } 33 | 34 | > a { 35 | @include vendor('transition', 'color #{_duration(transition)} ease-in-out'); 36 | display: inline-block; 37 | padding: 0 0.75em; 38 | color: inherit; 39 | text-decoration: none; 40 | 41 | &:hover { 42 | color: _palette(accent2, fg-bold); 43 | } 44 | 45 | &[href="#nav"] { 46 | @include icon('\f013'); 47 | -webkit-tap-highlight-color: rgba(0,0,0,0); 48 | 49 | &:before { 50 | margin: 0 0.5em 0 0; 51 | } 52 | } 53 | 54 | & + a[href="#nav"]:last-child { 55 | border-left: solid 1px _palette(accent2, border); 56 | padding-left: 1.25em; 57 | margin-left: 0.5em; 58 | } 59 | 60 | &[href="#stats"] { 61 | @include icon('\f080'); 62 | -webkit-tap-highlight-color: rgba(0,0,0,0); 63 | 64 | &:before { 65 | margin: 0 0.5em 0 0; 66 | } 67 | } 68 | 69 | & + a[href="#stats"]:last-child { 70 | border-left: solid 1px _palette(accent2, border); 71 | padding-left: 1.25em; 72 | margin-left: 0.5em; 73 | } 74 | 75 | @include breakpoint(small) { 76 | padding: 0 0.5em; 77 | 78 | & + a[href="#nav"]:last-child { 79 | padding-left: 1em; 80 | margin-left: 0.25em; 81 | } 82 | 83 | & + a[href="#stats"]:last-child { 84 | padding-left: 1em; 85 | margin-left: 0.25em; 86 | } 87 | } 88 | 89 | @include breakpoint(xsmall) { 90 | & > .label { 91 | display: none; 92 | } 93 | } 94 | } 95 | } 96 | 97 | @include breakpoint(medium) { 98 | body { 99 | padding-top: 44px; 100 | } 101 | 102 | #header { 103 | height: 44px; 104 | 105 | > h1 { 106 | left: 1em; 107 | 108 | a { 109 | font-size: 1em; 110 | } 111 | } 112 | } 113 | } 114 | 115 | @include breakpoint(xsmall) { 116 | #header { 117 | min-width: 320px; 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /static/sass/layout/_stats.scss: -------------------------------------------------------------------------------- 1 | /* Stats */ 2 | 3 | #stats { 4 | @include vendor('transform', 'translateX(25em)'); 5 | @include vendor('transition', ('transform #{_duration(stats)} ease', 'box-shadow #{_duration(stats)} ease', 'visibility #{_duration(stats)}')); 6 | -webkit-overflow-scrolling: touch; 7 | background: #F8F8F8; 8 | box-shadow: none; 9 | color: _palette(accent2, fg-bold); 10 | height: 100%; 11 | max-width: 80%; 12 | overflow-y: auto; 13 | padding: 1.5em 1.5em 4em 1.5em; 14 | position: fixed; 15 | top: 3.50em; 16 | right: 0; 17 | visibility: hidden; 18 | width: 25em; 19 | z-index: 500; 20 | h3 { 21 | font-size: 18px; 22 | font-family: 'Muli', sans-serif; 23 | color: darken(_palette(accent2, bg), 12); 24 | } 25 | p { 26 | margin-bottom: 20px; 27 | color: darken(_palette(accent2, bg), 12); 28 | } 29 | > ul { 30 | margin: 0 0 (_size(element-margin) * 0.5) 0; 31 | 32 | &.links { 33 | list-style: none; 34 | padding: 0; 35 | 36 | > li { 37 | padding: 0; 38 | 39 | > a:not(.button) { 40 | border: 0; 41 | border-top: solid 1px _palette(accent2, border); 42 | color: inherit; 43 | display: block; 44 | letter-spacing: _size(letter-spacing-alt); 45 | line-height: 3.5em; 46 | text-decoration: none; 47 | } 48 | 49 | > .button { 50 | display: block; 51 | margin: 0.5em 0 0 0; 52 | } 53 | 54 | &:first-child { 55 | > a:not(.button) { 56 | border-top: 0 !important; 57 | } 58 | } 59 | } 60 | } 61 | } 62 | 63 | .form-control > select { 64 | float: right; 65 | font-size: 18px; 66 | } 67 | 68 | .close { 69 | @include icon('\f00d'); 70 | @include vendor('transition', 'color #{_duration(transition)} ease-in-out'); 71 | -webkit-tap-highlight-color: rgba(0,0,0,0); 72 | border: 0; 73 | color: _palette(accent2, fg-light); 74 | cursor: pointer; 75 | display: none; 76 | height: 3.25em; 77 | line-height: 3.25em; 78 | padding-right: 1.25em; 79 | position: absolute; 80 | right: 0; 81 | text-align: right; 82 | top: 0; 83 | vertical-align: middle; 84 | width: 7em; 85 | 86 | &:before { 87 | font-size: 1.25em; 88 | } 89 | 90 | &:hover { 91 | color: _palette(accent2, fg-bold); 92 | } 93 | 94 | @include breakpoint(small) { 95 | height: 4em; 96 | line-height: 4em; 97 | } 98 | } 99 | 100 | &.visible { 101 | @include vendor('transform', 'translateX(0)'); 102 | box-shadow: 0 0 1.5em 0 rgba(0,0,0,0.2); 103 | visibility: visible; 104 | } 105 | 106 | @include breakpoint(small) { 107 | padding: 2.5em 1.75em; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PokemonGo Map![Python 2.7](https://img.shields.io/badge/python-2.7-blue.svg) 2 | 3 | 4 | Live visualization of all the pokemon (with option to show gyms and pokestops) in your area. This is a proof of concept that we can load all the pokemon visible nearby given a location. Currently runs on a Flask server displaying Google Maps with markers on it. 5 | 6 | Features: 7 | 8 | * Shows Pokemon, Pokestops, and gyms with a clean GUI. 9 | * Notifications 10 | * Lure information 11 | * Multithreaded mode 12 | * Filters 13 | * Independent worker threads (many can be used simulatenously to quickly generate a livemap of a huge geographical area) 14 | * Localization (en, fr, pt_br, de, ru, zh_cn, zh_hk) 15 | * DB storage (sqlite or mysql) of all found pokemon 16 | * Incredibly fast, efficient searching algorithm (compared to everything else available) 17 | 18 | [![Deploy](https://raw.githubusercontent.com/sych74/PokemonGo-Map-in-Cloud/master/images/deploy-to-jelastic.png)](https://jelastic.com/install-application/?manifest=https://raw.githubusercontent.com/sych74/PokemonGo-Map-in-Cloud/master/manifest.jps) [![Deploy](https://www.herokucdn.com/deploy/button.png)](https://github.com/AHAAAAAAA/PokemonGo-Map/wiki/Heroku-Deployment) [![Deploy on Scalingo](https://cdn.scalingo.com/deploy/button.svg)](https://my.scalingo.com/deploy?source=https://github.com/AHAAAAAAA/PokemonGo-Map) 19 | 20 | 21 | #[Twitter] (https://twitter.com/PokemapDev), [Website] (https://jz6.github.io/PoGoMap/)# 22 | 23 | ![Map](https://raw.githubusercontent.com/AHAAAAAAA/PokemonGo-Map/master/static/cover.png) 24 | 25 | 26 | ## How to setup 27 | 28 | For instructions on how to setup and run the tool, please refer to the project [wiki](https://github.com/AHAAAAAAA/PokemonGo-Map/wiki), or the [video guide](https://www.youtube.com/watch?v=RJKAulPCkRI). 29 | 30 | 31 | ## Android Version 32 | 33 | There is an [Android port](https://github.com/omkarmoghe/Pokemap) in the works. All Android related prs and issues please refer to this [repo](https://github.com/omkarmoghe/Pokemap). 34 | 35 | ## iOS Version 36 | 37 | There is an [iOS port](https://github.com/istornz/iPokeGo) in the works. All iOS related prs and issues please refer to this [repo](https://github.com/istornz/iPokeGo). 38 | 39 | ## Warnings 40 | 41 | Using this software is against the ToS of the game. You can get banned, use this tool at your own risk. 42 | 43 | 44 | ## Contributions 45 | 46 | Please submit all pull requests to [develop](https://github.com/AHAAAAAAA/PokemonGo-Map/tree/develop) branch. 47 | 48 | Building off [tejado's python pgoapi](https://github.com/tejado/pgoapi), [Mila432](https://github.com/Mila432/Pokemon_Go_API)'s API, [leegao's additions](https://github.com/leegao/pokemongo-api-demo/tree/simulation) and [Flask-GoogleMaps](https://github.com/rochacbruno/Flask-GoogleMaps). Current version relies primarily on the pgoapi and Google Maps JS API. 49 | -------------------------------------------------------------------------------- /static/css/statistics.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | body{ 4 | background: #f1f1f1; 5 | z-index: 0; 6 | overflow: auto; 7 | } 8 | 9 | table{ 10 | background: #f8f8f8; 11 | } 12 | 13 | table thead{ 14 | font-weight: bold; 15 | } 16 | 17 | table thead .title{ 18 | text-align: center; 19 | } 20 | 21 | table .even{ 22 | background: #f1f1f1; 23 | } 24 | 25 | table tfoot{ 26 | font-weight: bold; 27 | } 28 | 29 | table td{ 30 | padding: 5px; 31 | } 32 | 33 | .label{ 34 | font-weight: bold; 35 | } 36 | 37 | .totals{ 38 | margin-top: 3.5em; 39 | margin-left: 10px; 40 | margin-right: 10px; 41 | text-transform: uppercase; 42 | } 43 | 44 | .options{ 45 | padding-bottom: 5px; 46 | } 47 | 48 | .container{ 49 | overflow: auto; 50 | line-height: 20px; 51 | font-size: 15px; 52 | margin-left: 10px; 53 | margin-right: 10px; 54 | } 55 | 56 | .container .item{ 57 | float: left; 58 | border: 1px solid #acacac; 59 | border-radius: 5px; 60 | -moz-border-radius: 5px; 61 | background: #f8f8f8; 62 | margin: 0px 5px 5px 0px; 63 | padding: 5px; 64 | overflow: auto; 65 | height: 130px; 66 | min-width: 260px; 67 | } 68 | 69 | .container .item .image{ 70 | float: left; 71 | width: 40px; 72 | text-align: center; 73 | } 74 | 75 | .container .item .name{ 76 | height: 30px; 77 | line-height: 30px; 78 | } 79 | 80 | .container .item .name a{ 81 | font-weight: bold; 82 | } 83 | 84 | .overlay{ 85 | z-index: 100000; 86 | display: none; 87 | background-color: rgba(0,0,0,0.5); 88 | position: fixed; 89 | top: 0; 90 | left: 0; 91 | width: 100%; 92 | min-height: 100%; 93 | } 94 | 95 | #location_map{ 96 | height: 100%; 97 | } 98 | 99 | #times_list{ 100 | float: left; 101 | background: white; 102 | position: fixed; 103 | top: 60px; 104 | bottom: 60px; 105 | width: 200px; 106 | z-index: 9999; 107 | overflow: auto; 108 | } 109 | 110 | #times_list div{ 111 | padding-bottom: 2px; 112 | } 113 | 114 | #times_list .row0{ 115 | background: #f1f1f1; 116 | } 117 | 118 | #times_list .row1{ 119 | background: #f8f8f8; 120 | } 121 | 122 | .overlay .close{ 123 | position: relative; 124 | float: right; 125 | margin-top: 20px; 126 | margin-right: 100px; 127 | background: white; 128 | cursor: pointer; 129 | } 130 | 131 | .overlay .content{ 132 | background: white; 133 | margin: 50px; 134 | border-radius: 10px; 135 | -moz-border-radius: 10px; 136 | padding: 10px; 137 | position: fixed; 138 | top: 0px; 139 | bottom: 0px; 140 | left: 0px; 141 | right: 0px; 142 | } 143 | 144 | #loading{ 145 | width: 100%; 146 | height: 100%; 147 | position: fixed; 148 | top: 0px; 149 | } 150 | 151 | #loading img{ 152 | top: 50%; 153 | left: 50%; 154 | margin-right: -50%; 155 | position: absolute; 156 | } -------------------------------------------------------------------------------- /static/sass/base/_typography.scss: -------------------------------------------------------------------------------- 1 | /* Type */ 2 | 3 | @import url(https://fonts.googleapis.com/css?family=Muli:400,300); 4 | 5 | body, input, select, textarea { 6 | color: _palette(fg); 7 | font-family: _font(family); 8 | font-size: 13pt; 9 | font-weight: _font(weight); 10 | line-height: 1.65; 11 | 12 | @include breakpoint(xlarge) { 13 | font-size: 11pt; 14 | } 15 | 16 | @include breakpoint(large) { 17 | font-size: 11pt; 18 | } 19 | 20 | @include breakpoint(medium) { 21 | font-size: 12pt; 22 | } 23 | 24 | @include breakpoint(small) { 25 | font-size: 12pt; 26 | } 27 | 28 | @include breakpoint(xsmall) { 29 | font-size: 12pt; 30 | } 31 | } 32 | 33 | a { 34 | color: _palette(accent1, bg); 35 | text-decoration: underline; 36 | 37 | &:hover { 38 | text-decoration: none; 39 | } 40 | } 41 | 42 | strong, b { 43 | color: _palette(fg-bold); 44 | font-weight: _font(weight-bold); 45 | } 46 | 47 | em, i { 48 | font-style: italic; 49 | } 50 | 51 | p { 52 | margin: 0 0 _size(element-margin) 0; 53 | } 54 | 55 | h1, h2, h3, h4, h5, h6 { 56 | color: _palette(fg-bold); 57 | font-weight: _font(weight-bold); 58 | line-height: 1.5; 59 | margin: 0 0 (_size(element-margin) * 0.5) 0; 60 | 61 | a { 62 | color: inherit; 63 | text-decoration: none; 64 | } 65 | } 66 | 67 | h2 { 68 | font-size: 1.75em; 69 | } 70 | 71 | h3 { 72 | font-size: 1.35em; 73 | } 74 | 75 | h4 { 76 | font-size: 1.1em; 77 | } 78 | 79 | h5 { 80 | font-size: 0.9em; 81 | } 82 | 83 | h6 { 84 | font-size: 0.7em; 85 | } 86 | 87 | sub { 88 | font-size: 0.8em; 89 | position: relative; 90 | top: 0.5em; 91 | } 92 | 93 | sup { 94 | font-size: 0.8em; 95 | position: relative; 96 | top: -0.5em; 97 | } 98 | 99 | blockquote { 100 | border-left: solid (_size(border-width) * 4) _palette(border); 101 | font-style: italic; 102 | margin: 0 0 _size(element-margin) 0; 103 | padding: (_size(element-margin) / 4) 0 (_size(element-margin) / 4) _size(element-margin); 104 | } 105 | 106 | code { 107 | background: _palette(border-bg); 108 | border-radius: _size(border-radius); 109 | border: solid _size(border-width) _palette(border); 110 | font-family: _font(family-fixed); 111 | font-size: 0.9em; 112 | margin: 0 0.25em; 113 | padding: 0.25em 0.65em; 114 | } 115 | 116 | pre { 117 | -webkit-overflow-scrolling: touch; 118 | font-family: _font(family-fixed); 119 | font-size: 0.9em; 120 | margin: 0 0 _size(element-margin) 0; 121 | 122 | code { 123 | display: block; 124 | line-height: 1.75; 125 | padding: 1em 1.5em; 126 | overflow-x: auto; 127 | } 128 | } 129 | 130 | hr { 131 | border: 0; 132 | border-bottom: solid _size(border-width) _palette(border); 133 | margin: _size(element-margin) 0; 134 | 135 | &.major { 136 | margin: (_size(element-margin) * 1.5) 0; 137 | } 138 | } 139 | 140 | .align-left { 141 | text-align: left; 142 | } 143 | 144 | .align-center { 145 | text-align: center; 146 | } 147 | 148 | .align-right { 149 | text-align: right; 150 | } 151 | -------------------------------------------------------------------------------- /beehive.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | nohup python runserver.py -os -l '34.0096056, -118.4987565' -k 'AIzaSyAqt50QYiG04rgPCcpvFSMppxty7WOSrN4' -H 0.0.0.0 -P 8088 -st 10 -u scottstamp1 -p scottstamp & 3 | sleep 0.5; nohup python runserver.py -ns -l '34.0096056, -118.4987565' -st 5 & 4 | sleep 0.5; nohup python runserver.py -ns -l '34.0181075748, -118.498101538' -st 5 & 5 | sleep 0.5; nohup python runserver.py -ns -l '34.0133839298, -118.489587284' -st 5 & 6 | sleep 0.5; nohup python runserver.py -ns -l '34.0048819939, -118.490243058' -st 5 & 7 | sleep 0.5; nohup python runserver.py -ns -l '34.00110361, -118.499411331' -st 5 & 8 | sleep 0.5; nohup python runserver.py -ns -l '34.0058265844, -118.507924904' -st 5 & 9 | sleep 0.5; nohup python runserver.py -ns -l '34.0143286132, -118.507270885' -st 5 & 10 | sleep 0.5; nohup python runserver.py -ns -l '34.0266095343, -118.497446446' -st 5 & 11 | sleep 0.5; nohup python runserver.py -ns -l '34.0218869131, -118.488929086' -st 5 & 12 | sleep 0.5; nohup python runserver.py -ns -l '34.0171615737, -118.480417256' -st 5 & 13 | sleep 0.5; nohup python runserver.py -ns -l '34.0086585697, -118.481071722' -st 5 & 14 | sleep 0.5; nohup python runserver.py -ns -l '34.0001577949, -118.481730559' -st 5 & 15 | sleep 0.5; nohup python runserver.py -ns -l '33.9963778578, -118.490898742' -st 5 & 16 | sleep 0.5; nohup python runserver.py -ns -l '33.9926016047, -118.500066032' -st 5 & 17 | sleep 0.5; nohup python runserver.py -ns -l '33.9973234774, -118.508581084' -st 5 & 18 | sleep 0.5; nohup python runserver.py -ns -l '34.0020468833, -118.517092495' -st 5 & 19 | sleep 0.5; nohup python runserver.py -ns -l '34.0105500875, -118.516441671' -st 5 & 20 | sleep 0.5; nohup python runserver.py -ns -l '34.0190510333, -118.515786212' -st 5 & 21 | sleep 0.5; nohup python runserver.py -ns -l '34.0228328116, -118.506616695' -st 5 & 22 | sleep 0.5; nohup python runserver.py -ns -l '34.0351114786, -118.496791223' -st 5 & 23 | sleep 0.5; nohup python runserver.py -ns -l '34.0303876781, -118.488271033' -st 5 & 24 | sleep 0.5; nohup python runserver.py -ns -l '34.0256634416, -118.479758154' -st 5 & 25 | sleep 0.5; nohup python runserver.py -ns -l '34.0209385314, -118.471246415' -st 5 & 26 | sleep 0.5; nohup python runserver.py -ns -l '34.0124335572, -118.471902002' -st 5 & 27 | sleep 0.5; nohup python runserver.py -ns -l '34.0039332369, -118.472560476' -st 5 & 28 | sleep 0.5; nohup python runserver.py -ns -l '33.9954330034, -118.473219002' -st 5 & 29 | sleep 0.5; nohup python runserver.py -ns -l '33.9916528139, -118.482389249' -st 5 & 30 | sleep 0.5; nohup python runserver.py -ns -l '33.9878764501, -118.491555338' -st 5 & 31 | sleep 0.5; nohup python runserver.py -ns -l '33.9840995841, -118.500720602' -st 5 & 32 | sleep 0.5; nohup python runserver.py -ns -l '33.9888225582, -118.509236859' -st 5 & 33 | sleep 0.5; nohup python runserver.py -ns -l '33.9935447832, -118.517747695' -st 5 & 34 | sleep 0.5; nohup python runserver.py -ns -l '33.9982664966, -118.526259274' -st 5 & 35 | sleep 0.5; nohup python runserver.py -ns -l '34.006771779, -118.525609215' -st 5 & 36 | sleep 0.5; nohup python runserver.py -ns -l '34.0152723782, -118.524956006' -st 5 & 37 | sleep 0.5; nohup python runserver.py -ns -l '34.0237728602, -118.524302483' -st 5 & 38 | sleep 0.5; nohup python runserver.py -ns -l '34.0275561549, -118.515130641' -st 5 & 39 | sleep 0.5; nohup python runserver.py -ns -l '34.0313342512, -118.505961331' -st 5 & 40 | -------------------------------------------------------------------------------- /static/sass/layout/_nav.scss: -------------------------------------------------------------------------------- 1 | /* Nav */ 2 | 3 | #nav { 4 | @include vendor('transform', 'translateX(-18em)'); 5 | @include vendor('transition', ('transform #{_duration(nav)} ease', 'box-shadow #{_duration(nav)} ease', 'visibility #{_duration(nav)}')); 6 | -webkit-overflow-scrolling: touch; 7 | background: #F8F8F8; 8 | box-shadow: none; 9 | color: _palette(accent2, fg-bold); 10 | height: 100%; 11 | max-width: 80%; 12 | overflow-y: auto; 13 | position: fixed; 14 | top: 3.50em; 15 | left: 0; 16 | visibility: hidden; 17 | width: 18em; 18 | z-index: 500; 19 | h3 { 20 | font-size: 18px; 21 | font-family: 'Muli', sans-serif; 22 | color: darken(_palette(accent2, bg), 12); 23 | } 24 | p { 25 | margin-bottom: 20px; 26 | color: darken(_palette(accent2, bg), 12); 27 | } 28 | > ul { 29 | margin: 0 0 (_size(element-margin) * 0.5) 0; 30 | 31 | &.links { 32 | list-style: none; 33 | padding: 0; 34 | 35 | > li { 36 | padding: 0; 37 | 38 | > a:not(.button) { 39 | border: 0; 40 | border-top: solid 1px _palette(accent2, border); 41 | color: inherit; 42 | display: block; 43 | letter-spacing: _size(letter-spacing-alt); 44 | line-height: 3.5em; 45 | text-decoration: none; 46 | } 47 | 48 | > .button { 49 | display: block; 50 | margin: 0.5em 0 0 0; 51 | } 52 | 53 | &:first-child { 54 | > a:not(.button) { 55 | border-top: 0 !important; 56 | } 57 | } 58 | } 59 | } 60 | } 61 | 62 | .form-control > select, 63 | .form-control > span { 64 | float: right; 65 | } 66 | 67 | .close { 68 | @include icon('\f00d'); 69 | @include vendor('transition', 'color #{_duration(transition)} ease-in-out'); 70 | -webkit-tap-highlight-color: rgba(0,0,0,0); 71 | border: 0; 72 | color: _palette(accent2, fg-light); 73 | cursor: pointer; 74 | display: none; 75 | height: 3.25em; 76 | line-height: 3.25em; 77 | padding-right: 1.25em; 78 | position: absolute; 79 | right: 0; 80 | text-align: right; 81 | top: 0; 82 | vertical-align: middle; 83 | width: 7em; 84 | 85 | &:before { 86 | font-size: 1.25em; 87 | } 88 | 89 | &:hover { 90 | color: _palette(accent2, fg-bold); 91 | } 92 | 93 | @include breakpoint(small) { 94 | height: 4em; 95 | line-height: 4em; 96 | } 97 | } 98 | 99 | &.visible { 100 | @include vendor('transform', 'translateX(0)'); 101 | box-shadow: 0 0 1.5em 0 rgba(0,0,0,0.2); 102 | visibility: visible; 103 | } 104 | 105 | @include breakpoint(small) { 106 | padding: 2.5em 1.75em; 107 | } 108 | 109 | .ui-accordion-content { 110 | padding-top: 0.5em; 111 | padding-right: 0.5em; 112 | padding-bottom: 0.5em; 113 | padding-left: 0.5em; 114 | } 115 | .ui-state-active, 116 | .onoffswitch-checkbox:checked+.onoffswitch-label { 117 | border-color: #3b3b3b; 118 | background-color: #3b3b3b; 119 | } 120 | .onoffswitch-checkbox:checked+.onoffswitch-label:before { 121 | border-color: #c0c0c0; 122 | } 123 | .ui-accordion-header.ui-state-active { 124 | color: #d6d6d6; 125 | } 126 | .ui-corner-all { 127 | border-top-left-radius: 0px; 128 | border-top-right-radius: 0px; 129 | border-bottom-left-radius: 0px; 130 | border-bottom-right-radius: 0px; 131 | } 132 | .ui-state-focus { 133 | outline: none; 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /static/sass/components/_list.scss: -------------------------------------------------------------------------------- 1 | /* List */ 2 | 3 | ol { 4 | list-style: decimal; 5 | margin: 0 0 _size(element-margin) 0; 6 | padding-left: 1.25em; 7 | 8 | li { 9 | padding-left: 0.25em; 10 | } 11 | } 12 | 13 | ul { 14 | list-style: disc; 15 | margin: 0 0 _size(element-margin) 0; 16 | padding-left: 1em; 17 | 18 | li { 19 | padding-left: 0.5em; 20 | } 21 | 22 | &.alt { 23 | list-style: none; 24 | padding-left: 0; 25 | 26 | li { 27 | border-top: solid _size(border-width) _palette(border); 28 | padding: 0.5em 0; 29 | 30 | &:first-child { 31 | border-top: 0; 32 | padding-top: 0; 33 | } 34 | } 35 | } 36 | 37 | &.icons { 38 | cursor: default; 39 | list-style: none; 40 | padding-left: 0; 41 | 42 | li { 43 | display: inline-block; 44 | padding: 0 1em 0 0; 45 | 46 | &:last-child { 47 | padding-right: 0; 48 | } 49 | 50 | .icon { 51 | &:before { 52 | font-size: 2em; 53 | } 54 | } 55 | } 56 | } 57 | 58 | &.actions { 59 | cursor: default; 60 | list-style: none; 61 | padding-left: 0; 62 | 63 | li { 64 | display: inline-block; 65 | padding: 0 (_size(element-margin) * 0.5) 0 0; 66 | vertical-align: middle; 67 | 68 | &:last-child { 69 | padding-right: 0; 70 | } 71 | } 72 | 73 | &.small { 74 | li { 75 | padding: 0 (_size(element-margin) * 0.25) 0 0; 76 | } 77 | } 78 | 79 | &.vertical { 80 | li { 81 | display: block; 82 | padding: (_size(element-margin) * 0.5) 0 0 0; 83 | 84 | &:first-child { 85 | padding-top: 0; 86 | } 87 | 88 | > * { 89 | margin-bottom: 0; 90 | } 91 | } 92 | 93 | &.small { 94 | li { 95 | padding: (_size(element-margin) * 0.25) 0 0 0; 96 | 97 | &:first-child { 98 | padding-top: 0; 99 | } 100 | } 101 | } 102 | } 103 | 104 | &.fit { 105 | display: table; 106 | margin-left: (_size(element-margin) * -0.5); 107 | padding: 0; 108 | table-layout: fixed; 109 | width: calc(100% + #{(_size(element-margin) * 0.5)}); 110 | 111 | li { 112 | display: table-cell; 113 | padding: 0 0 0 (_size(element-margin) * 0.5); 114 | 115 | > * { 116 | margin-bottom: 0; 117 | } 118 | } 119 | 120 | &.small { 121 | margin-left: (_size(element-margin) * -0.25); 122 | width: calc(100% + #{(_size(element-margin) * 0.25)}); 123 | 124 | li { 125 | padding: 0 0 0 (_size(element-margin) * 0.25); 126 | } 127 | } 128 | } 129 | 130 | @include breakpoint(xsmall) { 131 | margin: 0 0 _size(element-margin) 0; 132 | 133 | li { 134 | padding: (_size(element-margin) * 0.5) 0 0 0; 135 | display: block; 136 | text-align: center; 137 | width: 100%; 138 | 139 | &:first-child { 140 | padding-top: 0; 141 | } 142 | 143 | > * { 144 | width: 100%; 145 | margin: 0 !important; 146 | 147 | &.icon { 148 | &:before { 149 | margin-left: -2em; 150 | } 151 | } 152 | } 153 | } 154 | 155 | &.small { 156 | li { 157 | padding: (_size(element-margin) * 0.25) 0 0 0; 158 | 159 | &:first-child { 160 | padding-top: 0; 161 | } 162 | } 163 | } 164 | } 165 | } 166 | } 167 | 168 | dl { 169 | margin: 0 0 _size(element-margin) 0; 170 | 171 | dt { 172 | display: block; 173 | font-weight: _font(weight-bold); 174 | margin: 0 0 (_size(element-margin) * 0.5) 0; 175 | } 176 | 177 | dd { 178 | margin-left: _size(element-margin); 179 | } 180 | } 181 | -------------------------------------------------------------------------------- /templates/statistics.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Pokemon Go Map - Statistics 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 38 | 39 | 40 | 41 | 42 | 46 | 60 |
61 |

62 |

63 |
64 |
Loading
65 |
66 |
67 |
68 |
Close
69 |

70 |
71 | 72 |
73 | 74 |
75 |
76 |
77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /static/sass/components/_form.scss: -------------------------------------------------------------------------------- 1 | /* Form */ 2 | 3 | form { 4 | margin: 0 0 _size(element-margin) 0; 5 | } 6 | 7 | input[type="text"], 8 | input[type="password"], 9 | input[type="email"], 10 | input[type="tel"], 11 | textarea { 12 | @include vendor('appearance', 'none'); 13 | background: _palette(border-bg); 14 | border-radius: _size(border-radius); 15 | border: none; 16 | border: solid _size(border-width) _palette(border); 17 | color: inherit; 18 | display: block; 19 | outline: 0; 20 | padding: 0 1em; 21 | text-decoration: none; 22 | width: 100%; 23 | 24 | &:invalid { 25 | box-shadow: none; 26 | } 27 | 28 | &:focus { 29 | border-color: _palette(accent1, bg); 30 | box-shadow: 0 0 0 _size(border-width) _palette(accent1, bg); 31 | } 32 | } 33 | 34 | input[type="text"], 35 | input[type="password"], 36 | input[type="email"] { 37 | height: _size(element-height); 38 | } 39 | 40 | textarea { 41 | padding: 0.75em 1em; 42 | } 43 | 44 | ::-webkit-input-placeholder { 45 | color: _palette(fg-light) !important; 46 | opacity: 1.0; 47 | } 48 | 49 | :-moz-placeholder { 50 | color: _palette(fg-light) !important; 51 | opacity: 1.0; 52 | } 53 | 54 | ::-moz-placeholder { 55 | color: _palette(fg-light) !important; 56 | opacity: 1.0; 57 | } 58 | 59 | :-ms-input-placeholder { 60 | color: _palette(fg-light) !important; 61 | opacity: 1.0; 62 | } 63 | 64 | .formerize-placeholder { 65 | color: _palette(fg-light) !important; 66 | opacity: 1.0; 67 | } 68 | 69 | .switch-container { 70 | float: left; 71 | width: 100%; 72 | h3 { 73 | margin-bottom: 0 !important; 74 | float: left; 75 | } 76 | } 77 | 78 | .form-control { 79 | display: block; 80 | margin-bottom: 15px; 81 | h3 { 82 | margin-bottom: 15px; 83 | } 84 | input[type="text"] { 85 | background-color: white; 86 | border: 1px solid #aaa; 87 | border-radius: 4px; 88 | display: block; 89 | padding: 0 10px; 90 | &:focus, &:active { 91 | color: #3b3b3b; 92 | border: 1px solid #3b3b3b; 93 | outline: 0; 94 | box-shadow: none; 95 | } 96 | } 97 | } 98 | 99 | .onoffswitch { 100 | position: relative; 101 | width: 50px; 102 | float: right; 103 | -webkit-user-select:none; 104 | -moz-user-select:none; 105 | -ms-user-select: none; 106 | .onoffswitch-checkbox { 107 | display: none; 108 | } 109 | .onoffswitch-label { 110 | display: block; 111 | overflow: hidden; 112 | cursor: pointer; 113 | height: 20px; 114 | padding: 0; 115 | line-height: 20px; 116 | border: 2px solid #CCCCCC; 117 | border-radius: 20px; 118 | background-color: #FFFFFF; 119 | transition: background-color 0.3s ease-in; 120 | } 121 | .onoffswitch-label:before { 122 | content: ""; 123 | display: block; 124 | width: 20px; 125 | margin: 0px; 126 | background: #FFFFFF; 127 | position: absolute; 128 | top: 0; 129 | bottom: 0; 130 | right: 30px; 131 | border: 2px solid #CCCCCC; 132 | border-radius: 20px; 133 | transition: all 0.3s ease-in 0s; 134 | } 135 | } 136 | 137 | .onoffswitch-checkbox:checked + .onoffswitch-label { 138 | background-color: #4A80F5; 139 | } 140 | .onoffswitch-checkbox:checked + .onoffswitch-label, .onoffswitch-checkbox:checked + .onoffswitch-label:before { 141 | border-color: #4A80F5; 142 | } 143 | .onoffswitch-checkbox:checked + .onoffswitch-label:before { 144 | right: 0px; 145 | } 146 | 147 | .select2-container { 148 | width: 100% !important; 149 | } 150 | 151 | .select2-container--default .select2-selection--multiple .select2-selection__choice, 152 | .select2-container--default .select2-results__option--highlighted { 153 | background-color: #6b6b6b !important; 154 | color: #e4e4e4; 155 | } 156 | 157 | .select2-container--default.select2-container--focus .select2-selection--multiple { 158 | border: 1px solid darken(_palette(accent2, bg), 12); 159 | } 160 | 161 | .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { 162 | color: #FFFFFF !important; 163 | } 164 | 165 | .select2-search__field { 166 | width: auto !important; 167 | } 168 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | grunt.initConfig({ 4 | pkg: grunt.file.readJSON('package.json'), 5 | 6 | sass: { 7 | dist: { 8 | files: { 9 | 'static/dist/css/app.built.css': [ 10 | 'static/sass/main.scss', 11 | 'static/sass/pokemon-sprite.scss' 12 | ], 13 | 'static/dist/css/mobile.built.css': 'static/sass/mobile.scss', 14 | 'static/dist/css/statistics.built.css': 'static/css/statistics.css' 15 | } 16 | } 17 | }, 18 | eslint: { 19 | src: ['static/js/*.js', '!js/vendor/**/*.js'] 20 | }, 21 | babel: { 22 | options: { 23 | sourceMap: true, 24 | presets: ['es2015'] 25 | }, 26 | dist: { 27 | files: { 28 | 'static/dist/js/app.built.js': 'static/js/app.js', 29 | 'static/dist/js/map.built.js': 'static/js/map.js', 30 | 'static/dist/js/mobile.built.js': 'static/js/mobile.js', 31 | 'static/dist/js/stats.built.js': 'static/js/stats.js', 32 | 'static/dist/js/statistics.built.js': 'static/js/statistics.js' 33 | } 34 | } 35 | }, 36 | uglify: { 37 | options: { 38 | banner: '/*\n <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> \n*/\n', 39 | sourceMap: true, 40 | compress: { 41 | unused: false 42 | } 43 | }, 44 | build: { 45 | files: { 46 | 'static/dist/js/app.min.js': 'static/dist/js/app.built.js', 47 | 'static/dist/js/map.min.js': 'static/dist/js/map.built.js', 48 | 'static/dist/js/mobile.min.js': 'static/dist/js/mobile.built.js', 49 | 'static/dist/js/stats.min.js': 'static/dist/js/stats.built.js', 50 | 'static/dist/js/statistics.min.js': 'static/dist/js/statistics.built.js' 51 | } 52 | } 53 | }, 54 | minjson: { 55 | build: { 56 | files: { 57 | 'static/dist/data/pokemon.min.json': 'static/data/pokemon.json', 58 | 'static/dist/data/mapstyle.min.json': 'static/data/mapstyle.json', 59 | 'static/dist/locales/de.min.json': 'static/locales/de.json', 60 | 'static/dist/locales/fr.min.json': 'static/locales/fr.json', 61 | 'static/dist/locales/pt_br.min.json': 'static/locales/pt_br.json', 62 | 'static/dist/locales/ru.min.json': 'static/locales/ru.json', 63 | 'static/dist/locales/zh_cn.min.json': 'static/locales/zh_cn.json', 64 | 'static/dist/locales/zh_hk.min.json': 'static/locales/zh_hk.json' 65 | } 66 | } 67 | }, 68 | clean: { 69 | build: { 70 | src: 'static/dist' 71 | } 72 | }, 73 | watch: { 74 | options: { 75 | interval: 1000, 76 | spawn: true 77 | }, 78 | src: { 79 | files: ['**/*.html'], 80 | options: { livereload: true } 81 | }, 82 | js: { 83 | files: ['**/*.js', '**/*.json', '!node_modules/**/*.js', '!static/dist/**/*.js', '!static/dist/**/*.json'], 84 | options: { livereload: true }, 85 | tasks: ['js-lint', 'js-build'] 86 | }, 87 | css: { 88 | files: '**/*.scss', 89 | options: { livereload: true }, 90 | tasks: ['css-build'] 91 | } 92 | }, 93 | cssmin: { 94 | options: { 95 | banner: '/*\n <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> \n*/\n' 96 | }, 97 | build: { 98 | files: { 99 | 'static/dist/css/app.min.css': 'static/dist/css/app.built.css', 100 | 'static/dist/css/mobile.min.css': 'static/dist/css/mobile.built.css', 101 | 'static/dist/css/statistics.min.css': 'static/dist/css/statistics.built.css' 102 | } 103 | } 104 | } 105 | }); 106 | 107 | grunt.loadNpmTasks('grunt-contrib-uglify'); 108 | grunt.loadNpmTasks('grunt-eslint'); 109 | grunt.loadNpmTasks('grunt-contrib-watch'); 110 | grunt.loadNpmTasks('grunt-sass'); 111 | grunt.loadNpmTasks('grunt-contrib-copy'); 112 | grunt.loadNpmTasks('grunt-contrib-clean'); 113 | grunt.loadNpmTasks('grunt-contrib-cssmin'); 114 | grunt.loadNpmTasks('grunt-usemin'); 115 | grunt.loadNpmTasks('grunt-contrib-concat'); 116 | grunt.loadNpmTasks('grunt-html-validation'); 117 | grunt.loadNpmTasks('grunt-babel'); 118 | grunt.loadNpmTasks('grunt-minjson'); 119 | 120 | grunt.registerTask('js-build', ['babel', 'uglify', 'minjson']); 121 | grunt.registerTask('css-build', ['sass', 'cssmin']); 122 | grunt.registerTask('js-lint', ['eslint']); 123 | 124 | grunt.registerTask('build', ['clean', 'js-build', 'css-build']); 125 | grunt.registerTask('lint', ['js-lint']); 126 | grunt.registerTask('default', ['build', 'watch']); 127 | 128 | }; 129 | -------------------------------------------------------------------------------- /static/js/app.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 3 | "use strict"; 4 | 5 | // Methods/polyfills. 6 | 7 | // addEventsListener 8 | var addEventsListener = function(o, t, e) { 9 | var n, i = t.split(" "); 10 | for (n in i) o.addEventListener(i[n], e) 11 | } 12 | 13 | // classList | (c) @remy | github.com/remy/polyfills | rem.mit-license.org 14 | ! function() { 15 | function t(t) { 16 | this.el = t; 17 | for (var n = t.className.replace(/^\s+|\s+$/g, "").split(/\s+/), i = 0; i < n.length; i++) e.call(this, n[i]) 18 | } 19 | 20 | function n(t, n, i) { 21 | Object.defineProperty ? Object.defineProperty(t, n, { 22 | get: i 23 | }) : t.__defineGetter__(n, i) 24 | } 25 | if (!("undefined" == typeof window.Element || "classList" in document.documentElement)) { 26 | var i = Array.prototype, 27 | e = i.push, 28 | s = i.splice, 29 | o = i.join; 30 | t.prototype = { 31 | add: function(t) { 32 | this.contains(t) || (e.call(this, t), this.el.className = this.toString()) 33 | }, 34 | contains: function(t) { 35 | return -1 != this.el.className.indexOf(t) 36 | }, 37 | item: function(t) { 38 | return this[t] || null 39 | }, 40 | remove: function(t) { 41 | if (this.contains(t)) { 42 | for (var n = 0; n < this.length && this[n] != t; n++); 43 | s.call(this, n, 1), this.el.className = this.toString() 44 | } 45 | }, 46 | toString: function() { 47 | return o.call(this, " ") 48 | }, 49 | toggle: function(t) { 50 | return this.contains(t) ? this.remove(t) : this.add(t), this.contains(t) 51 | } 52 | }, window.DOMTokenList = t, n(Element.prototype, "classList", function() { 53 | return new t(this) 54 | }) 55 | } 56 | }(); 57 | 58 | // Vars. 59 | var $body = document.querySelector('body'); 60 | 61 | // Breakpoints. 62 | skel.breakpoints({ 63 | xlarge: '(max-width: 1680px)', 64 | large: '(max-width: 1280px)', 65 | medium: '(max-width: 980px)', 66 | small: '(max-width: 736px)', 67 | xsmall: '(max-width: 480px)' 68 | }); 69 | 70 | // Disable animations/transitions until everything's loaded. 71 | $body.classList.add('is-loading'); 72 | 73 | window.addEventListener('load', function() { 74 | $body.classList.remove('is-loading'); 75 | }); 76 | 77 | // Nav. 78 | var $nav = document.querySelector('#nav'), 79 | $navToggle = document.querySelector('a[href="#nav"]'), 80 | $navClose; 81 | 82 | // Stats. 83 | var $stats = document.querySelector('#stats'), 84 | $statsToggle = document.querySelector('a[href="#stats"]'), 85 | $statsClose; 86 | 87 | // Event: Prevent clicks/taps inside the nav from bubbling. 88 | addEventsListener($nav, 'click touchend', function(event) { 89 | event.stopPropagation(); 90 | }); 91 | 92 | if($stats){ 93 | // Event: Prevent clicks/taps inside the stats from bubbling. 94 | addEventsListener($stats, 'click touchend', function(event) { 95 | event.stopPropagation(); 96 | }); 97 | } 98 | 99 | // Event: Hide nav on body click/tap. 100 | addEventsListener($body, 'click touchend', function(event) { 101 | // on ios safari, when navToggle is clicked, 102 | // this function executes too, so if the target 103 | // is the toggle button, exit this function 104 | if (event.target.matches('a[href="#nav"]')) { 105 | return; 106 | } 107 | if ($stats && event.target.matches('a[href="#stats]')) { 108 | return; 109 | } 110 | $nav.classList.remove('visible'); 111 | if($stats) 112 | $stats.classList.remove('visible'); 113 | }); 114 | 115 | // Toggle. 116 | 117 | // Event: Toggle nav on click. 118 | $navToggle.addEventListener('click', function(event) { 119 | event.preventDefault(); 120 | event.stopPropagation(); 121 | $nav.classList.toggle('visible'); 122 | }); 123 | 124 | // Event: Toggle stats on click. 125 | if($statsToggle){ 126 | $statsToggle.addEventListener('click', function(event) { 127 | event.preventDefault(); 128 | event.stopPropagation(); 129 | $stats.classList.toggle('visible'); 130 | }); 131 | } 132 | 133 | // Close. 134 | 135 | // Create elements. 136 | $navClose = document.createElement('a'); 137 | $navClose.href = '#'; 138 | $navClose.className = 'close'; 139 | $navClose.tabIndex = 0; 140 | $nav.appendChild($navClose); 141 | 142 | if($stats){ 143 | $statsClose = document.createElement('a'); 144 | $statsClose.href = '#'; 145 | $statsClose.className = 'close'; 146 | $statsClose.tabIndex = 0; 147 | $stats.appendChild($statsClose); 148 | } 149 | 150 | // Event: Hide on ESC. 151 | window.addEventListener('keydown', function(event) { 152 | if (event.keyCode == 27) { 153 | $nav.classList.remove('visible'); 154 | if($stats) 155 | $stats.classList.remove('visible'); 156 | } 157 | }); 158 | 159 | // Event: Hide nav on click. 160 | $navClose.addEventListener('click', function(event) { 161 | event.preventDefault(); 162 | event.stopPropagation(); 163 | $nav.classList.remove('visible'); 164 | }); 165 | 166 | if($statsClose){ 167 | // Event: Hide stats on click. 168 | $statsClose.addEventListener('click', function(event) { 169 | event.preventDefault(); 170 | event.stopPropagation(); 171 | $stats.classList.remove('visible'); 172 | }); 173 | } 174 | })(); 175 | -------------------------------------------------------------------------------- /runserver.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | 4 | import os 5 | import sys 6 | import shutil 7 | import logging 8 | import time 9 | 10 | # Currently supported pgoapi 11 | pgoapi_version = "1.1.6" 12 | 13 | # Moved here so logger is configured at load time 14 | logging.basicConfig(format='%(asctime)s [%(threadName)16s][%(module)14s][%(levelname)8s] %(message)s') 15 | log = logging.getLogger() 16 | 17 | # Make sure pogom/pgoapi is actually removed if it is an empty directory 18 | # This is a leftover directory from the time pgoapi was embedded in PokemonGo-Map 19 | # The empty directory will cause problems with `import pgoapi` so it needs to go 20 | oldpgoapiPath = os.path.join(os.path.dirname(__file__), "pogom/pgoapi") 21 | if os.path.isdir(oldpgoapiPath): 22 | log.info("I found %s, but its no longer used. Going to remove it...", oldpgoapiPath) 23 | shutil.rmtree(oldpgoapiPath) 24 | log.info("Done!") 25 | 26 | # Assert pgoapi is installed 27 | try: 28 | import pgoapi 29 | except ImportError: 30 | log.critical("It seems `pgoapi` is not installed. You must run pip install -r requirements.txt again") 31 | sys.exit(1) 32 | 33 | # Assert pgoapi >= 1.1.6 is installed 34 | from distutils.version import StrictVersion 35 | if not hasattr(pgoapi, "__version__") or StrictVersion(pgoapi.__version__) < StrictVersion(pgoapi_version): 36 | log.critical("It seems `pgoapi` is not up-to-date. You must run pip install -r requirements.txt again") 37 | sys.exit(1) 38 | 39 | from threading import Thread, Event 40 | from queue import Queue 41 | from flask_cors import CORS 42 | 43 | from pogom import config 44 | from pogom.app import Pogom 45 | from pogom.utils import get_args, insert_mock_data 46 | 47 | from pogom.search import search_overseer_thread, fake_search_loop 48 | from pogom.models import init_database, create_tables, drop_tables, Pokemon, Pokestop, Gym 49 | 50 | from pgoapi import utilities as util 51 | 52 | if __name__ == '__main__': 53 | args = get_args() 54 | 55 | if args.debug: 56 | log.setLevel(logging.DEBUG); 57 | else: 58 | log.setLevel(logging.INFO); 59 | 60 | # Let's not forget to run Grunt / Only needed when running with webserver 61 | if not args.no_server: 62 | if not os.path.exists(os.path.join(os.path.dirname(__file__), 'static/dist')): 63 | log.critical('Please run "grunt build" before starting the server'); 64 | sys.exit(); 65 | 66 | # These are very noisey, let's shush them up a bit 67 | logging.getLogger('peewee').setLevel(logging.INFO) 68 | logging.getLogger('requests').setLevel(logging.WARNING) 69 | logging.getLogger('pgoapi.pgoapi').setLevel(logging.WARNING) 70 | logging.getLogger('pgoapi.rpc_api').setLevel(logging.INFO) 71 | logging.getLogger('werkzeug').setLevel(logging.ERROR) 72 | 73 | config['parse_pokemon'] = not args.no_pokemon 74 | config['parse_pokestops'] = not args.no_pokestops 75 | config['parse_gyms'] = not args.no_gyms 76 | 77 | # Turn these back up if debugging 78 | if args.debug: 79 | logging.getLogger('requests').setLevel(logging.DEBUG) 80 | logging.getLogger('pgoapi').setLevel(logging.DEBUG) 81 | logging.getLogger('rpc_api').setLevel(logging.DEBUG) 82 | 83 | 84 | position = util.get_pos_by_name(args.location) 85 | if not any(position): 86 | log.error('Could not get a position by name, aborting') 87 | sys.exit() 88 | 89 | log.info('Parsed location is: %.4f/%.4f/%.4f (lat/lng/alt)', 90 | position[0], position[1], position[2]) 91 | 92 | if args.no_pokemon: 93 | log.info('Parsing of Pokemon disabled') 94 | if args.no_pokestops: 95 | log.info('Parsing of Pokestops disabled') 96 | if args.no_gyms: 97 | log.info('Parsing of Gyms disabled') 98 | 99 | config['LOCALE'] = args.locale 100 | config['CHINA'] = args.china 101 | 102 | app = Pogom(__name__) 103 | db = init_database(app) 104 | if args.clear_db: 105 | log.info('Clearing database') 106 | if args.db_type == 'mysql': 107 | drop_tables(db) 108 | elif os.path.isfile(args.db): 109 | os.remove(args.db) 110 | create_tables(db) 111 | 112 | app.set_current_location(position); 113 | 114 | # Control the search status (running or not) across threads 115 | pause_bit = Event() 116 | pause_bit.clear() 117 | 118 | # Setup the location tracking queue and push the first location on 119 | new_location_queue = Queue() 120 | new_location_queue.put(position) 121 | 122 | if not args.only_server: 123 | # Gather the pokemons! 124 | if not args.mock: 125 | log.debug('Starting a real search thread') 126 | search_thread = Thread(target=search_overseer_thread, args=(args, new_location_queue, pause_bit)) 127 | else: 128 | log.debug('Starting a fake search thread') 129 | insert_mock_data(position) 130 | search_thread = Thread(target=fake_search_loop) 131 | 132 | search_thread.daemon = True 133 | search_thread.name = 'search_thread' 134 | search_thread.start() 135 | 136 | if args.cors: 137 | CORS(app); 138 | 139 | app.set_search_control(pause_bit) 140 | app.set_location_queue(new_location_queue) 141 | 142 | config['ROOT_PATH'] = app.root_path 143 | config['GMAPS_KEY'] = args.gmaps_key 144 | 145 | if args.no_server: 146 | # This loop allows for ctrl-c interupts to work since flask won't be holding the program open 147 | while search_thread.is_alive(): 148 | time.sleep(60) 149 | else: 150 | app.run(threaded=True, use_reloader=False, debug=args.debug, host=args.host, port=args.port) 151 | -------------------------------------------------------------------------------- /static/js/stats.js: -------------------------------------------------------------------------------- 1 | function countMarkers() { 2 | document.getElementById("stats-pkmn-label").innerHTML = "Pokémons"; 3 | document.getElementById("stats-gym-label").innerHTML = "Gyms"; 4 | document.getElementById("stats-pkstop-label").innerHTML = "PokéStops"; 5 | 6 | var arenaCount = []; 7 | var arenaTotal = 0; 8 | var pkmnCount = []; 9 | var pkmnTotal = 0; 10 | var pokestopCount = []; 11 | var pokestopTotal = 0; 12 | if (Store.get('showPokemon')) { 13 | $.each(map_data.pokemons, function(key, value) { 14 | if (pkmnCount[map_data.pokemons[key]['pokemon_id']] == 0 || pkmnCount[map_data.pokemons[key]['pokemon_id']] == null) { 15 | pkmnCount[map_data.pokemons[key]['pokemon_id']] = { 16 | "ID": map_data.pokemons[key]['pokemon_id'], 17 | "Count": 1, 18 | "Name": map_data.pokemons[key]['pokemon_name'] 19 | }; 20 | } else { 21 | pkmnCount[map_data.pokemons[key]['pokemon_id']].Count += 1; 22 | } 23 | pkmnTotal++; 24 | }); 25 | pkmnCount.sort(sort_by('Name', false)); 26 | $.each(map_data.pokemons, function(key, value) { 27 | var pkmnListString = ""; 28 | for (var i = 0; i < pkmnCount.length; i++) { 29 | if (pkmnCount[i] != null && pkmnCount[i].Count > 0) { 30 | pkmnListString += ""; 31 | } 32 | } 33 | pkmnListString += "
IconNameCount%
Total" + pkmnTotal + "
" + pkmnCount[i].Name + "" + pkmnCount[i].Count + "" + Math.round(pkmnCount[i].Count * 100 / pkmnTotal * 10) / 10 + "%
"; 34 | document.getElementById("pokemonList").innerHTML = pkmnListString; 35 | }); 36 | } else { 37 | document.getElementById("pokemonList").innerHTML = "Pokémons markers are disabled";; 38 | } 39 | if (Store.get('showGyms')) { 40 | $.each(map_data.gyms, function(key, value) { 41 | if (arenaCount[map_data.gyms[key]['team_id']] == 0 || arenaCount[map_data.gyms[key]['team_id']] == null) { 42 | arenaCount[map_data.gyms[key]['team_id']] = 1; 43 | } else { 44 | arenaCount[map_data.gyms[key]['team_id']] += 1; 45 | } 46 | arenaTotal++; 47 | var arenaListString = ""; 48 | for (var i = 0; i < arenaCount.length; i++) { 49 | if (arenaCount[i] > 0) { 50 | if (i == 1) { 51 | arenaListString += ""; 52 | } else if (i == 2) { 53 | arenaListString += ""; 54 | } else if (i == 3) { 55 | arenaListString += ""; 56 | } else { 57 | arenaListString += ""; 58 | } 59 | } 60 | } 61 | arenaListString += "
IconTeam ColorCount%
Total" + arenaTotal + "
" + "Blue" + "" + arenaCount[i] + "" + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "%
" + "Red" + "" + arenaCount[i] + "" + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "%
" + "Yellow" + "" + arenaCount[i] + "" + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "%
" + "Clear" + "" + arenaCount[i] + "" + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "%
"; 62 | document.getElementById("arenaList").innerHTML = arenaListString; 63 | }); 64 | } else { 65 | document.getElementById("arenaList").innerHTML = "Gyms markers are disabled"; 66 | } 67 | if (Store.get('showPokestops')) { 68 | $.each(map_data.pokestops, function(key, value) { 69 | var pokestopLured = false; 70 | if (map_data.pokestops[key]['lure_expiration'] != null && map_data.pokestops[key]['lure_expiration'] > 0) { 71 | if (pokestopCount[1] == 0 || pokestopCount[1] == null) { 72 | pokestopCount[1] = 1; 73 | } else { 74 | pokestopCount[1] += 1; 75 | } 76 | } else { 77 | if (pokestopCount[0] == 0 || pokestopCount[0] == null) { 78 | pokestopCount[0] = 1; 79 | } else { 80 | pokestopCount[0] += 1; 81 | } 82 | } 83 | pokestopTotal++; 84 | var pokestopListString = ""; 85 | for (var i = 0; i < pokestopCount.length; i++) { 86 | if (pokestopCount[i] > 0) { 87 | if (i == 0) { 88 | pokestopListString += ""; 89 | } else if (i == 1) { 90 | pokestopListString += ""; 91 | } 92 | } 93 | } 94 | pokestopListString += "
IconStatusCount%
Total" + pokestopTotal + "
" + "Not Lured" + "" + pokestopCount[i] + "" + Math.round(pokestopCount[i] * 100 / pokestopTotal * 10) / 10 + "%
" + "Lured" + "" + pokestopCount[i] + "" + Math.round(pokestopCount[i] * 100 / pokestopTotal * 10) / 10 + "%
"; 95 | document.getElementById("pokestopList").innerHTML = pokestopListString; 96 | }); 97 | } else { 98 | document.getElementById("pokestopList").innerHTML = "PokéStops markers are disabled"; 99 | } 100 | }; 101 | 102 | var sort_by = function(field, reverse, primer) { 103 | var key = primer 104 | ? function(x) { 105 | return primer(x[field]); 106 | } 107 | : function(x) { 108 | return x[field]; 109 | }; 110 | 111 | reverse = !reverse ? 1 : -1; 112 | 113 | return function(a, b) { 114 | return a = key(a), b = key(b), reverse * ((a > b) - (b > a)); 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /Tools/Hex-Beehive-Generator/location_generator.py: -------------------------------------------------------------------------------- 1 | import math 2 | import argparse 3 | import LatLon 4 | import itertools 5 | import os 6 | 7 | parser = argparse.ArgumentParser() 8 | parser.add_argument("-lat", "--lat", help="latitude", type=float, required=True) 9 | parser.add_argument("-lon", "--lon", help="longitude", type=float, required=True) 10 | parser.add_argument("-st", "--steps", help="steps", default=5, type=int) 11 | parser.add_argument("-lp", "--leaps", help="like 'steps' but for workers instead of scans", default=3, type=int) 12 | parser.add_argument("-o", "--output", default="../../beehive.sh", help="output file for the script") 13 | parser.add_argument("--accounts", help="List of your accounts, in csv [username],[password] format", default=None) 14 | parser.add_argument("--auth", help="Auth method (ptc or google)", default="ptc") 15 | parser.add_argument("-v", "--verbose", help="Print lat/lng to stdout for debugging", action='store_true', default=False) 16 | parser.add_argument("--windows", help="Generate a bat file for Windows", action='store_true', default=False) 17 | parser.add_argument("--installdir", help="Installation directory (only used for Windows)", type=str, default="C:\\PokemonGo-Map") 18 | 19 | preamble = "#!/usr/bin/env bash" 20 | server_template = "nohup python runserver.py -os -l '{lat}, {lon}' &\n" 21 | worker_template = "sleep 0.5; nohup python runserver.py -ns -l '{lat}, {lon}' -st {steps} {auth} &\n" 22 | auth_template = "-a {} -u {} -p '{}'" # unix people want single-quoted passwords 23 | 24 | R = 6378137.0 25 | r_hex = 52.5 # probably not correct 26 | 27 | args = parser.parse_args() 28 | steps = args.steps 29 | rings = args.leaps 30 | 31 | if args.windows: 32 | # ferkin Windows 33 | preamble = "taskkill /IM python.exe /F" 34 | pythonpath = "C:\\Python27\\Python.exe" 35 | branchpath = args.installdir 36 | executable = args.installdir + "\\runserver.py" 37 | auth_template = '-a {} -u {} -p "{}"' # windows people want double-quoted passwords 38 | actual_worker_params = '{auth} -ns -l "{lat}, {lon}" -st {steps}' 39 | worker_template = 'Start "{{threadname}}" /d {branchpath} /MIN {pythonpath} {executable} {actual_params}\nping 127.0.0.1 -n 6 > nul\n\n'.format( 40 | branchpath=branchpath, pythonpath=pythonpath, executable=executable, actual_params = actual_worker_params 41 | ) 42 | actual_server_params = '-os -l "{lat}, {lon}"' 43 | server_template = 'Start "Server" /d {branchpath} /MIN {pythonpath} {executable} {actual_params}\nping 127.0.0.1 -n 6 > nul\n\n'.format( 44 | branchpath=branchpath, pythonpath=pythonpath, executable=executable, actual_params = actual_server_params 45 | ) 46 | if args.output == "../../beehive.sh": 47 | args.output = "../../beehive.bat" 48 | 49 | if args.accounts: 50 | print("Reading usernames/passwords from {}".format(args.accounts)) 51 | account_fh = open(args.accounts) 52 | account_fields = [line.split(",") for line in account_fh] 53 | accounts = [auth_template.format(args.auth, line[0].strip(), line[1].strip()) for line in account_fields] 54 | else: 55 | accounts = [""] 56 | 57 | print("Generating beehive script to {}".format(args.output)) 58 | output_fh = file(args.output, "wb") 59 | os.chmod(args.output, 0o755) 60 | output_fh.write(preamble + "\n") 61 | output_fh.write(server_template.format(lat=args.lat, lon=args.lon)) 62 | 63 | w_worker = (2 * steps - 1) * r_hex #convert the step limit of the worker into the r radius of the hexagon in meters? 64 | d = 2.0 * w_worker / 1000.0 #convert that into a diameter and convert to gps scale 65 | d_s = d 66 | 67 | brng_s = 0.0 68 | brng = 0.0 69 | mod = math.degrees(math.atan(1.732 / (6 * (steps - 1) + 3))) 70 | 71 | total_workers = 1 72 | 73 | locations = [LatLon.LatLon(LatLon.Latitude(0), LatLon.Longitude(0))] * ((((rings * (rings - 1)) / 2) * 6) + 1) #this calculates how many workers there will be and initialises the list 74 | locations[0] = LatLon.LatLon(LatLon.Latitude(args.lat), LatLon.Longitude(args.lon)) #set the latlon for worker 0 from cli args 75 | 76 | for i in range(1, rings): 77 | total_workers += 6 * i 78 | 79 | 80 | 81 | turns = 0 # number of turns made in this ring (0 to 6) 82 | turn_steps = 0 # number of cells required to complete one turn of the ring 83 | turn_steps_so_far = 0 # current cell number in this side of the current ring 84 | 85 | 86 | for i in range(1, total_workers): 87 | if turns == 6 or turn_steps == 0: 88 | # we have completed a ring (or are starting the very first ring) 89 | turns = 0 90 | turn_steps += 1 91 | turn_steps_so_far = 0 92 | 93 | if turn_steps_so_far == 0: 94 | brng = brng_s 95 | loc = locations[0] 96 | d = turn_steps * d 97 | else: 98 | loc = locations[0] 99 | C = math.radians(60.0)#inside angle of a regular hexagon 100 | a = d_s / R * 2.0 * math.pi #in radians get the arclength of the unit circle covered by d_s 101 | b = turn_steps_so_far * d_s / turn_steps / R * 2.0 * math.pi #percentage of a 102 | #the first spherical law of cosines gives us the length of side c from known angle C 103 | c = math.acos(math.cos(a) * math.cos(b) + math.sin(a) * math.sin(b) * math.cos(C)) 104 | #turnsteps here represents ring number because yay coincidence always the same. multiply by derived arclength and convert to meters 105 | d = turn_steps * c * R / 2.0 / math.pi 106 | #from the first spherical law of cosines we get the angle A from the side lengths a b c 107 | A = math.acos((math.cos(b) - math.cos(a) * math.cos(c)) / (math.sin(c) * math.sin(a))) 108 | brng = 60 * turns + math.degrees(A) 109 | 110 | loc = loc.offset(brng + mod, d) 111 | locations[i] = loc 112 | d = d_s 113 | 114 | turn_steps_so_far += 1 115 | if turn_steps_so_far >= turn_steps: 116 | # make a turn 117 | brng_s += 60.0 118 | brng = brng_s 119 | turns += 1 120 | turn_steps_so_far = 0 121 | 122 | # if accounts list was provided, match each location with an account 123 | # reusing accounts if required 124 | location_and_auth = [(i, j) for i, j in itertools.izip(locations, itertools.cycle(accounts))] 125 | 126 | for i, (location, auth) in enumerate(location_and_auth): 127 | threadname = "Movable{}".format(i) 128 | output_fh.write(worker_template.format(lat=location.lat, lon=location.lon, steps=args.steps, auth=auth, threadname=threadname)) 129 | if args.verbose: 130 | print("{}, {}".format(location.lat, location.lon)) 131 | -------------------------------------------------------------------------------- /static/js/vendor/modernizr.custom.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.7.1 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-csstransitions-shiv-cssclasses-prefixed-testprop-testallprops-domprefixes-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function x(a){j.cssText=a}function y(a,b){return x(prefixes.join(a+";")+(b||""))}function z(a,b){return typeof a===b}function A(a,b){return!!~(""+a).indexOf(b)}function B(a,b){for(var d in a){var e=a[d];if(!A(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:z(f,"function")?f.bind(d||b):f}return!1}function D(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+n.join(d+" ")+d).split(" ");return z(b,"string")||z(b,"undefined")?B(e,b):(e=(a+" "+o.join(d+" ")+d).split(" "),C(e,b,c))}var d="2.7.1",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m="Webkit Moz O ms",n=m.split(" "),o=m.toLowerCase().split(" "),p={},q={},r={},s=[],t=s.slice,u,v={}.hasOwnProperty,w;!z(v,"undefined")&&!z(v.call,"undefined")?w=function(a,b){return v.call(a,b)}:w=function(a,b){return b in a&&z(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.csstransitions=function(){return D("transition")};for(var E in p)w(p,E)&&(u=E.toLowerCase(),e[u]=p[E](),s.push((e[u]?"":"no-")+u));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)w(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},x(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._domPrefixes=o,e._cssomPrefixes=n,e.testProp=function(a){return B([a])},e.testAllProps=D,e.prefixed=function(a,b,c){return b?D(a,b,c):D(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+s.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f 2 | 3 | 4 | 5 | Pokémon Go Map 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 38 | 43 | 44 | 188 | 205 |
206 |
207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | --------------------------------------------------------------------------------