Skip to content

Instantly share code, notes, and snippets.

@FredrikMeyer
Created June 8, 2019 08:54
Show Gist options
  • Save FredrikMeyer/1654d2dd81fecebd65aaf030beb4effc to your computer and use it in GitHub Desktop.
Save FredrikMeyer/1654d2dd81fecebd65aaf030beb4effc to your computer and use it in GitHub Desktop.
Visualisering av bysykler
(ns quil-drawings.bysykler
(:require [quil.core :as q]
[quil.middleware :as m]
[incanter.distributions :as d]
[clojure.data.json :as json]))
(def w 1000)
(def h 1000)
(def bysykler
(let [parsed (-> "bysykler.json"
slurp
(json/read-str :key-fn keyword))]
(map (fn [b] (select-keys b [:start_station_latitude
:start_station_longitude
:end_station_latitude
:end_station_longitude
:duration])) parsed)))
(def max-start-lat (apply max (map :start_station_latitude bysykler)))
(def max-start-lon (apply max (map :start_station_longitude bysykler)))
(def min-start-lat (apply min (map :start_station_latitude bysykler)))
(def min-start-lon (apply min (map :start_station_longitude bysykler)))
(def min-dur (apply min (map :duration bysykler)))
(def max-dur (apply max (map :duration bysykler)))
(defn average [lst]
(/ (->> lst
(reduce +)) (count lst)))
(+ 0. (average (map :duration bysykler)))
(defn lat-long-to-xy [lat lon]
[
(q/map-range lat min-start-lat max-start-lat 10 (- w 10))
(q/map-range lon min-start-lon max-start-lon 10 (- h 10))
])
(defn normalize-duration [dur]
(q/map-range dur min-dur 500 0 10)) ;; 762
(defn setup []
(q/color-mode :hsb 100 100 100)
(q/background 0.)
(q/no-fill)
(q/stroke 100. 10)
(q/stroke-weight 1)
(q/rect-mode :center)
{})
(defn update-state [state]
state)
(defn draw-state [state]
(println (first bysykler))
(doseq [b bysykler]
(let [[x y] (lat-long-to-xy (:start_station_latitude b) (:start_station_longitude b))
[aa bb] (lat-long-to-xy (:end_station_latitude b) (:end_station_longitude b))
dur (normalize-duration (:duration b))
]
(q/stroke dur 100 80 10)
(q/line x y aa bb)))
(q/no-loop))
(defn save-on-click [state event]
(println "savedq")
(println state)
(q/save-frame (str "bysykkel-" (hash state) "-" (q/random 0 1) ".jpg"))
state)
(q/defsketch quil-drawings
:title "Bysykler"
:size [w h]
:setup setup
:update update-state
:mouse-clicked save-on-click
:draw draw-state
:features [:keep-on-top :no-bind-output :pause-on-error]
:middleware [m/fun-mode m/pause-on-error])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment