├── .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 | -
15 |
{{pokemon.name}}
16 | - {{pokemon.distance}}m ({{pokemon.card_dir}}) -
17 | {{pokemon.time_to_disappear}}
18 |
19 | {% endfor %}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
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
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 | [](https://jelastic.com/install-application/?manifest=https://raw.githubusercontent.com/sych74/PokemonGo-Map-in-Cloud/master/manifest.jps) [](https://github.com/AHAAAAAAA/PokemonGo-Map/wiki/Heroku-Deployment) [](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 | 
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 |
65 |
66 |
67 |
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 = "| Icon | Name | Count | % |
|---|
| Total | " + pkmnTotal + " | |
";
28 | for (var i = 0; i < pkmnCount.length; i++) {
29 | if (pkmnCount[i] != null && pkmnCount[i].Count > 0) {
30 | pkmnListString += " | " + pkmnCount[i].Name + " | " + pkmnCount[i].Count + " | " + Math.round(pkmnCount[i].Count * 100 / pkmnTotal * 10) / 10 + "% |
";
31 | }
32 | }
33 | pkmnListString += "
";
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 = "| Icon | Team Color | Count | % | | Total | " + arenaTotal + " |
";
48 | for (var i = 0; i < arenaCount.length; i++) {
49 | if (arenaCount[i] > 0) {
50 | if (i == 1) {
51 | arenaListString += " | " + "Blue" + " | " + arenaCount[i] + " | " + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "% |
";
52 | } else if (i == 2) {
53 | arenaListString += " | " + "Red" + " | " + arenaCount[i] + " | " + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "% |
";
54 | } else if (i == 3) {
55 | arenaListString += " | " + "Yellow" + " | " + arenaCount[i] + " | " + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "% |
";
56 | } else {
57 | arenaListString += " | " + "Clear" + " | " + arenaCount[i] + " | " + Math.round(arenaCount[i] * 100 / arenaTotal * 10) / 10 + "% |
";
58 | }
59 | }
60 | }
61 | arenaListString += "
";
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 = "| Icon | Status | Count | % | | Total | " + pokestopTotal + " |
";
85 | for (var i = 0; i < pokestopCount.length; i++) {
86 | if (pokestopCount[i] > 0) {
87 | if (i == 0) {
88 | pokestopListString += " | " + "Not Lured" + " | " + pokestopCount[i] + " | " + Math.round(pokestopCount[i] * 100 / pokestopTotal * 10) / 10 + "% |
";
89 | } else if (i == 1) {
90 | pokestopListString += " | " + "Lured" + " | " + pokestopCount[i] + " | " + Math.round(pokestopCount[i] * 100 / pokestopTotal * 10) / 10 + "% |
";
91 | }
92 | }
93 | }
94 | pokestopListString += "
";
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 |
--------------------------------------------------------------------------------