#+PROPERTY: header-args :results output replace * datasette This repository contians everything you need to deploy SQLite databases to dokku via https://datasette.io/. - All files matching `db/*.db` will get exposed in the interface. Simply add your new database if all you want to do is make it accessible through the web. - You can edit `metadata.yml` to add descriptions, link to sources and add predefined queries. - The `requirements.txt` contains additional packages such as plugins. Please add them manually and without a version string because python package management is kind of messy. - The `CHECKS` file contains a URL and an expected string that is returned in this URLs HTTP response. This is added as a post-deployment sanity check and you shouldn't need to change it. - Optional: If anything should happen after deployment, edit the `bin/post_compile` script. You can use this to fetch data from other sources for example. The databases are assumed to be immutable or read-only. This allows us to use efficient caching by configuring nginx as a caching reverse proxy and serving content a static cache. This effectively that queries often only have to be run the first time after the database has changed and are afterwards served from a file-system cache. ** Database Setup This section aims to contain all information needed to convert data from their respective source files to SQLite databases. This should make the updating process easier when the sources change *** Use snake_case for all file names #+begin_src bash cd sources for file in $(fd --type f); do mv $file $(basename $file | sed 's/-/_/g') done #+end_src #+RESULTS: *** Earth **** Cumulative CO2 emissions Source: https://ourworldindata.org/grapher/cumulative-co-emissions #+begin_src bash csvs-to-sqlite \ --shape 'Entity:entity(text),Code:code(text),Year:year(integer),Cumulative CO2 emissions:cumulative_co2_emissions(real)' \ --index entity \ --index code \ --index year \ --replace-tables \ sources/cumulative_co2_emissions.csv dbs/earth.db #+end_src #+RESULTS: : Loaded 1 dataframes : Created dbs/earth.db from 1 CSV file **** Population, Historic and Projected #+begin_src bash sed -i 's/"Population by country and region, historic and projections (Gapminder, HYDE & UN)"/Population/' sources/population.csv csvs-to-sqlite \ --shape 'Entity:entity(text),Code:code(text),Year:year,Population:population(integer)' \ --index entity \ --index code \ --index year \ --replace-tables \ sources/population.csv dbs/earth.db #+end_src #+RESULTS: : Loaded 1 dataframes : Added 1 CSV file to dbs/earth.db *** Stroll This database is created from a series of GPX file which I track on my phone using [[https://f-droid.org/en/packages/net.osmand.plus/][Osmand]]. They are in turn synced to my Odroid HC2 to which I have access from wherever. #+name: target_db strolling.db **** Fetching *.gpx files #+begin_src bash mkdir -p sources/strolling rsync -srv arne@timbre.arnes.space:osmand-tracks/rec/ sources/strolling/ #+end_src #+RESULTS: #+begin_example receiving incremental file list 2019-06/2019-06-09_11-54_Sun.gpx 2019-06/2019-06-09_19-22_Sun.gpx 2019-06/2019-06-10_11-57_Mon.gpx 2019-06/2019-06-17_19-56_Mon.gpx 2019-06/2019-06-26_07-54_Wed.gpx 2019-06/2019-06-27_12-26_Thu.gpx 2019-06/Kanufahrt auf der Lahn.gpx 2019-08/2019-08-16_08-15_Fri.gpx 2019-08/2019-08-20_08-42_Tue.gpx 2019-08/2019-08-22_08-21_Thu.gpx 2019-08/2019-08-22_14-15_Thu.gpx 2019-08/2019-08-23_09-00_Fri.gpx 2019-08/2019-08-24_08-42_Sat.gpx 2019-08/2019-08-24_18-07_Sat.gpx 2019-08/2019-08-25_10-39_Sun.gpx 2019-08/2019-08-25_23-37_Sun.gpx 2019-08/2019-08-26_12-25_Mon.gpx 2019-08/2019-08-27_06-28_Tue.gpx 2019-08/2019-08-27_09-07_Tue.gpx 2019-08/2019-08-27_19-53_Tue.gpx 2019-08/2019-08-28_08-26_Wed.gpx 2019-08/2019-08-28_11-33_Wed.gpx 2019-09/2019-09-02_18-19_Mon.gpx 2019-09/2019-09-04_07-36_Wed.gpx 2019-09/2019-09-19_08-31_Thu.gpx 2019-09/2019-09-21_11-30_Sat.gpx 2019-09/2019-09-29_16-52_Sun.gpx 2019-09/2019-09-29_18-54_Sun.gpx 2019-10/2019-10-02_08-42_Wed.gpx 2019-10/2019-10-02_08-57_Wed.gpx 2019-10/2019-10-03_14-04_Thu.gpx 2019-10/2019-10-09_09-05_Wed.gpx 2019-10/2019-10-12_09-57_Sat.gpx 2019-10/2019-10-14_19-46_Mon.gpx 2019-10/2019-10-14_19-58_Mon.gpx 2019-10/2019-10-18_08-49_Fri.gpx 2019-10/2019-10-29_09-56_Tue.gpx 2019-10/2019-10-31_07-45_Thu.gpx 2019-11/2019-11-01_19-19_Fri.gpx 2019-11/2019-11-08_09-57_Fri.gpx 2019-11/2019-11-09_10-21_Sat.gpx 2019-11/2019-11-13_09-17_Wed.gpx 2019-12/2019-12-04_18-49_Wed.gpx 2019-12/2019-12-07_09-25_Sat.gpx 2019-12/2019-12-12_07-50_Thu.gpx 2019-12/2019-12-18_07-59_Wed.gpx 2019-12/2019-12-20_08-47_Fri.gpx 2020-01/2020-01-02_20-31_Thu.gpx 2020-01/2020-01-06_13-48_Mon.gpx 2020-01/2020-01-09_20-10_Thu.gpx 2020-01/2020-01-12_09-48_Sun.gpx 2020-01/2020-01-15_07-45_Wed.gpx 2020-01/2020-01-17_08-28_Fri.gpx 2020-01/2020-01-20_09-43_Mon.gpx 2020-01/2020-01-22_07-38_Wed.gpx 2020-01/2020-01-27_09-35_Mon.gpx 2020-01/2020-01-31_07-21_Fri.gpx 2020-02/2020-02-01_10-54_Sat.gpx 2020-02/2020-02-04_08-01_Tue.gpx 2020-02/2020-02-23_11-52_Sun.gpx 2020-02/2020-02-24_09-17_Mon.gpx 2020-02/2020-02-26_09-03_Wed.gpx 2020-03/2020-03-02_10-00_Mon.gpx 2020-03/2020-03-04_08-43_Wed.gpx 2020-03/2020-03-06_08-59_Fri.gpx 2020-03/2020-03-09_08-46_Mon.gpx 2020-03/2020-03-11_08-07_Wed.gpx 2020-03/2020-03-14_11-41_Sat.gpx 2020-03/2020-03-16_09-20_Mon.gpx 2020-03/2020-03-18_09-31_Wed.gpx 2020-03/2020-03-19_14-11_Thu.gpx 2020-03/2020-03-20_09-13_Fri.gpx 2020-03/2020-03-22_10-57_Sun.gpx 2020-03/2020-03-23_09-11_Mon.gpx 2020-03/2020-03-24_17-27_Tue.gpx 2020-03/2020-03-25_18-37_Wed.gpx 2020-03/2020-03-26_08-53_Thu.gpx 2020-03/2020-03-28_11-22_Sat.gpx 2020-03/2020-03-30_08-12_Mon.gpx 2020-04/2020-04-01_08-52_Wed.gpx 2020-04/2020-04-03_08-18_Fri.gpx 2020-04/2020-04-05_12-58_Sun.gpx 2020-04/2020-04-07_16-48_Tue.gpx 2020-04/2020-04-08_07-52_Wed.gpx 2020-04/2020-04-10_08-49_Fri.gpx 2020-04/2020-04-11_11-57_Sat.gpx 2020-04/2020-04-12_10-43_Sun_2.gpx 2020-04/2020-04-14_09-02_Tue.gpx 2020-04/2020-04-17_09-15_Fri.gpx 2020-04/2020-04-18_11-42_Sat.gpx 2020-04/2020-04-19_10-24_Sun.gpx 2020-04/2020-04-21_08-45_Tue.gpx 2020-04/2020-04-23_08-51_Thu.gpx 2020-04/2020-04-24_12-40_Fri.gpx 2020-04/2020-04-27_10-31_Mon.gpx 2020-04/2020-04-29_16-14_Wed.gpx 2020-05/2020-05-06_07-15_Wed.gpx 2020-05/2020-05-08_11-54_Fri.gpx 2020-05/2020-05-08_12-36_Fri.gpx 2020-05/2020-05-09_12-41_Sat.gpx 2020-05/2020-05-11_18-27_Mon.gpx 2020-05/2020-05-12_19-26_Tue.gpx 2020-05/2020-05-13_09-01_Wed.gpx 2020-05/2020-05-18_15-52_Mon.gpx 2020-05/2020-05-20_09-04_Wed.gpx 2020-05/2020-05-23_11-16_Sat.gpx 2020-05/2020-05-25_09-09_Mon.gpx 2020-05/2020-05-27_09-08_Wed.gpx 2020-05/2020-05-29_08-40_Fri.gpx 2020-06/2020-06-01_11-14_Mon.gpx 2020-06/2020-06-03_08-50_Wed.gpx 2020-06/2020-06-06_11-21_Sat.gpx 2020-06/2020-06-10_09-00_Wed.gpx 2020-06/2020-06-11_19-53_Thu.gpx 2020-06/2020-06-15_19-19_Mon.gpx 2020-06/2020-06-19_08-46_Fri.gpx 2020-06/2020-06-22_09-36_Mon.gpx 2020-06/2020-06-24_10-18_Wed.gpx 2020-06/2020-06-24_16-35_Wed.gpx 2020-06/2020-06-26_09-31_Fri.gpx 2020-06/2020-06-29_08-49_Mon.gpx 2020-06/2020-06-30_09-13_Tue.gpx 2020-06/2020-06-30_09-55_Tue.gpx 2020-07/2020-07-01_10-51_Wed.gpx 2020-07/2020-07-01_16-04_Wed.gpx 2020-07/2020-07-02_09-29_Thu.gpx 2020-07/2020-07-02_18-26_Thu.gpx 2020-07/2020-07-03_11-38_Fri.gpx 2020-07/2020-07-03_18-00_Fri.gpx 2020-07/2020-07-04_10-57_Sat.gpx 2020-07/2020-07-05_09-43_Sun.gpx 2020-07/2020-07-07_07-50_Tue.gpx 2020-07/2020-07-10_08-41_Fri.gpx 2020-07/2020-07-12_11-20_Sun.gpx 2020-07/2020-07-14_08-48_Tue.gpx 2020-07/2020-07-16_08-51_Thu.gpx 2020-07/2020-07-17_07-25_Fri.gpx 2020-07/2020-07-19_01-24_Sun.gpx 2020-07/2020-07-20_08-54_Mon.gpx 2020-07/2020-07-20_11-12_Mon.gpx 2020-07/2020-07-21_07-05_Tue.gpx 2020-07/2020-07-24_08-26_Fri.gpx 2020-07/2020-07-24_09-53_Fri.gpx 2020-07/2020-07-24_11-18_Fri.gpx 2020-07/2020-07-24_12-38_Fri.gpx 2020-07/2020-07-27_09-06_Mon.gpx 2020-07/2020-07-29_07-26_Wed.gpx 2020-07/2020-07-31_08-51_Fri.gpx 2020-08/2020-08-01_20-01_Sat.gpx 2020-08/2020-08-04_09-24_Tue.gpx 2020-08/2020-08-06_08-36_Thu.gpx 2020-08/2020-08-19_08-48_Wed.gpx 2020-09/2020-09-08_13-52_Tue.gpx 2020-09/2020-09-09_11-31_Wed.gpx 2020-09/2020-09-09_12-18_Wed.gpx 2020-10/2020-10-12_00-14_Mon.gpx 2020-10/2020-10-12_11-17_Mon.gpx 2020-10/2020-10-20_09-41_Tue.gpx 2020-10/2020-10-24_08-55_Sat.gpx 2020-10/2020-10-24_20-08_Sat.gpx 2020-10/2020-10-25_12-56_Sun.gpx 2020-10/2020-10-26_09-32_Mon.gpx 2020-10/2020-10-26_12-27_Mon.gpx 2020-10/2020-10-26_21-16_Mon.gpx 2020-10/2020-10-27_08-58_Tue.gpx 2020-10/2020-10-27_12-32_Tue.gpx 2020-10/2020-10-28_10-36_Wed.gpx 2020-10/2020-10-28_11-56_Wed.gpx 2020-10/2020-10-28_13-00_Wed.gpx 2020-10/2020-10-29_17-23_Thu.gpx 2020-10/2020-10-29_21-20_Thu.gpx 2020-10/2020-10-31_14-37_Sat.gpx 2020-11/2020-11-01_13-00_Sun.gpx 2020-11/2020-11-02_10-23_Mon.gpx 2020-11/2020-11-03_10-01_Tue.gpx 2020-11/2020-11-03_14-17_Tue.gpx 2020-11/2020-11-03_16-30_Tue.gpx 2020-11/2020-11-03_17-25_Tue.gpx 2020-11/2020-11-03_17-44_Tue.gpx 2020-11/2020-11-03_19-28_Tue.gpx 2020-11/2020-11-04_10-34_Wed.gpx 2020-11/2020-11-04_18-22_Wed.gpx 2020-11/2020-11-06_19-50_Fri.gpx 2020-11/2020-11-07_11-12_Sat.gpx 2020-11/2020-11-07_12-53_Sat.gpx 2020-11/2020-11-09_10-48_Mon.gpx 2020-11/2020-11-09_20-38_Mon.gpx 2020-11/2020-11-11_10-13_Wed.gpx 2020-11/2020-11-11_12-50_Wed.gpx 2020-11/2020-11-11_15-13_Wed.gpx 2020-11/2020-11-11_15-58_Wed.gpx 2020-11/2020-11-11_18-54_Wed.gpx 2020-11/2020-11-13_19-44_Fri.gpx 2020-11/2020-11-14_14-11_Sat.gpx 2020-11/2020-11-14_18-58_Sat.gpx 2020-11/2020-11-16_11-06_Mon.gpx 2020-11/2020-11-16_15-11_Mon.gpx 2020-11/2020-11-17_11-30_Tue.gpx 2020-11/2020-11-17_19-21_Tue.gpx 2020-11/2020-11-18_10-05_Wed.gpx 2020-11/2020-11-18_12-40_Wed.gpx 2020-11/2020-11-18_15-36_Wed.gpx 2020-11/2020-11-18_19-58_Wed.gpx 2020-11/2020-11-19_08-35_Thu.gpx 2020-11/2020-11-20_20-13_Fri.gpx 2020-11/2020-11-21_11-07_Sat.gpx 2020-11/2020-11-21_12-18_Sat.gpx 2020-11/2020-11-22_14-41_Sun.gpx 2020-11/2020-11-24_09-08_Tue.gpx 2020-11/2020-11-24_11-17_Tue.gpx 2020-11/2020-11-24_18-20_Tue.gpx 2020-11/2020-11-25_10-10_Wed.gpx 2020-11/2020-11-25_12-06_Wed.gpx 2020-11/2020-11-25_14-07_Wed.gpx 2020-11/2020-11-25_20-14_Wed.gpx 2020-11/2020-11-26_09-04_Thu.gpx 2020-11/2020-11-27_09-13_Fri.gpx 2020-11/2020-11-28_11-31_Sat.gpx 2020-11/2020-11-29_12-25_Sun.gpx 2020-12/2020-12-01_08-19_Tue.gpx 2020-12/2020-12-01_11-11_Tue.gpx 2020-12/2020-12-01_19-02_Tue.gpx 2020-12/2020-12-02_10-08_Wed.gpx 2020-12/2020-12-02_12-42_Wed.gpx 2020-12/2020-12-03_09-02_Thu.gpx 2020-12/2020-12-03_19-49_Thu.gpx 2020-12/2020-12-03_22-08_Thu.gpx 2020-12/2020-12-04_20-30_Fri.gpx 2020-12/2020-12-05_02-14_Sat.gpx 2020-12/2020-12-05_15-05_Sat.gpx 2020-12/2020-12-05_17-32_Sat.gpx 2020-12/2020-12-05_19-52_Sat.gpx 2020-12/2020-12-06_12-39_Sun.gpx 2020-12/2020-12-06_16-46_Sun.gpx 2020-12/2020-12-06_18-08_Sun.gpx 2020-12/2020-12-08_08-46_Tue.gpx 2020-12/2020-12-09_10-16_Wed.gpx 2020-12/2020-12-09_11-46_Wed.gpx 2020-12/2020-12-12_20-44_Sat.gpx 2020-12/2020-12-13_04-28_Sun.gpx 2020-12/2020-12-13_15-01_Sun.gpx 2020-12/2020-12-15_08-45_Tue.gpx 2020-12/2020-12-15_12-11_Tue.gpx 2020-12/2020-12-16_20-02_Wed.gpx 2020-12/2020-12-17_08-10_Thu.gpx 2020-12/2020-12-17_09-45_Thu.gpx 2020-12/2020-12-18_08-52_Fri.gpx 2020-12/2020-12-20_11-26_Sun.gpx 2020-12/2020-12-20_13-22_Sun.gpx 2020-12/2020-12-20_14-04_Sun.gpx 2020-12/2020-12-20_21-45_Sun.gpx 2020-12/2020-12-20_23-31_Sun.gpx 2020-12/2020-12-21_08-53_Mon.gpx 2020-12/2020-12-21_12-56_Mon.gpx 2020-12/2020-12-22_18-14_Tue.gpx 2020-12/2020-12-23_16-13_Wed.gpx 2020-12/2020-12-24_10-45_Thu.gpx 2020-12/2020-12-26_09-13_Sat.gpx 2020-12/2020-12-27_18-18_Sun.gpx 2020-12/2020-12-27_18-53_Sun.gpx 2020-12/2020-12-27_19-24_Sun.gpx 2020-12/2020-12-28_10-18_Mon.gpx 2020-12/2020-12-28_16-40_Mon.gpx 2020-12/2020-12-29_13-17_Tue.gpx 2020-12/2020-12-29_14-00_Tue.gpx 2020-12/2020-12-30_10-15_Wed.gpx 2020-12/2020-12-30_15-41_Wed.gpx 2020-12/2020-12-31_15-15_Thu.gpx 2020-12/2020-12-31_17-21_Thu.gpx 2021-01/2021-01-03_11-21_Sun.gpx 2021-01/2021-01-04_19-39_Mon.gpx 2021-01/2021-01-04_23-59_Mon.gpx 2021-01/2021-01-05_08-43_Tue.gpx 2021-01/2021-01-05_11-16_Tue.gpx 2021-01/2021-01-05_15-46_Tue.gpx 2021-01/2021-01-06_09-35_Wed.gpx 2021-01/2021-01-06_11-24_Wed.gpx 2021-01/2021-01-06_18-47_Wed.gpx 2021-01/2021-01-07_10-03_Thu.gpx 2021-01/2021-01-09_10-10_Sat.gpx 2021-01/2021-01-09_19-09_Sat.gpx 2021-01/2021-01-09_20-29_Sat.gpx 2021-01/2021-01-10_14-11_Sun.gpx 2021-01/2021-01-10_19-41_Sun.gpx 2021-01/2021-01-10_21-02_Sun.gpx 2021-01/2021-01-11_09-02_Mon.gpx 2021-01/2021-01-12_12-05_Tue.gpx 2021-01/2021-01-12_17-59_Tue.gpx 2021-01/2021-01-13_09-41_Wed.gpx 2021-01/2021-01-13_11-37_Wed.gpx 2021-01/2021-01-13_20-57_Wed.gpx 2021-01/2021-01-14_08-46_Thu.gpx 2021-01/2021-01-15_08-26_Fri.gpx 2021-01/2021-01-15_09-30_Fri.gpx 2021-01/2021-01-16_13-40_Sat.gpx 2021-01/2021-01-17_13-27_Sun.gpx 2021-01/2021-01-17_14-55_Sun.gpx 2021-01/2021-01-17_16-45_Sun.gpx 2021-01/2021-01-19_08-55_Tue.gpx 2021-01/2021-01-20_09-46_Wed.gpx 2021-01/2021-01-20_11-36_Wed.gpx 2021-01/2021-01-21_09-00_Thu.gpx 2021-01/2021-01-22_09-07_Fri.gpx 2021-01/2021-01-23_08-19_Sat.gpx 2021-01/2021-01-23_09-42_Sat.gpx 2021-01/2021-01-24_11-39_Sun.gpx 2021-01/2021-01-25_09-56_Mon.gpx 2021-01/2021-01-25_11-03_Mon.gpx 2021-01/2021-01-25_19-53_Mon.gpx 2021-01/2021-01-25_22-54_Mon.gpx 2021-01/2021-01-26_08-46_Tue.gpx 2021-01/2021-01-27_20-19_Wed.gpx 2021-01/2021-01-28_09-08_Thu.gpx 2021-01/2021-01-30_10-54_Sat.gpx 2021-01/2021-01-31_11-24_Sun.gpx 2021-02/2021-02-03_09-43_Wed.gpx 2021-02/2021-02-09_08-11_Tue.gpx 2021-02/2021-02-09_10-47_Tue.gpx 2021-02/2021-02-09_18-57_Tue.gpx 2021-02/2021-02-10_12-39_Wed.gpx 2021-02/2021-02-10_19-48_Wed.gpx 2021-02/2021-02-11_11-09_Thu.gpx 2021-02/2021-02-12_10-56_Fri.gpx 2021-02/2021-02-12_19-45_Fri.gpx 2021-02/2021-02-13_12-02_Sat.gpx 2021-02/2021-02-14_12-08_Sun.gpx 2021-02/2021-02-14_18-33_Sun.gpx 2021-02/2021-02-15_11-00_Mon.gpx 2021-02/2021-02-16_19-33_Tue.gpx 2021-02/2021-02-17_04-19_Wed.gpx 2021-02/2021-02-17_11-53_Wed.gpx 2021-02/2021-02-17_19-52_Wed.gpx 2021-02/2021-02-18_09-11_Thu.gpx 2021-02/2021-02-18_19-35_Thu.gpx 2021-02/2021-02-19_10-15_Fri.gpx 2021-02/2021-02-19_17-29_Fri.gpx 2021-02/2021-02-21_10-31_Sun.gpx 2021-02/2021-02-21_19-27_Sun.gpx 2021-02/2021-02-21_21-08_Sun.gpx 2021-02/2021-02-22_10-00_Mon.gpx 2021-02/2021-02-22_11-03_Mon.gpx 2021-02/2021-02-22_20-33_Mon.gpx 2021-02/2021-02-23_08-31_Tue.gpx 2021-02/2021-02-23_10-45_Tue.gpx 2021-02/2021-02-23_19-24_Tue.gpx 2021-02/2021-02-23_22-03_Tue.gpx 2021-02/2021-02-24_11-15_Wed.gpx 2021-02/2021-02-25_09-03_Thu.gpx 2021-02/2021-02-25_10-25_Thu.gpx 2021-02/2021-02-26_10-21_Fri.gpx 2021-02/2021-02-26_19-15_Fri.gpx 2021-03/2021-03-01_08-43_Mon.gpx 2021-03/2021-03-01_10-38_Mon.gpx 2021-03/2021-03-02_09-54_Tue.gpx 2021-03/2021-03-02_19-15_Tue.gpx 2021-03/2021-03-03_08-34_Wed.gpx 2021-03/2021-03-03_11-35_Wed.gpx 2021-03/2021-03-03_18-15_Wed.gpx 2021-03/2021-03-04_09-26_Thu.gpx 2021-03/2021-03-04_20-04_Thu.gpx 2021-03/2021-03-05_08-34_Fri.gpx 2021-03/2021-03-05_10-22_Fri.gpx 2021-03/2021-03-05_19-03_Fri.gpx 2021-03/2021-03-05_20-19_Fri.gpx 2021-03/2021-03-06_04-31_Sat.gpx 2021-03/2021-03-06_19-15_Sat.gpx 2021-03/2021-03-07_13-56_Sun.gpx 2021-03/2021-03-08_10-57_Mon.gpx 2021-03/2021-03-08_16-14_Mon.gpx 2021-03/2021-03-08_19-12_Mon.gpx 2021-03/2021-03-09_08-49_Tue.gpx 2021-03/2021-03-09_09-40_Tue.gpx 2021-03/2021-03-09_19-46_Tue.gpx 2021-03/2021-03-10_08-55_Wed.gpx 2021-03/2021-03-10_11-22_Wed.gpx 2021-03/2021-03-10_18-34_Wed.gpx 2021-03/2021-03-11_09-01_Thu.gpx 2021-03/2021-03-11_20-25_Thu.gpx 2021-03/2021-03-12_07-35_Fri.gpx 2021-03/2021-03-12_09-18_Fri.gpx 2021-03/2021-03-12_19-59_Fri.gpx 2021-03/2021-03-13_07-53_Sat.gpx 2021-03/2021-03-14_16-21_Sun.gpx 2021-03/2021-03-15_10-24_Mon.gpx 2021-03/2021-03-15_18-53_Mon.gpx 2021-03/2021-03-16_08-50_Tue.gpx 2021-03/2021-03-16_10-05_Tue.gpx 2021-03/2021-03-16_19-37_Tue.gpx 2021-03/2021-03-18_08-36_Thu.gpx 2021-03/2021-03-18_09-40_Thu.gpx 2021-03/2021-03-18_10-35_Thu.gpx 2021-03/2021-03-19_15-31_Fri.gpx 2021-03/2021-03-19_20-34_Fri.gpx 2021-03/2021-03-19_21-07_Fri.gpx 2021-03/2021-03-20_05-15_Sat.gpx 2021-03/2021-03-20_11-30_Sat.gpx 2021-03/2021-03-21_13-23_Sun.gpx 2021-03/2021-03-21_16-46_Sun.gpx 2021-03/2021-03-21_19-51_Sun.gpx 2021-03/2021-03-22_12-55_Mon.gpx 2021-03/2021-03-23_09-03_Tue.gpx 2021-03/2021-03-24_20-10_Wed.gpx 2021-03/2021-03-25_08-46_Thu.gpx 2021-03/2021-03-26_08-59_Fri.gpx 2021-03/2021-03-26_10-31_Fri.gpx 2021-03/2021-03-26_18-43_Fri.gpx 2021-03/2021-03-27_17-12_Sat.gpx 2021-03/2021-03-27_20-10_Sat.gpx 2021-03/2021-03-28_15-05_Sun.gpx 2021-03/2021-03-29_08-54_Mon.gpx 2021-03/2021-03-30_10-04_Tue.gpx 2021-03/2021-03-30_20-00_Tue.gpx 2021-03/2021-03-31_08-25_Wed.gpx 2021-04/2021-04-01_08-45_Thu.gpx 2021-04/2021-04-02_16-09_Fri.gpx 2021-04/2021-04-03_13-34_Sat.gpx 2021-04/2021-04-04_12-00_Sun.gpx 2021-04/2021-04-06_08-35_Tue.gpx 2021-04/2021-04-08_09-34_Thu.gpx 2021-04/2021-04-08_12-42_Thu.gpx 2021-04/2021-04-09_08-30_Fri.gpx 2021-04/2021-04-09_18-44_Fri.gpx 2021-04/2021-04-10_15-13_Sat.gpx 2021-04/2021-04-10_22-42_Sat.gpx 2021-04/2021-04-11_12-26_Sun.gpx 2021-04/2021-04-12_08-50_Mon.gpx 2021-04/2021-04-12_13-15_Mon.gpx 2021-04/2021-04-12_19-49_Mon.gpx 2021-04/2021-04-13_08-47_Tue.gpx 2021-04/2021-04-13_13-20_Tue.gpx 2021-04/2021-04-13_16-36_Tue.gpx 2021-04/2021-04-13_20-54_Tue.gpx 2021-04/2021-04-14_08-46_Wed.gpx 2021-04/2021-04-14_12-26_Wed.gpx 2021-04/2021-04-14_19-59_Wed.gpx 2021-04/2021-04-15_08-41_Thu.gpx 2021-04/2021-04-15_17-51_Thu.gpx 2021-04/2021-04-16_08-42_Fri.gpx 2021-04/2021-04-18_12-11_Sun.gpx 2021-04/2021-04-18_17-49_Sun.gpx 2021-04/2021-04-19_09-13_Mon.gpx 2021-04/2021-04-20_08-40_Tue.gpx 2021-04/2021-04-20_10-57_Tue.gpx 2021-04/2021-04-20_20-15_Tue.gpx 2021-04/2021-04-22_08-41_Thu.gpx 2021-04/2021-04-23_08-43_Fri.gpx 2021-04/2021-04-24_16-55_Sat.gpx 2021-04/2021-04-25_11-50_Sun.gpx 2021-04/2021-04-25_20-27_Sun.gpx 2021-04/2021-04-26_05-29_Mon.gpx 2021-04/2021-04-26_11-49_Mon.gpx 2021-04/2021-04-27_08-38_Tue.gpx 2021-04/2021-04-28_08-40_Wed.gpx 2021-04/2021-04-29_08-38_Thu.gpx 2021-04/2021-04-29_19-29_Thu.gpx 2021-04/2021-04-30_10-14_Fri.gpx 2021-04/2021-04-30_17-36_Fri.gpx 2021-04/2021-04-30_17-52_Fri.gpx 2021-05/2021-05-03_09-49_Mon.gpx 2021-05/2021-05-03_11-33_Mon.gpx 2021-05/2021-05-10_10-21_Mon.gpx 2021-05/2021-05-10_13-38_Mon.gpx 2021-05/2021-05-10_15-09_Mon.gpx 2021-05/2021-05-11_09-49_Tue.gpx 2021-05/2021-05-11_10-18_Tue.gpx 2021-05/2021-05-13_15-08_Thu.gpx 2021-05/2021-05-15_10-00_Sat.gpx 2021-05/2021-05-19_09-05_Wed.gpx 2021-05/2021-05-21_08-50_Fri.gpx 2021-05/2021-05-23_09-44_Sun.gpx 2021-05/2021-05-24_10-27_Mon.gpx 2021-05/2021-05-25_09-10_Tue.gpx 2021-05/2021-05-25_11-45_Tue.gpx 2021-05/2021-05-25_14-25_Tue.gpx 2021-05/2021-05-26_14-52_Wed.gpx 2021-05/2021-05-26_19-10_Wed.gpx 2021-05/2021-05-27_08-44_Thu.gpx 2021-05/2021-05-29_11-01_Sat.gpx 2021-05/2021-05-29_11-11_Sat.gpx 2021-05/2021-05-31_08-57_Mon.gpx 2021-05/2021-05-31_13-37_Mon.gpx 2021-05/2021-05-31_15-33_Mon.gpx 2021-06/2021-06-02_08-52_Wed.gpx 2021-06/2021-06-03_07-25_Thu.gpx 2021-06/2021-06-04_08-49_Fri.gpx 2021-06/2021-06-07_08-45_Mon.gpx 2021-06/2021-06-12_08-19_Sat.gpx 2021-06/2021-06-12_08-57_Sat.gpx 2021-06/2021-06-15_20-34_Tue.gpx 2021-06/2021-06-16_08-40_Wed.gpx 2021-06/2021-06-18_08-45_Fri.gpx 2021-06/2021-06-18_14-04_Fri.gpx 2021-06/2021-06-18_15-44_Fri.gpx 2021-06/2021-06-21_14-01_Mon.gpx 2021-06/2021-06-22_08-21_Tue.gpx 2021-06/2021-06-25_08-50_Fri.gpx 2021-06/2021-06-29_09-08_Tue.gpx 2021-06/2021-06-29_10-34_Tue.gpx 2021-06/2021-06-29_18-22_Tue.gpx 2021-06/2021-06-30_09-52_Wed.gpx 2021-07/2021-07-02_09-03_Fri.gpx 2021-07/2021-07-02_11-27_Fri.gpx 2021-07/2021-07-02_11-56_Fri.gpx 2021-07/2021-07-06_08-24_Tue.gpx 2021-07/2021-07-11_12-17_Sun.gpx 2021-07/2021-07-11_19-10_Sun.gpx 2021-07/2021-07-12_19-02_Mon.gpx 2021-07/2021-07-13_07-28_Tue.gpx 2021-07/2021-07-13_18-24_Tue.gpx 2021-07/2021-07-14_14-38_Wed.gpx 2021-07/2021-07-14_18-48_Wed.gpx 2021-07/2021-07-15_09-38_Thu.gpx 2021-07/2021-07-15_15-07_Thu.gpx 2021-07/2021-07-16_10-22_Fri.gpx 2021-07/2021-07-16_10-51_Fri.gpx 2021-07/2021-07-16_17-29_Fri.gpx 2021-07/2021-07-17_00-37_Sat.gpx 2021-07/2021-07-17_11-19_Sat.gpx 2021-07/2021-07-18_13-58_Sun.gpx 2021-07/2021-07-18_15-24_Sun.gpx 2021-07/2021-07-19_21-45_Mon.gpx 2021-07/2021-07-20_09-38_Tue.gpx 2021-07/2021-07-21_09-31_Wed.gpx 2021-07/2021-07-21_17-46_Wed.gpx 2021-07/2021-07-22_09-43_Thu.gpx 2021-07/2021-07-22_11-47_Thu.gpx 2021-07/2021-07-23_08-31_Fri.gpx 2021-07/2021-07-26_08-56_Mon.gpx 2021-07/2021-07-29_09-26_Thu.gpx 2021-07/2021-07-29_11-08_Thu.gpx 2021-07/2021-07-30_10-22_Fri.gpx 2021-08/2021-08-01_17-48_Sun.gpx 2021-08/2021-08-01_23-19_Sun.gpx 2021-08/2021-08-02_09-10_Mon.gpx 2021-08/2021-08-02_11-53_Mon.gpx 2021-08/2021-08-03_14-05_Tue.gpx 2021-08/2021-08-04_13-19_Wed.gpx 2021-08/2021-08-05_09-30_Thu.gpx 2021-08/2021-08-05_18-00_Thu.gpx 2021-08/2021-08-05_19-19_Thu.gpx 2021-08/2021-08-06_09-06_Fri.gpx 2021-08/2021-08-07_11-34_Sat.gpx 2021-08/2021-08-08_12-10_Sun.gpx 2021-08/2021-08-08_16-40_Sun.gpx 2021-08/2021-08-08_17-48_Sun.gpx 2021-08/2021-08-08_18-25_Sun.gpx 2021-08/2021-08-08_19-19_Sun.gpx 2021-08/2021-08-09_10-05_Mon.gpx 2021-08/2021-08-09_18-58_Mon.gpx 2021-08/2021-08-10_09-43_Tue.gpx 2021-08/2021-08-11_08-27_Wed.gpx 2021-08/2021-08-11_10-18_Wed.gpx 2021-08/2021-08-11_16-50_Wed.gpx 2021-08/2021-08-12_09-39_Thu.gpx 2021-08/2021-08-12_11-17_Thu.gpx 2021-08/2021-08-26_08-10_Thu.gpx 2021-08/2021-08-26_19-46_Thu.gpx 2021-08/2021-08-27_11-03_Fri.gpx 2021-08/2021-08-28_10-13_Sat.gpx 2021-08/2021-08-28_10-19_Sat.gpx 2021-08/2021-08-30_10-20_Mon.gpx 2021-09/2021-09-01_09-46_Wed.gpx 2021-09/2021-09-02_11-16_Thu.gpx 2021-09/2021-09-02_19-08_Thu.gpx 2021-09/2021-09-03_17-24_Fri.gpx 2021-09/2021-09-03_20-05_Fri.gpx 2021-09/2021-09-04_09-27_Sat.gpx 2021-09/2021-09-07_10-11_Tue.gpx 2021-09/2021-09-08_18-54_Wed.gpx 2021-09/2021-09-08_21-07_Wed.gpx 2021-09/2021-09-09_08-36_Thu.gpx 2021-09/2021-09-09_09-40_Thu.gpx 2021-09/2021-09-09_11-15_Thu.gpx 2021-09/2021-09-10_11-02_Fri.gpx 2021-09/2021-09-10_12-20_Fri.gpx 2021-09/2021-09-10_12-23_Fri.gpx 2021-09/2021-09-11_11-23_Sat.gpx 2021-09/2021-09-12_17-04_Sun.gpx 2021-09/2021-09-12_20-08_Sun.gpx 2021-09/2021-09-13_09-00_Mon.gpx 2021-09/2021-09-14_10-14_Tue.gpx 2021-09/2021-09-16_09-19_Thu.gpx 2021-09/2021-09-18_22-16_Sat.gpx 2021-09/2021-09-19_19-17_Sun.gpx 2021-09/2021-09-20_16-15_Mon.gpx 2021-09/2021-09-21_20-24_Tue.gpx 2021-09/2021-09-22_10-47_Wed.gpx 2021-09/2021-09-23_08-23_Thu.gpx 2021-09/2021-09-23_09-41_Thu.gpx 2021-09/2021-09-27_07-59_Mon.gpx 2021-09/2021-09-27_08-22_Mon.gpx 2021-09/2021-09-27_08-30_Mon.gpx 2021-09/2021-09-29_09-36_Wed.gpx 2021-09/2021-09-29_13-35_Wed.gpx 2021-09/2021-09-30_10-35_Thu.gpx 2021-09/2021-09-30_12-31_Thu.gpx 2021-09/2021-09-30_17-59_Thu.gpx 2021-10/ 2021-10/2021-10-01_12-10_Fri.gpx 2021-10/2021-10-06_08-58_Wed.gpx 2021-10/2021-10-06_13-37_Wed.gpx 2021-10/2021-10-06_15-23_Wed.gpx 2021-10/2021-10-07_19-57_Thu.gpx 2021-10/2021-10-09_13-38_Sat.gpx 2021-10/2021-10-11_07-51_Mon.gpx 2021-10/2021-10-12_17-13_Tue.gpx 2021-10/2021-10-12_21-03_Tue.gpx 2021-10/2021-10-13_08-59_Wed.gpx 2021-10/2021-10-14_10-37_Thu.gpx 2021-10/2021-10-15_09-00_Fri.gpx 2021-10/2021-10-17_09-34_Sun.gpx 2021-10/2021-10-19_08-49_Tue.gpx 2021-10/2021-10-19_20-16_Tue.gpx 2021-10/2021-10-20_10-09_Wed.gpx 2021-10/2021-10-21_10-29_Thu.gpx 2021-10/2021-10-21_11-57_Thu.gpx 2021-10/2021-10-25_19-10_Mon.gpx 2021-10/2021-10-25_21-25_Mon.gpx 2021-10/2021-10-26_08-56_Tue.gpx 2021-10/2021-10-26_18-04_Tue.gpx 2021-10/2021-10-28_10-34_Thu.gpx 2021-10/2021-10-28_12-33_Thu.gpx 2021-10/2021-10-28_20-34_Thu.gpx 2021-10/2021-10-29_08-30_Fri.gpx 2021-10/2021-10-30_11-06_Sat.gpx 2021-10/2021-10-30_11-57_Sat.gpx 2021-10/2021-10-30_14-32_Sat.gpx 2021-10/2021-10-30_18-33_Sat.gpx 2021-10/2021-10-31_10-30_Sun.gpx 2021-11/ 2021-11/2021-11-01_12-02_Mon.gpx 2021-11/2021-11-01_16-47_Mon.gpx 2021-11/2021-11-03_09-39_Wed.gpx 2021-11/2021-11-03_16-56_Wed.gpx 2021-11/2021-11-03_22-23_Wed.gpx 2021-11/2021-11-05_09-43_Fri.gpx 2021-11/2021-11-10_13-58_Wed.gpx 2021-11/2021-11-11_10-34_Thu.gpx 2021-11/2021-11-11_12-24_Thu.gpx 2021-11/2021-11-11_19-42_Thu.gpx 2021-11/2021-11-12_11-00_Fri.gpx 2021-11/2021-11-15_08-39_Mon.gpx 2021-11/2021-11-15_19-31_Mon.gpx 2021-11/2021-11-16_08-34_Tue.gpx 2021-11/2021-11-17_09-50_Wed.gpx 2021-11/2021-11-17_16-34_Wed.gpx 2021-11/2021-11-17_21-05_Wed.gpx 2021-11/2021-11-17_22-51_Wed.gpx 2021-11/2021-11-18_10-58_Thu.gpx 2021-11/2021-11-18_18-20_Thu.gpx 2021-11/2021-11-19_09-34_Fri.gpx 2021-11/2021-11-19_13-17_Fri.gpx 2021-11/2021-11-22_19-42_Mon.gpx 2021-11/2021-11-22_22-37_Mon.gpx 2021-11/2021-11-23_09-35_Tue.gpx 2021-11/2021-11-24_09-17_Wed.gpx 2021-11/2021-11-25_10-42_Thu.gpx 2021-11/2021-11-25_12-10_Thu.gpx 2021-11/2021-11-26_09-34_Fri.gpx 2021-11/2021-11-26_19-38_Fri.gpx 2021-11/2021-11-27_10-11_Sat.gpx 2021-12/ 2021-12/2021-12-01_09-19_Wed.gpx 2021-12/2021-12-02_10-40_Thu.gpx 2021-12/2021-12-02_12-02_Thu.gpx 2021-12/2021-12-03_12-26_Fri.gpx 2021-12/2021-12-03_17-07_Fri.gpx 2021-12/2021-12-04_13-27_Sat.gpx 2021-12/2021-12-06_09-02_Mon.gpx 2021-12/2021-12-10_08-21_Fri.gpx 2021-12/2021-12-10_09-28_Fri.gpx 2021-12/2021-12-10_12-33_Fri.gpx 2021-12/2021-12-11_17-01_Sat.gpx sent 314,939 bytes received 5,364,990 bytes 2,271,971.60 bytes/sec total size is 40,339,623 speedup is 7.10 #+end_example **** Importing *.gpx files This takes a while. #+begin_src bash :results none :var target_db=target_db # rm "$target_db" for f in sources/strolling/**/*.gpx; do spatialite_xml_load -x "$f" -d strolling.db done #+end_src #+RESULTS: **** Selecting some GPX tracks with metadata on individual points - Note that we ignore `extensions_heading`. - hdop = horizontal dilution of precision ([[https://en.wikipedia.org/wiki/Dilution_of_precision_(navigation)][info]]) #+name: points_query #+begin_src sql select t.node_id track_id, seg.node_id segment_id, pt.node_id pt_id, time.node_value timestamp, AsWkt(ST_GeomFromText( 'POINT('||pt.lon||' '||pt.lat||')', 4326 )) geom, ele.node_value elevation, speed.node_value speed, hdop.node_value hdop from gpx_trk t join gpx_trk_trkseg seg on t.node_id = seg.parent_id join gpx_trk_trkseg_trkpt pt on seg.node_id = pt.parent_id join gpx_trk_trkseg_trkpt_time time on pt.node_id = time.parent_id join gpx_trk_trkseg_trkpt_ele ele on pt.node_id = ele.parent_id join gpx_trk_trkseg_trkpt_extensions_speed speed on pt.node_id = speed.parent_id join gpx_trk_trkseg_trkpt_hdop hdop on pt.node_id = hdop.parent_id; #+end_src #+begin_src fish :noweb yes echo <> | sed 's/;/ limit 10;/' | spatialite -csv strolling.db #+end_src #+RESULTS: ** Pitalls *** My queries are slow, what do I do? Make sure SQlite uses the correct indices. You can debug this by writing #+begin_src sql EXPLAIN QUERY PLAN SELECT … #+end_src and then continuing your `SELECT` query like you normally would.