diff --git a/layers/index.js b/layers/index.js index 3489b2d..329b63d 100644 --- a/layers/index.js +++ b/layers/index.js @@ -8,6 +8,7 @@ import menardsLayer from './menards/layer.js'; import culversLayer from './culvers/layer.js'; import kwikTripLayer from './kwik-trip/layer.js'; import waffleHouseLayer from './waffle-house/layer.js'; +import krispyKremeLayer from './krispy-kreme/layer.js'; const layerCategories = [ { @@ -76,6 +77,10 @@ const layerCategories = [ name: "Waffle House", layer: waffleHouseLayer, }, + { + name: "Krispy Kreme", + layer: krispyKremeLayer, + }, ] } ]; diff --git a/layers/krispy-kreme/get_data.py b/layers/krispy-kreme/get_data.py new file mode 100755 index 0000000..fe7872a --- /dev/null +++ b/layers/krispy-kreme/get_data.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import requests +import re +import json + +res = requests.get('https://api.krispykreme.com/shops/?latitude=44.7601&longitude=-93.2748&count=1000&shopFeatureFlags=0&includeGroceryStores=false&includeShops=true') + +locations = json.loads(res.text) + +stores = [] + +for location in locations: + stores.append({ + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [float(location['longitude']), float(location['latitude'])], # yes, [lon, lat] since it's [x, y] + }, + "properties": { + 'address': location['address1'].title(), + 'city': location['city'].title(), + 'state': location['state'], + 'zip': location['zipCode'], + 'website': location['pagesUrl'], + }, + }) + +geojson = { + "type": "FeatureCollection", + "features": stores, +} + +with open("krispy-kreme-data.geojson", "w") as f: + f.write(json.dumps(geojson)) + +print(f"{len(locations)} locations found") diff --git a/layers/krispy-kreme/layer.js b/layers/krispy-kreme/layer.js new file mode 100644 index 0000000..382dc47 --- /dev/null +++ b/layers/krispy-kreme/layer.js @@ -0,0 +1,24 @@ +import VectorLayer from 'ol/layer/Vector'; +import {Vector as VectorSource} from 'ol/source.js'; +import GeoJSON from 'ol/format/GeoJSON.js'; + +import {Style} from 'ol/style.js'; +import Icon from 'ol/style/Icon.js'; + +import waffleHouseURL from '/data/krispy-kreme-data.geojson?url'; // TODO: remove `?url`? +import pinURL from '/layers/krispy-kreme/pin.svg?url'; // TODO: remove `?url`? + +const vectorLayer = new VectorLayer({ + source: new VectorSource({ + url: waffleHouseURL, + format: new GeoJSON, + }), + style: new Style({ + image: new Icon({ + anchor: [0.5, 1], + src: pinURL, + }), + }), +}); + +export default vectorLayer; diff --git a/layers/krispy-kreme/pin.svg b/layers/krispy-kreme/pin.svg new file mode 100644 index 0000000..cb85b22 --- /dev/null +++ b/layers/krispy-kreme/pin.svg @@ -0,0 +1,16 @@ + + + + +