Created
June 8, 2019 08:54
-
-
Save FredrikMeyer/1654d2dd81fecebd65aaf030beb4effc to your computer and use it in GitHub Desktop.
Visualisering av bysykler
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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