From 11e5f6a7d47b9ec9b26ddc383b88977f3b2e2e63 Mon Sep 17 00:00:00 2001 From: jstet Date: Tue, 17 Oct 2023 18:21:32 -0700 Subject: [PATCH 01/16] update README --- README.md | 31 ++++++++++++++++++++++++++----- config/database.yml | 10 ++++++++-- db/schema.rb | 6 +++--- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 00dec959..409ecbb1 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,33 @@ Once you have installed and configured Ruby on Rails please fork the [linkvan-ap To execute the app on your computer proceed as follows: 1. cd `< directory where you cloned the project repository to >` -2. Update your database configuration on `config/database.yml` -3. bundle install -4. rails db:create (to create a database) -5. rails db:migrate +2. Start a postgres database locally, for example with docker: +``` +docker run --name linkvan_postgres -e POSTGRES_PASSWORD=mysecretpassword -e -d postgres +``` +3. Update your database configuration on `config/database.yml`. Based on the previous command, the updated development and test section could for example be: +``` +development: + <<: *default + database: linkvan_api_development + host: localhost + port: 5432 + username: postgres + password: mysecretpassword + +test: + <<: *default + database: linkvan_api_test + host: localhost + port: 5432 + username: postgres + password: mysecretpassword +``` +4. Run `bundle install`. You might need to use [rvm](https://rvm.io/). +5. rails db:create (to create a database) +6. rails db:migrate 6. rails server -7. load http://localhost:3000/admin/dashboard on your web browser. +8. load http://localhost:3000/admin/dashboard on your web browser. ## Contributing to linkvan-web diff --git a/config/database.yml b/config/database.yml index e804a333..107ce3e6 100644 --- a/config/database.yml +++ b/config/database.yml @@ -17,13 +17,15 @@ default: &default adapter: postgresql encoding: unicode - # For details on connection pooling, see Rails configuration guide - # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> development: <<: *default database: linkvan_api_development + host: localhost + port: 5432 + username: postgres + password: mysecretpassword # The specified database role being used to connect to postgres. # To create additional roles in postgres see `$ createuser --help`. @@ -58,6 +60,10 @@ development: test: <<: *default database: linkvan_api_test + host: localhost + port: 5432 + username: postgres + password: mysecretpassword # As with config/credentials.yml, you never want to store sensitive information, # like your database password, in your source code. If your source code is diff --git a/db/schema.rb b/db/schema.rb index 90bc01b5..63d61123 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -39,10 +39,10 @@ t.string "filename", null: false t.string "content_type" t.text "metadata" + t.string "service_name", null: false t.bigint "byte_size", null: false t.string "checksum" t.datetime "created_at", precision: nil, null: false - t.string "service_name", null: false t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true end @@ -230,8 +230,8 @@ t.boolean "verified", default: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" - t.datetime "reset_password_sent_at", precision: nil - t.datetime "remember_created_at", precision: nil + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" t.string "organization" t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true From 08d7a5bf1375477caa12dcc67242c2bd983a0ce6 Mon Sep 17 00:00:00 2001 From: jstet Date: Thu, 19 Oct 2023 13:43:33 -0700 Subject: [PATCH 02/16] docker-compose -> docker compose --- .env.example | 2 +- README.md | 3 +++ bin/docker/bash | 2 +- bin/docker/bundle | 2 +- bin/docker/dev_reset | 2 +- bin/docker/run | 2 +- bin/docker/setup | 6 +++--- bin/docker/start | 2 +- bin/docker/test | 2 +- bin/docker/yarn | 2 +- docker-compose.ci.yml | 4 ++-- docker-compose.yml | 6 +++--- 12 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.env.example b/.env.example index 72cb440b..6604641a 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,5 @@ # If you want, you can run: -# $ docker-compose up redis postgres +# $ docker compose up redis postgres # $ bin/rails s REDIS_URL=redis://@127.0.0.1:6379/1 DATABASE_URL=postgres://postgres:postgres@127.0.0.1:5432/ diff --git a/README.md b/README.md index 409ecbb1..f8c0d244 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,9 @@ test: 6. rails db:migrate 6. rails server 8. load http://localhost:3000/admin/dashboard on your web browser. +9. login with: + name: "admin@example.com", + password: "password", ## Contributing to linkvan-web diff --git a/bin/docker/bash b/bin/docker/bash index 0593c5ab..80604ab0 100755 --- a/bin/docker/bash +++ b/bin/docker/bash @@ -1,4 +1,4 @@ #!/bin/bash set -e -docker-compose run --rm web bash +docker compose run --rm web bash diff --git a/bin/docker/bundle b/bin/docker/bundle index eef0d244..c0abe31e 100755 --- a/bin/docker/bundle +++ b/bin/docker/bundle @@ -1,4 +1,4 @@ #!/bin/bash set -e -exec docker-compose --rm web bundle "$@" +exec docker compose --rm web bundle "$@" diff --git a/bin/docker/dev_reset b/bin/docker/dev_reset index ebb462d1..cbf5005e 100755 --- a/bin/docker/dev_reset +++ b/bin/docker/dev_reset @@ -9,7 +9,7 @@ def system!(*args) end def docked!(*args) - system!("docker-compose run -rm web", *args) + system!("docker compose run -rm web", *args) end FileUtils.chdir APP_ROOT do diff --git a/bin/docker/run b/bin/docker/run index 76bd8813..b2e83db3 100755 --- a/bin/docker/run +++ b/bin/docker/run @@ -2,4 +2,4 @@ # Little helper to run a command from the docker container set -e -exec docker-compose run --rm web "$@" +exec docker compose run --rm web "$@" diff --git a/bin/docker/setup b/bin/docker/setup index f04f7ae0..413648b9 100755 --- a/bin/docker/setup +++ b/bin/docker/setup @@ -9,7 +9,7 @@ def system!(*args) end def docked!(*args) - command_line = ["docker-compose run --rm web"] + args + command_line = ["docker compose run --rm web"] + args system!(command_line.join(" ")) end @@ -19,10 +19,10 @@ FileUtils.chdir APP_ROOT do FileUtils.cp ".env.template", ".env" unless File.exist?(".env") puts "== Pulling Images ==" - system! "docker-compose pull" + system! "docker compose pull" puts "== Building Container ==" - system! "docker-compose build" + system! "docker compose build" puts "== Running: bin/setup #{ARGV.join(' ')} ==" docked!("./bin/setup", ARGV) diff --git a/bin/docker/start b/bin/docker/start index 746c7468..c4c36cf7 100755 --- a/bin/docker/start +++ b/bin/docker/start @@ -2,4 +2,4 @@ set -e echo "== Turning on Docker ==" -docker-compose up +docker compose up diff --git a/bin/docker/test b/bin/docker/test index 760bcdd1..71cf2258 100755 --- a/bin/docker/test +++ b/bin/docker/test @@ -1,4 +1,4 @@ #!/bin/bash set -e -docker-compose -f docker-compose.ci.yml run --rm test +docker compose -f docker compose.ci.yml run --rm test diff --git a/bin/docker/yarn b/bin/docker/yarn index 8ae101d2..abf37ed6 100755 --- a/bin/docker/yarn +++ b/bin/docker/yarn @@ -1,4 +1,4 @@ #!/bin/bash set -e -exec docker-compose --rm web yarn "$@" +exec docker compose --rm web yarn "$@" diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 544912af..d97e4c37 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -3,8 +3,8 @@ # ## Usage: # -# docker-compose -f docker-compose.ci.yml build test -# docker-compose -f docker-compose.ci.yml run --rm test +# docker compose -f docker compose.ci.yml build test +# docker compose -f docker compose.ci.yml run --rm test version: '3' x-ci-app: &ci-app diff --git a/docker-compose.yml b/docker-compose.yml index 05cc32f4..6bda06dc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,9 +4,9 @@ # ## Usage: # -# docker-compose build -# docker-compose run --rm web bin/setup -# docker-compose up +# docker compose build +# docker compose run --rm web bin/setup +# docker compose up version: "3" x-app: &app From 7f46c37a3a41c147ba39783833d13505c800d45a Mon Sep 17 00:00:00 2001 From: jstet Date: Mon, 30 Oct 2023 17:33:01 -0700 Subject: [PATCH 03/16] attempt to add resize action --- Gemfile | 2 + Gemfile.lock | 5 +++ app/controllers/admin/base_controller.rb | 2 +- app/controllers/admin/dashboard_controller.rb | 29 ++++++++++++++ .../controllers/chart_controller.js | 40 +++++++++++++++++++ app/javascript/controllers/index.js | 11 +++-- app/models/analytics/event.rb | 2 + app/views/admin/dashboard/index.html.erb | 38 ++++++++++++------ ...on_admin.html.erb => application.html.erb} | 2 + config/routes.rb | 6 ++- package.json | 1 + yarn.lock | 20 ++++++++++ 12 files changed, 140 insertions(+), 18 deletions(-) create mode 100644 app/javascript/controllers/chart_controller.js rename app/views/layouts/{application_admin.html.erb => application.html.erb} (94%) diff --git a/Gemfile b/Gemfile index 70bcd7f0..310c7b4b 100644 --- a/Gemfile +++ b/Gemfile @@ -117,3 +117,5 @@ gem "cssbundling-rails", "~> 1.1" # Aborts requests that are taking too long. # Set the timeout by setting the RACK_TIMEOUT_SERVICE_TIMEOUT env var gem "rack-timeout" + +gem "hotwire-livereload", "~> 1.3", :group => :development diff --git a/Gemfile.lock b/Gemfile.lock index abd74a2a..569c9b11 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,6 +125,10 @@ GEM geocoder (1.8.2) globalid (1.1.0) activesupport (>= 5.0) + hotwire-livereload (1.3.0) + actioncable (>= 6.0.0) + listen (>= 3.0.0) + railties (>= 6.0.0) hotwire-rails (0.1.3) rails (>= 6.0.0) stimulus-rails @@ -366,6 +370,7 @@ DEPENDENCIES geo_coord geocoder (~> 1.6) haversine! + hotwire-livereload (~> 1.3) hotwire-rails inline_svg jsbundling-rails (~> 1.0) diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb index 443ded94..aa1f511a 100644 --- a/app/controllers/admin/base_controller.rb +++ b/app/controllers/admin/base_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Admin::BaseController < ApplicationController - layout "application_admin" + layout "application" # skip_before_action :authenticate_user! # helpers from devise. Example: diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index abda3047..5196db93 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -3,4 +3,33 @@ class Admin::DashboardController < Admin::BaseController def index end + + def heatmap + data = {} + # /admin/dashboard/heatmap?service=shelter + if heatmap_params[:service].present? + # Filter events by service + #service = Service.find_by(key: heatmap_params[:service]) + #events = Analytics::Event.joins(impressions: :impressionables).where(impressionables: service.facilities) + else + events = Analytics::Event.all + end + + events.find_each do |event| + lat = event.lat + long = event.long + + key = [lat, long] + data[key] ||= { lat:, long:, count: 0 } + data[key][:count] += 1 + end + + render json: { data: data.values } + end + + private + + def heatmap_params + params.permit(:service) + end end diff --git a/app/javascript/controllers/chart_controller.js b/app/javascript/controllers/chart_controller.js new file mode 100644 index 00000000..9e41b76a --- /dev/null +++ b/app/javascript/controllers/chart_controller.js @@ -0,0 +1,40 @@ +import { Controller } from "@hotwired/stimulus"; +import * as echarts from 'echarts'; + +export default class extends Controller { + connect() { + console.log("Chart connected!!!"); + + const container = this.element; + const chart = echarts.init(container); + + var option; + + option = { + xAxis: { + type: 'category', + boundaryGap: false, + data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: [820, 932, 901, 934, 1290, 1330, 1320], + type: 'line', + areaStyle: {} + } + ] + }; + + // Set the chart option + option && chart.setOption(option); + + + }; + rsz(event){ + console.log("Resizing chart..."); + + }; +} \ No newline at end of file diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index 33109b6f..e87e3127 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -4,14 +4,17 @@ import { application } from "./application" -import AutoSubmitController from "./auto_submit_controller.js" +import AutoSubmitController from "./auto_submit_controller" application.register("auto-submit", AutoSubmitController) -import HelloController from "./hello_controller.js" +import ChartController from "./chart_controller" +application.register("chart", ChartController) + +import HelloController from "./hello_controller" application.register("hello", HelloController) -import ModalController from "./modal_controller.js" +import ModalController from "./modal_controller" application.register("modal", ModalController) -import PagyController from "./pagy_controller.js" +import PagyController from "./pagy_controller" application.register("pagy", PagyController) diff --git a/app/models/analytics/event.rb b/app/models/analytics/event.rb index ba3e2988..654767b1 100644 --- a/app/models/analytics/event.rb +++ b/app/models/analytics/event.rb @@ -4,6 +4,8 @@ class Analytics::Event < ApplicationRecord belongs_to :visit has_many :impressions, dependent: :destroy + has_many :impressionables, through: :impressions, source: :impressionable + has_many :facilities, through: :impressions, source: :impressionable, source_type: "Facility" diff --git a/app/views/admin/dashboard/index.html.erb b/app/views/admin/dashboard/index.html.erb index 383b97e0..688f197a 100644 --- a/app/views/admin/dashboard/index.html.erb +++ b/app/views/admin/dashboard/index.html.erb @@ -1,17 +1,31 @@ - - + + \ No newline at end of file diff --git a/app/views/layouts/application_admin.html.erb b/app/views/layouts/application.html.erb similarity index 94% rename from app/views/layouts/application_admin.html.erb rename to app/views/layouts/application.html.erb index e85ddee6..501894c8 100644 --- a/app/views/layouts/application_admin.html.erb +++ b/app/views/layouts/application.html.erb @@ -21,6 +21,8 @@ <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %> <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> + <%= hotwire_livereload_tags %> + <%= hotwire_livereload_tags if Rails.env.development? %> diff --git a/config/routes.rb b/config/routes.rb index 86f837a0..e5237013 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -19,7 +19,11 @@ namespace :admin do root to: "admin/dashboard#index" - resources :dashboard, only: %i[index show] + resources :dashboard, only: %i[index show] do + collection do + get :heatmap, defaults: { format: :json } + end + end # resources :users, only: [] do # root to: "dashboard#index" diff --git a/package.json b/package.json index ed96328f..51dc6d40 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "bulma": "^0.9.4", "bulma-switch": "^2.0.4", "bulma-tooltip": "^3.0.2", + "echarts": "^5.4.3", "esbuild": "^0.15.14", "flatpickr": "^4.6.9", "sass": "^1.56.1", diff --git a/yarn.lock b/yarn.lock index 480eb959..a9467c53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -220,6 +220,14 @@ core-js@^2.4.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== +echarts@^5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/echarts/-/echarts-5.4.3.tgz#f5522ef24419164903eedcfd2b506c6fc91fb20c" + integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA== + dependencies: + tslib "2.3.0" + zrender "5.4.4" + esbuild-android-64@0.15.14: version "0.15.14" resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz#114e55b0d58fb7b45d7fa3d93516bd13fc8869cc" @@ -473,3 +481,15 @@ trix@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/trix/-/trix-2.0.5.tgz#f54880ab38e24d47829a04e04afaf03a8607f772" integrity sha512-OiCbDf17F7JahEwhyL1MvK9DxAAT1vkaW5sn+zpwfemZAcc4RfQB4ku18/1mKP58LRwBhjcy+6TBho7ciXz52Q== + +tslib@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + +zrender@5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/zrender/-/zrender-5.4.4.tgz#8854f1d95ecc82cf8912f5a11f86657cb8c9e261" + integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw== + dependencies: + tslib "2.3.0" From 5df8d401ebe32e82cf650c586e0c9afa8d6d8d15 Mon Sep 17 00:00:00 2001 From: jstet Date: Mon, 30 Oct 2023 17:35:41 -0700 Subject: [PATCH 04/16] rm action --- app/views/admin/dashboard/index.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admin/dashboard/index.html.erb b/app/views/admin/dashboard/index.html.erb index 688f197a..451d0c10 100644 --- a/app/views/admin/dashboard/index.html.erb +++ b/app/views/admin/dashboard/index.html.erb @@ -1,7 +1,7 @@
-
+
From 93002fff9b1b29edd38084a90e843facf9ef22c9 Mon Sep 17 00:00:00 2001 From: jstet Date: Mon, 30 Oct 2023 17:53:13 -0700 Subject: [PATCH 05/16] reize chart action functional --- .../controllers/chart_controller.js | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/app/javascript/controllers/chart_controller.js b/app/javascript/controllers/chart_controller.js index 9e41b76a..d297ef05 100644 --- a/app/javascript/controllers/chart_controller.js +++ b/app/javascript/controllers/chart_controller.js @@ -1,12 +1,14 @@ -import { Controller } from "@hotwired/stimulus"; +import { Controller } from "@hotwired/stimulus" import * as echarts from 'echarts'; + +// To connect use: data-controller="chart" export default class extends Controller { connect() { - console.log("Chart connected!!!"); - - const container = this.element; - const chart = echarts.init(container); + console.log("Chart connect") + + + this.element.Chart = echarts.init(this.element); var option; @@ -28,13 +30,14 @@ export default class extends Controller { ] }; - // Set the chart option - option && chart.setOption(option); - - - }; + option && this.element.Chart.setOption(option); + } + rsz(event){ console.log("Resizing chart..."); + this.element.Chart.resize(); }; -} \ No newline at end of file +} + + From 87855bf031e9015f9095b3620ac207d089508549 Mon Sep 17 00:00:00 2001 From: jstet Date: Sat, 4 Nov 2023 13:56:26 -0700 Subject: [PATCH 06/16] update packages, add ol --- package-lock.json | 1027 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + yarn.lock | 448 ++++++++++---------- 3 files changed, 1250 insertions(+), 226 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..d488360a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1027 @@ +{ + "name": "linkvan-api", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "linkvan-api", + "version": "0.1.0", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.2.1", + "@hotwired/stimulus": "^3.1.1", + "@hotwired/turbo-rails": "^7.2.4", + "@rails/actioncable": "^7.0.4", + "@rails/actiontext": "^7.0.4", + "@rails/activestorage": "^7.0.4", + "@rails/request.js": "^0.0.8", + "babel-preset-react": "^6.24.1", + "bootstrap": "^5.1.1", + "bulma": "^0.9.4", + "bulma-switch": "^2.0.4", + "bulma-tooltip": "^3.0.2", + "echarts": "^5.4.3", + "esbuild": "^0.15.14", + "flatpickr": "^4.6.9", + "ol": "^8.1.0", + "sass": "^1.56.1", + "trix": "^2.0.0" + }, + "devDependencies": { + "jquery": "^3.6.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", + "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", + "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", + "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@hotwired/stimulus": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz", + "integrity": "sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A==" + }, + "node_modules/@hotwired/turbo": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.3.0.tgz", + "integrity": "sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@hotwired/turbo-rails": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz", + "integrity": "sha512-fvhO64vp/a2UVQ3jue9WTc2JisMv9XilIC7ViZmXAREVwiQ2S4UC7Go8f9A1j4Xu7DBI6SbFdqILk5ImqVoqyA==", + "dependencies": { + "@hotwired/turbo": "^7.3.0", + "@rails/actioncable": "^7.0" + } + }, + "node_modules/@petamoriken/float16": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz", + "integrity": "sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ==" + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rails/actioncable": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.1.tgz", + "integrity": "sha512-ZRJ9rdwFQQjRbtgJnweY0/4UQyxN6ojEGRdib0JkjnuIciv+4ok/aAeZmBJqNreTMaBqS0eHyA9hCArwN58opg==" + }, + "node_modules/@rails/actiontext": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@rails/actiontext/-/actiontext-7.1.1.tgz", + "integrity": "sha512-AdDK+gUa+akys1kFNgZXB6+rz3n60Of+c4TyJzUe6p5cBIjTimMaMWPSr76fyORXEBFKsCUH9bigXSAoUZKU0A==", + "dependencies": { + "@rails/activestorage": ">= 7.1.0-alpha" + }, + "peerDependencies": { + "trix": "^2.0.0" + } + }, + "node_modules/@rails/activestorage": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@rails/activestorage/-/activestorage-7.1.1.tgz", + "integrity": "sha512-QGBj+y4fbZt/QMMpjqnpKlzCKpDGTYrvJ+qc0QLis34AfbBLVgRo7kPzmdmeOTtwvWqpcivB9CrjTcV/C/7ruA==", + "dependencies": { + "spark-md5": "^3.0.1" + } + }, + "node_modules/@rails/request.js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@rails/request.js/-/request.js-0.0.8.tgz", + "integrity": "sha512-ysHYZDl+XjBwFVXz7EI7XW+ZWiTFY8t7TrC/ahpAPt0p7NE4DZxm1nJQY9gmF4PBf+4pAYa+D/rLIGmrn1ZMvg==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg==", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" + } + }, + "node_modules/babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA==" + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" + }, + "node_modules/babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg==", + "dependencies": { + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig==", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w==", + "dependencies": { + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ==", + "dependencies": { + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw==", + "dependencies": { + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw==", + "dependencies": { + "babel-plugin-transform-flow-strip-types": "^6.22.0" + } + }, + "node_modules/babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q==", + "dependencies": { + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bootstrap": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bulma": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", + "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==" + }, + "node_modules/bulma-switch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.4.tgz", + "integrity": "sha512-kMu4H0Pr0VjvfsnT6viRDCgptUq0Rvy7y7PX6q+IHg1xUynsjszPjhAdal5ysAlCG5HNO+5YXxeiu92qYGQolw==" + }, + "node_modules/bulma-tooltip": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz", + "integrity": "sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ==" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" + }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/esbuild": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", + "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.15.18", + "@esbuild/linux-loong64": "0.15.18", + "esbuild-android-64": "0.15.18", + "esbuild-android-arm64": "0.15.18", + "esbuild-darwin-64": "0.15.18", + "esbuild-darwin-arm64": "0.15.18", + "esbuild-freebsd-64": "0.15.18", + "esbuild-freebsd-arm64": "0.15.18", + "esbuild-linux-32": "0.15.18", + "esbuild-linux-64": "0.15.18", + "esbuild-linux-arm": "0.15.18", + "esbuild-linux-arm64": "0.15.18", + "esbuild-linux-mips64le": "0.15.18", + "esbuild-linux-ppc64le": "0.15.18", + "esbuild-linux-riscv64": "0.15.18", + "esbuild-linux-s390x": "0.15.18", + "esbuild-netbsd-64": "0.15.18", + "esbuild-openbsd-64": "0.15.18", + "esbuild-sunos-64": "0.15.18", + "esbuild-windows-32": "0.15.18", + "esbuild-windows-64": "0.15.18", + "esbuild-windows-arm64": "0.15.18" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", + "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", + "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", + "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", + "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", + "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", + "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", + "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", + "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", + "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", + "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", + "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", + "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", + "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", + "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", + "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", + "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", + "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", + "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", + "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.18", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", + "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatpickr": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz", + "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/geotiff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.0.tgz", + "integrity": "sha512-B/iFJuFfRpmPHXf8aIRPRgUWwfaNb6dlsynkM8SWeHAPu7CpyvfqEa43KlBt7xxq5OTVysQacFHxhCn3SZhRKQ==", + "dependencies": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "quick-lru": "^6.1.1", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2", + "zstddec": "^0.1.0" + }, + "engines": { + "node": ">=10.19" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "dev": true + }, + "node_modules/lerc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ol": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-8.1.0.tgz", + "integrity": "sha512-cx3SH2plpFS9fM8pp1nCypgQXGJD7Mcb1E3mEySmy5XEw1DUEo+kkNzgtAZz5qupekqi7aU9iBJEjCoMfqvO2Q==", + "dependencies": { + "earcut": "^2.2.3", + "geotiff": "^2.0.7", + "pbf": "3.2.1", + "rbush": "^3.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openlayers" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "node_modules/quick-lru": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spark-md5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" + }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trix": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/trix/-/trix-2.0.7.tgz", + "integrity": "sha512-qnqElm1BA4XYMgwowEHlF4xE4wfEjFBpmybvdzVUQP4OTzQxRXVEQNP4WSvWT6HzV4wYFP06/HSo14fWoGo6jQ==" + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "node_modules/xml-utils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz", + "integrity": "sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw==" + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "dependencies": { + "tslib": "2.3.0" + } + }, + "node_modules/zstddec": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz", + "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==" + } + } +} diff --git a/package.json b/package.json index 51dc6d40..45dfb378 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "echarts": "^5.4.3", "esbuild": "^0.15.14", "flatpickr": "^4.6.9", + "ol": "^8.1.0", "sass": "^1.56.1", "trix": "^2.0.0" }, diff --git a/yarn.lock b/yarn.lock index a9467c53..18221356 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,79 +2,74 @@ # yarn lockfile v1 -"@esbuild/android-arm@0.15.14": - version "0.15.14" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.14.tgz#5d0027f920eeeac313c01fd6ecb8af50c306a466" - integrity sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA== - -"@esbuild/linux-loong64@0.15.14": - version "0.15.14" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz#1221684955c44385f8af34f7240088b7dc08d19d" - integrity sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg== - "@fortawesome/fontawesome-free@^6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.1.tgz#344baf6ff9eaad7a73cff067d8c56bfc11ae5304" - integrity sha512-viouXhegu/TjkvYQoiRZK3aax69dGXxgEjpvZW81wIJdxm5Fnvp3VVIP4VHKqX4SvFw6qpmkILkD4RJWAdrt7A== + version "6.4.2" + resolved "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz" + integrity sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg== "@hotwired/stimulus@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.1.1.tgz#652f08a8e1d5edcb407340e58818fcff463b5848" - integrity sha512-e0JpzIaYLsRRXevRDVs0yevabiCvieIWWCwh7VqVXjXM5AOHdjb7AjaKIj34zYFmY1N6HIRRfk915WVMYlHnDA== + version "3.2.2" + resolved "https://registry.npmjs.org/@hotwired/stimulus/-/stimulus-3.2.2.tgz" + integrity sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A== "@hotwired/turbo-rails@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-7.2.4.tgz#d155533e79c4ebdac23e8fe12697d821d5c06307" - integrity sha512-givDUQqaccd19BvErz1Cf2j6MXF74m0G6I75oqFJGeXAa7vwkz9nDplefVNrALCR9Xi9j9gy32xmSI6wD0tZyA== + version "7.3.0" + resolved "https://registry.npmjs.org/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz" + integrity sha512-fvhO64vp/a2UVQ3jue9WTc2JisMv9XilIC7ViZmXAREVwiQ2S4UC7Go8f9A1j4Xu7DBI6SbFdqILk5ImqVoqyA== dependencies: - "@hotwired/turbo" "^7.2.4" + "@hotwired/turbo" "^7.3.0" "@rails/actioncable" "^7.0" -"@hotwired/turbo@^7.2.4": - version "7.2.4" - resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.2.4.tgz#0d35541be32cfae3b4f78c6ab9138f5b21f28a21" - integrity sha512-c3xlOroHp/cCZHDOuLp6uzQYEbvXBUVaal0puXoGJ9M8L/KHwZ3hQozD4dVeSN9msHWLxxtmPT1TlCN7gFhj4w== +"@hotwired/turbo@^7.3.0": + version "7.3.0" + resolved "https://registry.npmjs.org/@hotwired/turbo/-/turbo-7.3.0.tgz" + integrity sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g== -"@rails/actioncable@^7.0": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.4.tgz#70a3ca56809f7aaabb80af2f9c01ae51e1a8ed41" - integrity sha512-tz4oM+Zn9CYsvtyicsa/AwzKZKL+ITHWkhiu7x+xF77clh2b4Rm+s6xnOgY/sGDWoFWZmtKsE95hxBPkgQQNnQ== +"@petamoriken/float16@^3.4.7": + version "3.8.4" + resolved "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz" + integrity sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ== -"@rails/actioncable@^7.0.4": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.6.tgz#60765c8e9c357a0ba0840fb1e409caedc233ea0d" - integrity sha512-ybBsUrIsu5geM8BtqnpM7ZA9D8uzSz+e1B4JR57NaCmasHKWap6AX5DT7NHIbp21opVet1qqoVSdsoLDqXeB2A== +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@rails/actioncable@^7.0", "@rails/actioncable@^7.0.4": + version "7.1.1" + resolved "https://registry.npmjs.org/@rails/actioncable/-/actioncable-7.1.1.tgz" + integrity sha512-ZRJ9rdwFQQjRbtgJnweY0/4UQyxN6ojEGRdib0JkjnuIciv+4ok/aAeZmBJqNreTMaBqS0eHyA9hCArwN58opg== "@rails/actiontext@^7.0.4": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@rails/actiontext/-/actiontext-7.0.6.tgz#42b2b275ce6b24031242c731828de9c02d58b53f" - integrity sha512-WHHkYmypUjlo6fvNxfKRluuHmIxZCEoK+g/hBsufoxvjvWSBx61qu0Xq0tCrGUYd4mUZ/kk8OqP96/UBI3vS/w== + version "7.1.1" + resolved "https://registry.npmjs.org/@rails/actiontext/-/actiontext-7.1.1.tgz" + integrity sha512-AdDK+gUa+akys1kFNgZXB6+rz3n60Of+c4TyJzUe6p5cBIjTimMaMWPSr76fyORXEBFKsCUH9bigXSAoUZKU0A== dependencies: - "@rails/activestorage" ">= 7.0.0-alpha1" + "@rails/activestorage" ">= 7.1.0-alpha" -"@rails/activestorage@>= 7.0.0-alpha1", "@rails/activestorage@^7.0.4": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@rails/activestorage/-/activestorage-7.0.6.tgz#8b762e7142eb8332541dffa0f841d7a5026f64fd" - integrity sha512-sLr5Uj8cnWkX9lLV7wk8mIVFt6XFOJR7mAXm0QmDnrR/YGMF4Ho5tcVRUHzlyAisRQcHp6D0zHSVgOUukF8OHg== +"@rails/activestorage@^7.0.4", "@rails/activestorage@>= 7.1.0-alpha": + version "7.1.1" + resolved "https://registry.npmjs.org/@rails/activestorage/-/activestorage-7.1.1.tgz" + integrity sha512-QGBj+y4fbZt/QMMpjqnpKlzCKpDGTYrvJ+qc0QLis34AfbBLVgRo7kPzmdmeOTtwvWqpcivB9CrjTcV/C/7ruA== dependencies: spark-md5 "^3.0.1" "@rails/request.js@^0.0.8": version "0.0.8" - resolved "https://registry.yarnpkg.com/@rails/request.js/-/request.js-0.0.8.tgz#5e2e8da15013b1af7f04d759e4e9d1cff981865c" + resolved "https://registry.npmjs.org/@rails/request.js/-/request.js-0.0.8.tgz" integrity sha512-ysHYZDl+XjBwFVXz7EI7XW+ZWiTFY8t7TrC/ahpAPt0p7NE4DZxm1nJQY9gmF4PBf+4pAYa+D/rLIGmrn1ZMvg== anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" babel-helper-builder-react-jsx@^6.24.1: version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + resolved "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz" integrity sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg== dependencies: babel-runtime "^6.26.0" @@ -83,17 +78,17 @@ babel-helper-builder-react-jsx@^6.24.1: babel-plugin-syntax-flow@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + resolved "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz" integrity sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA== babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz" integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== babel-plugin-transform-flow-strip-types@^6.22.0: version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + resolved "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz" integrity sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg== dependencies: babel-plugin-syntax-flow "^6.18.0" @@ -101,14 +96,14 @@ babel-plugin-transform-flow-strip-types@^6.22.0: babel-plugin-transform-react-display-name@^6.23.0: version "6.25.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + resolved "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz" integrity sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-react-jsx-self@^6.22.0: version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + resolved "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz" integrity sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ== dependencies: babel-plugin-syntax-jsx "^6.8.0" @@ -116,7 +111,7 @@ babel-plugin-transform-react-jsx-self@^6.22.0: babel-plugin-transform-react-jsx-source@^6.22.0: version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + resolved "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz" integrity sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw== dependencies: babel-plugin-syntax-jsx "^6.8.0" @@ -124,7 +119,7 @@ babel-plugin-transform-react-jsx-source@^6.22.0: babel-plugin-transform-react-jsx@^6.24.1: version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + resolved "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz" integrity sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w== dependencies: babel-helper-builder-react-jsx "^6.24.1" @@ -133,14 +128,14 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-preset-flow@^6.23.0: version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + resolved "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz" integrity sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw== dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" babel-preset-react@^6.24.1: version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + resolved "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz" integrity sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q== dependencies: babel-plugin-syntax-jsx "^6.3.13" @@ -152,7 +147,7 @@ babel-preset-react@^6.24.1: babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + resolved "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" @@ -160,7 +155,7 @@ babel-runtime@^6.22.0, babel-runtime@^6.26.0: babel-types@^6.26.0: version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + resolved "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz" integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== dependencies: babel-runtime "^6.26.0" @@ -170,39 +165,39 @@ babel-types@^6.26.0: binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bootstrap@^5.1.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.2.2.tgz#834e053eed584a65e244d8aa112a6959f56e27a0" - integrity sha512-dEtzMTV71n6Fhmbg4fYJzQsw1N29hJKO1js5ackCgIpDcGid2ETMGC6zwSYw09v05Y+oRdQ9loC54zB1La3hHQ== + version "5.3.2" + resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz" + integrity sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g== braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" bulma-switch@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/bulma-switch/-/bulma-switch-2.0.4.tgz#a6dea1a026d025a7093a3675b2a599a36820e3a3" + resolved "https://registry.npmjs.org/bulma-switch/-/bulma-switch-2.0.4.tgz" integrity sha512-kMu4H0Pr0VjvfsnT6viRDCgptUq0Rvy7y7PX6q+IHg1xUynsjszPjhAdal5ysAlCG5HNO+5YXxeiu92qYGQolw== bulma-tooltip@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz#2cf0abab1de2eba07f9d84eb7f07a8a88819ea92" + resolved "https://registry.npmjs.org/bulma-tooltip/-/bulma-tooltip-3.0.2.tgz" integrity sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ== bulma@^0.9.4: version "0.9.4" - resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.9.4.tgz#0ca8aeb1847a34264768dba26a064c8be72674a1" + resolved "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz" integrity sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ== "chokidar@>=3.0.0 <4.0.0": version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -217,239 +212,225 @@ bulma@^0.9.4: core-js@^2.4.0: version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + resolved "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== +earcut@^2.2.3: + version "2.2.4" + resolved "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz" + integrity sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ== + echarts@^5.4.3: version "5.4.3" - resolved "https://registry.yarnpkg.com/echarts/-/echarts-5.4.3.tgz#f5522ef24419164903eedcfd2b506c6fc91fb20c" + resolved "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz" integrity sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA== dependencies: tslib "2.3.0" zrender "5.4.4" -esbuild-android-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz#114e55b0d58fb7b45d7fa3d93516bd13fc8869cc" - integrity sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg== - -esbuild-android-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz#8541f38a9aacf88e574fb13f5ad4ca51a04c12bb" - integrity sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg== - -esbuild-darwin-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz#b40b334db81ff1e3677a6712b23761748a157c57" - integrity sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg== - -esbuild-darwin-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz#44b5c1477bb7bdb852dd905e906f68765e2828bc" - integrity sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A== - -esbuild-freebsd-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz#8c57315d238690f34b6ed0c94e5cfc04c858247a" - integrity sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA== - -esbuild-freebsd-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz#2e92acca09258daa849e635565f52469266f0b7b" - integrity sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg== - -esbuild-linux-32@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz#ca5ed3e9dff82df486ddde362d7e00775a597dfd" - integrity sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA== - -esbuild-linux-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz#42952e1d08a299d5f573c567639fb37b033befbf" - integrity sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw== - -esbuild-linux-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz#0c0d788099703327ec0ae70758cb2639ef6c5d88" - integrity sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg== - -esbuild-linux-arm@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz#751a5ca5042cd60f669b07c3bcec3dd6c4f8151c" - integrity sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q== - -esbuild-linux-mips64le@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz#da8ac35f2704de0b52bf53a99c12f604fbe9b916" - integrity sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA== - -esbuild-linux-ppc64le@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz#a315b5016917429080c3d32e03319f1ff876ac55" - integrity sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w== - -esbuild-linux-riscv64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz#9f2e0a935e5086d398fc19c7ff5d217bfefe3e12" - integrity sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q== - -esbuild-linux-s390x@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz#53108112faff5a4e1bad17f7b0b0ffa1df4b7efb" - integrity sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw== - -esbuild-netbsd-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz#5330efc41fe4f1c2bab5462bcfe7a4ffce7ba00a" - integrity sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ== - -esbuild-openbsd-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz#ee64944d863e937611fc31adf349e9bb4f5f7eac" - integrity sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA== - -esbuild-sunos-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz#29b0b20de6fe6ef50f9fbe533ec20dc4b595f9aa" - integrity sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q== - -esbuild-windows-32@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz#05e9b159d664809f7a4a8a68ed048d193457b27d" - integrity sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg== - -esbuild-windows-64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz#d5ae086728ab30b72969e40ed0a7a0d9082f2cdd" - integrity sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog== - -esbuild-windows-arm64@0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz#8eb50ab9a0ecaf058593fbad17502749306f801d" - integrity sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw== +esbuild-linux-64@0.15.18: + version "0.15.18" + resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz" + integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw== esbuild@^0.15.14: - version "0.15.14" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.14.tgz#09202b811f1710363d5088a3401a351351c79875" - integrity sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ== + version "0.15.18" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz" + integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q== optionalDependencies: - "@esbuild/android-arm" "0.15.14" - "@esbuild/linux-loong64" "0.15.14" - esbuild-android-64 "0.15.14" - esbuild-android-arm64 "0.15.14" - esbuild-darwin-64 "0.15.14" - esbuild-darwin-arm64 "0.15.14" - esbuild-freebsd-64 "0.15.14" - esbuild-freebsd-arm64 "0.15.14" - esbuild-linux-32 "0.15.14" - esbuild-linux-64 "0.15.14" - esbuild-linux-arm "0.15.14" - esbuild-linux-arm64 "0.15.14" - esbuild-linux-mips64le "0.15.14" - esbuild-linux-ppc64le "0.15.14" - esbuild-linux-riscv64 "0.15.14" - esbuild-linux-s390x "0.15.14" - esbuild-netbsd-64 "0.15.14" - esbuild-openbsd-64 "0.15.14" - esbuild-sunos-64 "0.15.14" - esbuild-windows-32 "0.15.14" - esbuild-windows-64 "0.15.14" - esbuild-windows-arm64 "0.15.14" + "@esbuild/android-arm" "0.15.18" + "@esbuild/linux-loong64" "0.15.18" + esbuild-android-64 "0.15.18" + esbuild-android-arm64 "0.15.18" + esbuild-darwin-64 "0.15.18" + esbuild-darwin-arm64 "0.15.18" + esbuild-freebsd-64 "0.15.18" + esbuild-freebsd-arm64 "0.15.18" + esbuild-linux-32 "0.15.18" + esbuild-linux-64 "0.15.18" + esbuild-linux-arm "0.15.18" + esbuild-linux-arm64 "0.15.18" + esbuild-linux-mips64le "0.15.18" + esbuild-linux-ppc64le "0.15.18" + esbuild-linux-riscv64 "0.15.18" + esbuild-linux-s390x "0.15.18" + esbuild-netbsd-64 "0.15.18" + esbuild-openbsd-64 "0.15.18" + esbuild-sunos-64 "0.15.18" + esbuild-windows-32 "0.15.18" + esbuild-windows-64 "0.15.18" + esbuild-windows-arm64 "0.15.18" esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" flatpickr@^4.6.9: version "4.6.13" - resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.13.tgz#8a029548187fd6e0d670908471e43abe9ad18d94" + resolved "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz" integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw== -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +geotiff@^2.0.7: + version "2.1.0" + resolved "https://registry.npmjs.org/geotiff/-/geotiff-2.1.0.tgz" + integrity sha512-B/iFJuFfRpmPHXf8aIRPRgUWwfaNb6dlsynkM8SWeHAPu7CpyvfqEa43KlBt7xxq5OTVysQacFHxhCn3SZhRKQ== + dependencies: + "@petamoriken/float16" "^3.4.7" + lerc "^3.0.0" + pako "^2.0.4" + parse-headers "^2.0.2" + quick-lru "^6.1.1" + web-worker "^1.2.0" + xml-utils "^1.0.2" + zstddec "^0.1.0" glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +ieee754@^1.1.12: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + immutable@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef" - integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ== + version "4.3.4" + resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz" + integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== jquery@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.1.tgz#fab0408f8b45fc19f956205773b62b292c147a16" - integrity sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw== + version "3.7.1" + resolved "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== + +lerc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz" + integrity sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww== lodash@^4.17.4: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +ol@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/ol/-/ol-8.1.0.tgz" + integrity sha512-cx3SH2plpFS9fM8pp1nCypgQXGJD7Mcb1E3mEySmy5XEw1DUEo+kkNzgtAZz5qupekqi7aU9iBJEjCoMfqvO2Q== + dependencies: + earcut "^2.2.3" + geotiff "^2.0.7" + pbf "3.2.1" + rbush "^3.0.1" + +pako@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz" + integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug== + +parse-headers@^2.0.2: + version "2.0.5" + resolved "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +pbf@3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz" + integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== + dependencies: + ieee754 "^1.1.12" + resolve-protobuf-schema "^2.1.0" + picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +protocol-buffers-schema@^3.3.1: + version "3.6.0" + resolved "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz" + integrity sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw== + +quick-lru@^6.1.1: + version "6.1.2" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz" + integrity sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ== + +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== + +rbush@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz" + integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== + dependencies: + quickselect "^2.0.0" + readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" regenerator-runtime@^0.11.0: version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +resolve-protobuf-schema@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz" + integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== + dependencies: + protocol-buffers-schema "^3.3.1" + sass@^1.56.1: - version "1.56.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.56.1.tgz#94d3910cd468fd075fa87f5bb17437a0b617d8a7" - integrity sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ== + version "1.69.5" + resolved "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz" + integrity sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -457,39 +438,54 @@ sass@^1.56.1: "source-map-js@>=0.6.2 <2.0.0": version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== spark-md5@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" + resolved "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz" integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw== to-fast-properties@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" trix@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/trix/-/trix-2.0.5.tgz#f54880ab38e24d47829a04e04afaf03a8607f772" - integrity sha512-OiCbDf17F7JahEwhyL1MvK9DxAAT1vkaW5sn+zpwfemZAcc4RfQB4ku18/1mKP58LRwBhjcy+6TBho7ciXz52Q== + version "2.0.7" + resolved "https://registry.npmjs.org/trix/-/trix-2.0.7.tgz" + integrity sha512-qnqElm1BA4XYMgwowEHlF4xE4wfEjFBpmybvdzVUQP4OTzQxRXVEQNP4WSvWT6HzV4wYFP06/HSo14fWoGo6jQ== tslib@2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz" integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== +web-worker@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz" + integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== + +xml-utils@^1.0.2: + version "1.7.0" + resolved "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz" + integrity sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw== + zrender@5.4.4: version "5.4.4" - resolved "https://registry.yarnpkg.com/zrender/-/zrender-5.4.4.tgz#8854f1d95ecc82cf8912f5a11f86657cb8c9e261" + resolved "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz" integrity sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw== dependencies: tslib "2.3.0" + +zstddec@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz" + integrity sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg== From c9c050dc77d6decfb635dad4840c66dc64a390ce Mon Sep 17 00:00:00 2001 From: jstet Date: Sat, 4 Nov 2023 14:30:35 -0700 Subject: [PATCH 07/16] map is displayed --- app/controllers/admin/base_controller.rb | 2 +- .../controllers/chart_controller.js | 2 +- app/javascript/controllers/index.js | 3 ++ app/javascript/controllers/map_controller.js | 33 +++++++++++++++++++ app/views/admin/dashboard/index.html.erb | 15 ++++++--- ...on.html.erb => application_admin.html.erb} | 0 6 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 app/javascript/controllers/map_controller.js rename app/views/layouts/{application.html.erb => application_admin.html.erb} (100%) diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb index aa1f511a..443ded94 100644 --- a/app/controllers/admin/base_controller.rb +++ b/app/controllers/admin/base_controller.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class Admin::BaseController < ApplicationController - layout "application" + layout "application_admin" # skip_before_action :authenticate_user! # helpers from devise. Example: diff --git a/app/javascript/controllers/chart_controller.js b/app/javascript/controllers/chart_controller.js index d297ef05..3c45cee5 100644 --- a/app/javascript/controllers/chart_controller.js +++ b/app/javascript/controllers/chart_controller.js @@ -5,7 +5,7 @@ import * as echarts from 'echarts'; // To connect use: data-controller="chart" export default class extends Controller { connect() { - console.log("Chart connect") + console.log("Chart connect...") this.element.Chart = echarts.init(this.element); diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index e87e3127..f9c88386 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -10,6 +10,9 @@ application.register("auto-submit", AutoSubmitController) import ChartController from "./chart_controller" application.register("chart", ChartController) +import MapController from "./map_controller" +application.register("map", MapController) + import HelloController from "./hello_controller" application.register("hello", HelloController) diff --git a/app/javascript/controllers/map_controller.js b/app/javascript/controllers/map_controller.js new file mode 100644 index 00000000..b864e1ce --- /dev/null +++ b/app/javascript/controllers/map_controller.js @@ -0,0 +1,33 @@ +import { Controller } from "@hotwired/stimulus" +import Map from 'ol/Map.js'; +import OSM from 'ol/source/OSM.js'; +import TileLayer from 'ol/layer/Tile.js'; +import View from 'ol/View.js'; + + +export default class extends Controller { + connect() { + console.log("Map connect...") + + const map = new Map({ + target: "map", + layers: [ + new TileLayer({ + source: new OSM(), + }), + ], + view: new View({ + center: [0, 0], + zoom: 2, + }), + }); + } + + rsz(event){ + console.log("Resizing chart..."); + this.element.Chart.resize(); + + }; +} + + diff --git a/app/views/admin/dashboard/index.html.erb b/app/views/admin/dashboard/index.html.erb index 451d0c10..a7175972 100644 --- a/app/views/admin/dashboard/index.html.erb +++ b/app/views/admin/dashboard/index.html.erb @@ -1,12 +1,12 @@
-
+
-
-

Tile 2

+
+
@@ -24,8 +24,15 @@
\ No newline at end of file diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application_admin.html.erb similarity index 100% rename from app/views/layouts/application.html.erb rename to app/views/layouts/application_admin.html.erb From 3751bf964716da064a4239107ced604f1b219023 Mon Sep 17 00:00:00 2001 From: jstet Date: Sat, 4 Nov 2023 14:59:41 -0700 Subject: [PATCH 08/16] change map center --- app/javascript/controllers/map_controller.js | 27 ++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/app/javascript/controllers/map_controller.js b/app/javascript/controllers/map_controller.js index b864e1ce..af759419 100644 --- a/app/javascript/controllers/map_controller.js +++ b/app/javascript/controllers/map_controller.js @@ -1,9 +1,32 @@ import { Controller } from "@hotwired/stimulus" import Map from 'ol/Map.js'; import OSM from 'ol/source/OSM.js'; +import { useGeographic } from 'ol/proj'; import TileLayer from 'ol/layer/Tile.js'; import View from 'ol/View.js'; +import {Heatmap as HeatmapLayer} from 'ol/layer.js'; +useGeographic(); + + +const vector = new HeatmapLayer({ + source: new VectorSource({ + url: 'data/kml/2012_Earthquakes_Mag5.kml', + format: new KML({ + extractStyles: false, + }), + }), + blur: parseInt(blur.value, 10), + radius: parseInt(radius.value, 10), + weight: function (feature) { + // 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a + // standards-violating tag in each Placemark. We extract it from + // the Placemark's name instead. + const name = feature.get('name'); + const magnitude = parseFloat(name.substr(2)); + return magnitude - 5; + }, + }); export default class extends Controller { connect() { @@ -17,8 +40,8 @@ export default class extends Controller { }), ], view: new View({ - center: [0, 0], - zoom: 2, + center: [-123.11782250644546, 49.28062873449969], + zoom: 13, }), }); } From 64c4738b49398755028bf1c4346f34e6cd13d606 Mon Sep 17 00:00:00 2001 From: jstet Date: Sun, 5 Nov 2023 16:18:00 -0800 Subject: [PATCH 09/16] points are being displayed --- app/controllers/admin/dashboard_controller.rb | 32 +++++-- app/javascript/controllers/map_controller.js | 86 ++++++++++--------- app/views/layouts/application_admin.html.erb | 2 - 3 files changed, 70 insertions(+), 50 deletions(-) diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index 5196db93..f6a74d1b 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: true +require 'json' class Admin::DashboardController < Admin::BaseController def index @@ -9,8 +9,8 @@ def heatmap # /admin/dashboard/heatmap?service=shelter if heatmap_params[:service].present? # Filter events by service - #service = Service.find_by(key: heatmap_params[:service]) - #events = Analytics::Event.joins(impressions: :impressionables).where(impressionables: service.facilities) + # service = Service.find_by(key: heatmap_params[:service]) + # events = Analytics::Event.joins(impressions: :impressionables).where(impressionables: service.facilities) else events = Analytics::Event.all end @@ -18,18 +18,34 @@ def heatmap events.find_each do |event| lat = event.lat long = event.long - + key = [lat, long] - data[key] ||= { lat:, long:, count: 0 } + data[key] ||= { lat: lat, long: long, count: 0 } data[key][:count] += 1 end - render json: { data: data.values } - end + geojson_data = { + type: 'FeatureCollection', + features: data.values.map do |value| + { + type: 'Feature', + geometry: { + type: 'Point', + coordinates: [value[:long], value[:lat]] + }, + properties: { + count: value[:count] + } + } + end + } + + render json: geojson_data.to_json + end private def heatmap_params params.permit(:service) end -end +end \ No newline at end of file diff --git a/app/javascript/controllers/map_controller.js b/app/javascript/controllers/map_controller.js index af759419..b45eadd0 100644 --- a/app/javascript/controllers/map_controller.js +++ b/app/javascript/controllers/map_controller.js @@ -4,53 +4,59 @@ import OSM from 'ol/source/OSM.js'; import { useGeographic } from 'ol/proj'; import TileLayer from 'ol/layer/Tile.js'; import View from 'ol/View.js'; -import {Heatmap as HeatmapLayer} from 'ol/layer.js'; +import { Heatmap as HeatmapLayer, Vector as VectorLayer } from 'ol/layer.js'; +import { Vector as VectorSource } from 'ol/source.js'; +import { GeoJSON } from 'ol/format.js'; +import Feature from 'ol/Feature.js'; +import Point from 'ol/geom/Point.js'; useGeographic(); - -const vector = new HeatmapLayer({ - source: new VectorSource({ - url: 'data/kml/2012_Earthquakes_Mag5.kml', - format: new KML({ - extractStyles: false, - }), - }), - blur: parseInt(blur.value, 10), - radius: parseInt(radius.value, 10), - weight: function (feature) { - // 2012_Earthquakes_Mag5.kml stores the magnitude of each earthquake in a - // standards-violating tag in each Placemark. We extract it from - // the Placemark's name instead. - const name = feature.get('name'); - const magnitude = parseFloat(name.substr(2)); - return magnitude - 5; - }, - }); - export default class extends Controller { connect() { - console.log("Map connect...") - - const map = new Map({ - target: "map", - layers: [ - new TileLayer({ - source: new OSM(), + console.log("Map connect..."); + + let points; + + fetch('/admin/dashboard/heatmap') + .then(response => response.json()) + .then(data => { + // Handle the JSON data + points = data; + + // Create the vector source with the GeoJSON data + const vectorSource = new VectorSource({ + features: new GeoJSON().readFeatures(points), + }); + + // Create the vector layer with the vector source + const vectorLayer = new VectorLayer({ + source: vectorSource, + }); + + // Create the map with the vector layer + const map = new Map({ + target: "map", + layers: [ + new TileLayer({ + source: new OSM(), + }), + vectorLayer, // Add the vector layer to the layers array + ], + view: new View({ + center: [-123.11782250644546, 49.28062873449969], + zoom: 13, }), - ], - view: new View({ - center: [-123.11782250644546, 49.28062873449969], - zoom: 13, - }), + }); + }) + .catch(error => { + // Handle any errors from the HTTP request + console.error(error); }); } - rsz(event){ - console.log("Resizing chart..."); - this.element.Chart.resize(); - + rsz(event) { + console.log("Resizing chart..."); + }; -} - - +} \ No newline at end of file diff --git a/app/views/layouts/application_admin.html.erb b/app/views/layouts/application_admin.html.erb index 501894c8..e85ddee6 100644 --- a/app/views/layouts/application_admin.html.erb +++ b/app/views/layouts/application_admin.html.erb @@ -21,8 +21,6 @@ <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %> <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> - <%= hotwire_livereload_tags %> - <%= hotwire_livereload_tags if Rails.env.development? %> From cf299163a34336f02cd7ff29d72c9989bf40631e Mon Sep 17 00:00:00 2001 From: jstet Date: Sun, 5 Nov 2023 16:43:47 -0800 Subject: [PATCH 10/16] attempt to fake data in van area --- README.md | 3 ++- app/javascript/controllers/map_controller.js | 6 ++---- app/views/admin/dashboard/index.html.erb | 2 +- lib/tasks/fake_data/analytics.rake | 15 +++++++++++---- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index f8c0d244..5c2c95ea 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ To execute the app on your computer proceed as follows: 1. cd `< directory where you cloned the project repository to >` 2. Start a postgres database locally, for example with docker: ``` -docker run --name linkvan_postgres -e POSTGRES_PASSWORD=mysecretpassword -e -d postgres +docker run --name linkvan_postgres -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d postgres ``` 3. Update your database configuration on `config/database.yml`. Based on the previous command, the updated development and test section could for example be: ``` @@ -51,6 +51,7 @@ test: 4. Run `bundle install`. You might need to use [rvm](https://rvm.io/). 5. rails db:create (to create a database) 6. rails db:migrate +7. rails db:seed 6. rails server 8. load http://localhost:3000/admin/dashboard on your web browser. 9. login with: diff --git a/app/javascript/controllers/map_controller.js b/app/javascript/controllers/map_controller.js index b45eadd0..f9cf8998 100644 --- a/app/javascript/controllers/map_controller.js +++ b/app/javascript/controllers/map_controller.js @@ -24,6 +24,8 @@ export default class extends Controller { // Handle the JSON data points = data; + console.log(points) + // Create the vector source with the GeoJSON data const vectorSource = new VectorSource({ features: new GeoJSON().readFeatures(points), @@ -55,8 +57,4 @@ export default class extends Controller { }); } - rsz(event) { - console.log("Resizing chart..."); - - }; } \ No newline at end of file diff --git a/app/views/admin/dashboard/index.html.erb b/app/views/admin/dashboard/index.html.erb index a7175972..0805dfdf 100644 --- a/app/views/admin/dashboard/index.html.erb +++ b/app/views/admin/dashboard/index.html.erb @@ -6,7 +6,7 @@
-
+
diff --git a/lib/tasks/fake_data/analytics.rake b/lib/tasks/fake_data/analytics.rake index 2acdea32..fb0ce01c 100644 --- a/lib/tasks/fake_data/analytics.rake +++ b/lib/tasks/fake_data/analytics.rake @@ -1,5 +1,12 @@ # frozen_string_literal: true + +# http://bboxfinder.com/#49.260635,-123.176651,49.305427,-123.056488 +min_lat = 49.260635 +max_lat = 49.305427 +min_lon = -123.176651 +max_lon = -123.056488 + namespace :fake_data do desc "Create Analytics fake data to help development" task analytics: :environment do @@ -23,12 +30,12 @@ namespace :fake_data do event_date = rand(120).minutes.after(created_at) event = visit.events.create!(controller_name: 'api/facilities', action_name: 'index', - lat: Faker::Address.latitude, - long: Faker::Address.longitude, + lat: Faker::Address.latitude(min_lat: min_lat, max_lat: max_lat), + lon: Faker::Address.longitude(min_lon: min_lon, max_lon: max_lon), request_url: '/api/facilities', request_ip: Faker::Internet.ip_v4_address, - request_params: { search: 'a search text'}, - created_at: event_date) + request_params: { search: 'a search text' }, + created_at: event_date) n = rand(1..10) From 9d6b6de95f9fc96b4bbf7b9638a782035cc5d0b4 Mon Sep 17 00:00:00 2001 From: jstet Date: Sun, 5 Nov 2023 20:31:58 -0800 Subject: [PATCH 11/16] fake data can area works --- README.md | 5 +++-- lib/tasks/fake_data/analytics.rake | 19 ++++++------------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 5c2c95ea..83e1d608 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,9 @@ test: ``` 4. Run `bundle install`. You might need to use [rvm](https://rvm.io/). 5. rails db:create (to create a database) -6. rails db:migrate -7. rails db:seed +5. rails db:migrate +6. rails db:seed +7. rails fake_data:all 6. rails server 8. load http://localhost:3000/admin/dashboard on your web browser. 9. login with: diff --git a/lib/tasks/fake_data/analytics.rake b/lib/tasks/fake_data/analytics.rake index fb0ce01c..d52b83c3 100644 --- a/lib/tasks/fake_data/analytics.rake +++ b/lib/tasks/fake_data/analytics.rake @@ -1,12 +1,5 @@ # frozen_string_literal: true - -# http://bboxfinder.com/#49.260635,-123.176651,49.305427,-123.056488 -min_lat = 49.260635 -max_lat = 49.305427 -min_lon = -123.176651 -max_lon = -123.056488 - namespace :fake_data do desc "Create Analytics fake data to help development" task analytics: :environment do @@ -16,7 +9,7 @@ namespace :fake_data do facility_ids = Facility.all.ids - 20.times.each do |n| + 100.times.each do |n| created_at = rand(90).days.ago uuid = SecureRandom.hex session_id = SecureRandom.hex @@ -30,12 +23,12 @@ namespace :fake_data do event_date = rand(120).minutes.after(created_at) event = visit.events.create!(controller_name: 'api/facilities', action_name: 'index', - lat: Faker::Address.latitude(min_lat: min_lat, max_lat: max_lat), - lon: Faker::Address.longitude(min_lon: min_lon, max_lon: max_lon), + lat: rand(49.260635..49.305427), + long: rand(-123.176651..-123.056488), request_url: '/api/facilities', request_ip: Faker::Internet.ip_v4_address, - request_params: { search: 'a search text' }, - created_at: event_date) + request_params: { search: 'a search text'}, + created_at: event_date) n = rand(1..10) @@ -49,4 +42,4 @@ namespace :fake_data do print "." end end -end +end \ No newline at end of file From 35b41a5609d9a5270f44ba78f3548dc22d07b272 Mon Sep 17 00:00:00 2001 From: jstet Date: Sun, 5 Nov 2023 21:18:30 -0800 Subject: [PATCH 12/16] dashboard: heatmap works --- app/javascript/controllers/map_controller.js | 28 +++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/app/javascript/controllers/map_controller.js b/app/javascript/controllers/map_controller.js index f9cf8998..41419a9a 100644 --- a/app/javascript/controllers/map_controller.js +++ b/app/javascript/controllers/map_controller.js @@ -7,8 +7,6 @@ import View from 'ol/View.js'; import { Heatmap as HeatmapLayer, Vector as VectorLayer } from 'ol/layer.js'; import { Vector as VectorSource } from 'ol/source.js'; import { GeoJSON } from 'ol/format.js'; -import Feature from 'ol/Feature.js'; -import Point from 'ol/geom/Point.js'; useGeographic(); @@ -21,29 +19,28 @@ export default class extends Controller { fetch('/admin/dashboard/heatmap') .then(response => response.json()) .then(data => { - // Handle the JSON data points = data; console.log(points) - // Create the vector source with the GeoJSON data - const vectorSource = new VectorSource({ - features: new GeoJSON().readFeatures(points), + const heatLayer = new HeatmapLayer({ + title: "HeatMap", + source: new VectorSource({ + features: new GeoJSON().readFeatures(points,{ + dataProjection: 'EPSG:4326', + featureProjection: "EPSG:3857" + } + ), + }) }); - - // Create the vector layer with the vector source - const vectorLayer = new VectorLayer({ - source: vectorSource, - }); - - // Create the map with the vector layer + const map = new Map({ target: "map", layers: [ new TileLayer({ source: new OSM(), }), - vectorLayer, // Add the vector layer to the layers array + heatLayer, ], view: new View({ center: [-123.11782250644546, 49.28062873449969], @@ -52,9 +49,8 @@ export default class extends Controller { }); }) .catch(error => { - // Handle any errors from the HTTP request console.error(error); - }); + }); } } \ No newline at end of file From 1d8f6f5d1a90dfffa467f5ebda1217b039bf8fe8 Mon Sep 17 00:00:00 2001 From: jstet Date: Tue, 28 Nov 2023 13:08:45 -0800 Subject: [PATCH 13/16] add simple time series --- Gemfile | 2 + Gemfile.lock | 3 + app/controllers/admin/dashboard_controller.rb | 14 ++++ .../controllers/chart_controller.js | 64 +++++++++++-------- app/javascript/controllers/map_controller.js | 2 - config/routes.rb | 1 + 6 files changed, 56 insertions(+), 30 deletions(-) diff --git a/Gemfile b/Gemfile index 310c7b4b..67a88b8f 100644 --- a/Gemfile +++ b/Gemfile @@ -119,3 +119,5 @@ gem "cssbundling-rails", "~> 1.1" gem "rack-timeout" gem "hotwire-livereload", "~> 1.3", :group => :development + +gem "groupdate" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 569c9b11..3e1689c1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -125,6 +125,8 @@ GEM geocoder (1.8.2) globalid (1.1.0) activesupport (>= 5.0) + groupdate (6.4.0) + activesupport (>= 6.1) hotwire-livereload (1.3.0) actioncable (>= 6.0.0) listen (>= 3.0.0) @@ -369,6 +371,7 @@ DEPENDENCIES faker (~> 2.17.0) geo_coord geocoder (~> 1.6) + groupdate haversine! hotwire-livereload (~> 1.3) hotwire-rails diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index f6a74d1b..eb2d9188 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -4,6 +4,20 @@ class Admin::DashboardController < Admin::BaseController def index end + # https://guides.rubyonrails.org/active_record_querying.html#retrieving-objects-from-the-database + def timeseries + impressions = Analytics::Visit.all + visits_per_day = impressions.group_by_day(:created_at).count + + visits_per_day = visits_per_day.map do |date, count| + { + date: date.strftime('%Y-%m-%d'), + count: count + } + end + + render json: visits_per_day.to_json + end def heatmap data = {} # /admin/dashboard/heatmap?service=shelter diff --git a/app/javascript/controllers/chart_controller.js b/app/javascript/controllers/chart_controller.js index 3c45cee5..2a7079a6 100644 --- a/app/javascript/controllers/chart_controller.js +++ b/app/javascript/controllers/chart_controller.js @@ -6,38 +6,46 @@ import * as echarts from 'echarts'; export default class extends Controller { connect() { console.log("Chart connect...") - + + fetch('/admin/dashboard/timeseries') + .then(response => response.json()) + .then(data => { + console.log("data", data) - this.element.Chart = echarts.init(this.element); + this.element.Chart = echarts.init(this.element); - var option; - - option = { - xAxis: { - type: 'category', - boundaryGap: false, - data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] - }, - yAxis: { - type: 'value' - }, - series: [ - { - data: [820, 932, 901, 934, 1290, 1330, 1320], - type: 'line', - areaStyle: {} - } - ] - }; - - option && this.element.Chart.setOption(option); - } + let option; + + option = { + dataset: { + source: data + }, + xAxis: { + type: 'category', + boundaryGap: false, + }, + yAxis: { + type: 'value' + }, + series: [ + { + type: 'line' + } + ] + }; + + option && this.element.Chart.setOption(option); + + }) + .catch(error => { + console.error(error); + }); + + } rsz(event){ console.log("Resizing chart..."); this.element.Chart.resize(); - - }; -} - + } +}; diff --git a/app/javascript/controllers/map_controller.js b/app/javascript/controllers/map_controller.js index 41419a9a..76c26fbe 100644 --- a/app/javascript/controllers/map_controller.js +++ b/app/javascript/controllers/map_controller.js @@ -21,8 +21,6 @@ export default class extends Controller { .then(data => { points = data; - console.log(points) - const heatLayer = new HeatmapLayer({ title: "HeatMap", source: new VectorSource({ diff --git a/config/routes.rb b/config/routes.rb index e5237013..215e8366 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -22,6 +22,7 @@ resources :dashboard, only: %i[index show] do collection do get :heatmap, defaults: { format: :json } + get :timeseries, defaults: { format: :json } end end From eb5ed5e7848f0b1fed8f5afa5ddd30ee54decda0 Mon Sep 17 00:00:00 2001 From: jstet Date: Tue, 28 Nov 2023 17:35:57 -0800 Subject: [PATCH 14/16] add naive time series forecasting --- Gemfile | 3 ++- Gemfile.lock | 9 +++++++ app/controllers/admin/dashboard_controller.rb | 24 +++++++++++++------ .../controllers/chart_controller.js | 13 +++++++++- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 67a88b8f..33dd4a1a 100644 --- a/Gemfile +++ b/Gemfile @@ -120,4 +120,5 @@ gem "rack-timeout" gem "hotwire-livereload", "~> 1.3", :group => :development -gem "groupdate" \ No newline at end of file +gem "groupdate" +gem "prophet-rb" \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 3e1689c1..fb227857 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -97,6 +97,7 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) + cmdstan (0.3.0) coderay (1.1.3) colorize (1.1.0) concurrent-ruby (1.2.2) @@ -177,6 +178,7 @@ GEM racc (~> 1.4) nokogiri (1.15.3-x86_64-linux) racc (~> 1.4) + numo-narray (0.9.2.1) orm_adapter (0.5.0) pagy (5.10.1) activesupport @@ -185,6 +187,10 @@ GEM ast (~> 2.4.1) racc pg (1.4.6) + prophet-rb (0.5.0) + cmdstan (>= 0.2) + numo-narray (>= 0.9.1.7) + rover-df pry (0.13.1) coderay (~> 1.1) method_source (~> 1.0) @@ -253,6 +259,8 @@ GEM railties (>= 5.2) rexml (3.2.5) rouge (4.1.2) + rover-df (0.3.4) + numo-narray (>= 0.9.1.9) rspec-core (3.12.2) rspec-support (~> 3.12.0) rspec-expectations (3.12.3) @@ -382,6 +390,7 @@ DEPENDENCIES memory_profiler pagy (~> 5.10.1) pg (~> 1.4.4) + prophet-rb pry (~> 0.13.1) pry-byebug pry-rails diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index eb2d9188..6b53297a 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -1,4 +1,6 @@ require 'json' +require 'prophet-rb' +require 'rover' class Admin::DashboardController < Admin::BaseController def index @@ -7,16 +9,24 @@ def index # https://guides.rubyonrails.org/active_record_querying.html#retrieving-objects-from-the-database def timeseries impressions = Analytics::Visit.all + visits_per_day = impressions.group_by_day(:created_at).count + visits_per_day_transformed = visits_per_day.transform_keys { |date| date.strftime('%Y-%m-%d') }.to_a.map { |date, count| { 'ds' => date, 'y' => count } } + df = Rover::DataFrame.new(visits_per_day_transformed) + m = Prophet.new + m.fit(df) + future = m.make_future_dataframe(periods: 14) + forecast = m.predict(future).to_a - visits_per_day = visits_per_day.map do |date, count| - { - date: date.strftime('%Y-%m-%d'), - count: count - } - end + time_series_json = forecast.zip(visits_per_day_transformed).map do |forecast_row, visits_per_day_row| + { + date: forecast_row["ds"], + pred: forecast_row["yhat"], + actual: visits_per_day_row&.fetch("y", nil) + } + end - render json: visits_per_day.to_json + render json: time_series_json end def heatmap data = {} diff --git a/app/javascript/controllers/chart_controller.js b/app/javascript/controllers/chart_controller.js index 2a7079a6..7ac8de56 100644 --- a/app/javascript/controllers/chart_controller.js +++ b/app/javascript/controllers/chart_controller.js @@ -29,7 +29,18 @@ export default class extends Controller { }, series: [ { - type: 'line' + type: 'line', + encode: { + x: 'date', + y: 'actual' + } + }, + { + type: 'line', + encode: { + x: 'date', + y: 'pred' + } } ] }; From 8f36f640b5e00d14f9912e0628ba1989224cadf0 Mon Sep 17 00:00:00 2001 From: jstet Date: Tue, 28 Nov 2023 20:03:02 -0800 Subject: [PATCH 15/16] fake increase in events --- Gemfile | 2 +- app/controllers/admin/dashboard_controller.rb | 25 + .../controllers/chart_controller.js | 7 +- config/routes.rb | 1 + lib/assets/local-area-boundary.json | 5258 +++++++++++++++++ lib/tasks/fake_data/analytics.rake | 58 +- 6 files changed, 5320 insertions(+), 31 deletions(-) create mode 100644 lib/assets/local-area-boundary.json diff --git a/Gemfile b/Gemfile index 33dd4a1a..9163a4fc 100644 --- a/Gemfile +++ b/Gemfile @@ -121,4 +121,4 @@ gem "rack-timeout" gem "hotwire-livereload", "~> 1.3", :group => :development gem "groupdate" -gem "prophet-rb" \ No newline at end of file +gem "prophet-rb" diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index 6b53297a..c064682d 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -6,6 +6,30 @@ class Admin::DashboardController < Admin::BaseController def index end + def districts + + # https://gist.github.com/kidbrax/1236253 + + # Read the JSON file + json_file_path = Rails.root.join('lib', 'assets', 'local-area-boundary.json') + polygons = [] + + json_data = File.read(json_file_path) + + data = eval(json_data) + + data.each do |row| + points = [] + geom = row[:geom] + geom[:geometry][:coordinates][0].each do |coord| + points << [coord[0], coord[1]] + end + + polygons << points + end + + end + # https://guides.rubyonrails.org/active_record_querying.html#retrieving-objects-from-the-database def timeseries impressions = Analytics::Visit.all @@ -18,6 +42,7 @@ def timeseries future = m.make_future_dataframe(periods: 14) forecast = m.predict(future).to_a + time_series_json = forecast.zip(visits_per_day_transformed).map do |forecast_row, visits_per_day_row| { date: forecast_row["ds"], diff --git a/app/javascript/controllers/chart_controller.js b/app/javascript/controllers/chart_controller.js index 7ac8de56..b0d66319 100644 --- a/app/javascript/controllers/chart_controller.js +++ b/app/javascript/controllers/chart_controller.js @@ -30,16 +30,17 @@ export default class extends Controller { series: [ { type: 'line', + showSymbol: false, encode: { x: 'date', - y: 'actual' + y: 'pred' } }, { - type: 'line', + type: 'scatter', encode: { x: 'date', - y: 'pred' + y: 'actual' } } ] diff --git a/config/routes.rb b/config/routes.rb index 215e8366..5f9bc514 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,6 +23,7 @@ collection do get :heatmap, defaults: { format: :json } get :timeseries, defaults: { format: :json } + get :districts, defaults: { format: :json } end end diff --git a/lib/assets/local-area-boundary.json b/lib/assets/local-area-boundary.json new file mode 100644 index 00000000..4b4cc384 --- /dev/null +++ b/lib/assets/local-area-boundary.json @@ -0,0 +1,5258 @@ +[ + { + "name": "Downtown", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.11226654052733, + 49.29016494657755 + ], + [ + -123.10424041748047, + 49.288166045210374 + ], + [ + -123.0992889404297, + 49.289272307417406 + ], + [ + -123.09999847412111, + 49.272750853559906 + ], + [ + -123.10169982910158, + 49.27297210600129 + ], + [ + -123.11107635498047, + 49.272926329634096 + ], + [ + -123.11444854736328, + 49.2717742910599 + ], + [ + -123.12116241455078, + 49.26953887846223 + ], + [ + -123.12928009033203, + 49.2695312490677 + ], + [ + -123.13768005371092, + 49.27531814481966 + ], + [ + -123.13233184814453, + 49.276931761763024 + ], + [ + -123.12109375, + 49.28436660673378 + ], + [ + -123.13668060302734, + 49.29445648100141 + ], + [ + -123.13468933105469, + 49.295810698530715 + ], + [ + -123.12271118164062, + 49.291500090620545 + ], + [ + -123.11226654052733, + 49.29016494657755 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.11656700827415, + "lat": 49.28074707013743 + } + }, + { + "name": "Hastings-Sunrise", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.05648803710938, + 49.29348754789594 + ], + [ + -123.0519027709961, + 49.294147490522896 + ], + [ + -123.046630859375, + 49.29418182279827 + ], + [ + -123.03739166259764, + 49.29273223783734 + ], + [ + -123.02320098876953, + 49.29353332426313 + ], + [ + -123.02323150634764, + 49.29302978422406 + ], + [ + -123.02356719970705, + 49.265525816938755 + ], + [ + -123.02411651611328, + 49.26539993192899 + ], + [ + -123.02464294433594, + 49.265251158735644 + ], + [ + -123.02516937255858, + 49.26508712675322 + ], + [ + -123.02567291259767, + 49.26490402128446 + ], + [ + -123.02616119384764, + 49.26470565702665 + ], + [ + -123.02663421630858, + 49.264492033979785 + ], + [ + -123.02709197998047, + 49.264259337446575 + ], + [ + -123.02753448486327, + 49.264011382124295 + ], + [ + -123.02794647216797, + 49.26375198271025 + ], + [ + -123.02953338623047, + 49.262706755659444 + ], + [ + -123.02969360351562, + 49.26259612943875 + ], + [ + -123.02986145019531, + 49.26249694730984 + ], + [ + -123.03004455566408, + 49.26240157987821 + ], + [ + -123.0302276611328, + 49.26231002714382 + ], + [ + -123.03042602539062, + 49.262229918501255 + ], + [ + -123.03062438964844, + 49.26215362455594 + ], + [ + -123.03083038330078, + 49.26208496000515 + ], + [ + -123.03104400634766, + 49.262027739546156 + ], + [ + -123.03126525878906, + 49.26197433378446 + ], + [ + -123.03148651123048, + 49.261928557417264 + ], + [ + -123.03170776367188, + 49.26189422514187 + ], + [ + -123.03193664550783, + 49.26186370756375 + ], + [ + -123.03216552734374, + 49.26184463407742 + ], + [ + -123.03239440917969, + 49.26183318998563 + ], + [ + -123.03262329101564, + 49.26182937528834 + ], + [ + -123.04424285888672, + 49.26187133695827 + ], + [ + -123.04424285888672, + 49.26193618681179 + ], + [ + -123.05658721923827, + 49.26198196317898 + ], + [ + -123.05658721923827, + 49.26217651273953 + ], + [ + -123.05648803710938, + 49.29348754789594 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.04026992328848, + "lat": 49.27793405209019 + } + }, + { + "name": "Kerrisdale", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.17908477783203, + 49.21555709745609 + ], + [ + -123.1756362915039, + 49.2153701772901 + ], + [ + -123.1721725463867, + 49.215278624555715 + ], + [ + -123.17156982421875, + 49.21524810697758 + ], + [ + -123.17096710205077, + 49.21519851591314 + ], + [ + -123.17037200927734, + 49.21512603666508 + ], + [ + -123.16978454589842, + 49.21503066923345 + ], + [ + -123.16920471191406, + 49.214916228315474 + ], + [ + -123.16864013671875, + 49.21477889921392 + ], + [ + -123.1680908203125, + 49.21461868192875 + ], + [ + -123.16754913330078, + 49.21443939115727 + ], + [ + -123.16702270507814, + 49.21424102689946 + ], + [ + -123.16651916503906, + 49.214019774458045 + ], + [ + -123.16598510742189, + 49.21378707792485 + ], + [ + -123.1654281616211, + 49.213577269575225 + ], + [ + -123.16484832763673, + 49.21339034940923 + ], + [ + -123.16425323486327, + 49.2132263174268 + ], + [ + -123.16365051269531, + 49.21308517362796 + ], + [ + -123.1631088256836, + 49.21296310331547 + ], + [ + -123.16258239746094, + 49.212821959516624 + ], + [ + -123.16207122802734, + 49.21266174223147 + ], + [ + -123.16156768798828, + 49.212486266157256 + ], + [ + -123.16108703613283, + 49.2122917165967 + ], + [ + -123.16061401367186, + 49.2120819082471 + ], + [ + -123.16016387939452, + 49.21185302641114 + ], + [ + -123.15972900390625, + 49.21161270048341 + ], + [ + -123.15931701660158, + 49.21135711576663 + ], + [ + -123.15892791748047, + 49.21108627226078 + ], + [ + -123.15856170654298, + 49.210803984663116 + ], + [ + -123.15821075439453, + 49.21050643827639 + ], + [ + -123.1578903198242, + 49.21020126249515 + ], + [ + -123.15760040283203, + 49.20988082792483 + ], + [ + -123.15755462646484, + 49.20983123686036 + ], + [ + -123.15750122070312, + 49.20978546049318 + ], + [ + -123.15744781494142, + 49.209739684126 + ], + [ + -123.15738677978516, + 49.2096939077588 + ], + [ + -123.15732574462889, + 49.20965194608889 + ], + [ + -123.15726470947266, + 49.20961379911622 + ], + [ + -123.15719604492188, + 49.20957565214357 + ], + [ + -123.1571273803711, + 49.20954131986817 + ], + [ + -123.15705108642578, + 49.20950698759279 + ], + [ + -123.15697479248048, + 49.20948028471193 + ], + [ + -123.15689849853514, + 49.20945358183106 + ], + [ + -123.15681457519531, + 49.209426878950225 + ], + [ + -123.15673065185547, + 49.20940780546388 + ], + [ + -123.15664672851564, + 49.209388731977555 + ], + [ + -123.15656280517578, + 49.209373473188485 + ], + [ + -123.1564712524414, + 49.20936202909669 + ], + [ + -123.15638732910158, + 49.209354399702185 + ], + [ + -123.15629577636719, + 49.209342955610374 + ], + [ + -123.15621185302733, + 49.20933151151858 + ], + [ + -123.15612030029295, + 49.20931625272949 + ], + [ + -123.15603637695312, + 49.20929717924319 + ], + [ + -123.15595245361327, + 49.20927429105959 + ], + [ + -123.15588378906249, + 49.20925140287599 + ], + [ + -123.15581512451173, + 49.20922469999514 + ], + [ + -123.15574645996095, + 49.209197997114266 + ], + [ + -123.15567779541017, + 49.209167479536156 + ], + [ + -123.1556167602539, + 49.20913314726076 + ], + [ + -123.15555572509767, + 49.209098814985374 + ], + [ + -123.1554946899414, + 49.209064482709984 + ], + [ + -123.1554412841797, + 49.209026335737306 + ], + [ + -123.15538787841795, + 49.20898437406741 + ], + [ + -123.1553421020508, + 49.208942412397484 + ], + [ + -123.15529632568361, + 49.20890045072756 + ], + [ + -123.15291595458984, + 49.207023619672846 + ], + [ + -123.15283966064455, + 49.206958769819344 + ], + [ + -123.1527633666992, + 49.20689010526856 + ], + [ + -123.15270233154297, + 49.20682144071779 + ], + [ + -123.15264129638672, + 49.20674896146973 + ], + [ + -123.152587890625, + 49.20667266752441 + ], + [ + -123.15253448486328, + 49.2065963735791 + ], + [ + -123.15249633789062, + 49.20652007963378 + ], + [ + -123.1524658203125, + 49.206439970991205 + ], + [ + -123.15243530273439, + 49.20635986234864 + ], + [ + -123.15242004394531, + 49.20627593900879 + ], + [ + -123.1523895263672, + 49.20619201566895 + ], + [ + -123.15235900878905, + 49.20610809232911 + ], + [ + -123.15231323242186, + 49.206027983686525 + ], + [ + -123.15226745605467, + 49.20594406034669 + ], + [ + -123.15221405029297, + 49.205867766401376 + ], + [ + -123.15215301513673, + 49.20579147245605 + ], + [ + -123.15208435058595, + 49.20571517851075 + ], + [ + -123.15201568603516, + 49.20564269926269 + ], + [ + -123.15193939208986, + 49.205574034711894 + ], + [ + -123.15185546875, + 49.205505370161134 + ], + [ + -123.15176391601562, + 49.205440520307626 + ], + [ + -123.15167236328125, + 49.20537948515137 + ], + [ + -123.15157318115234, + 49.20532226469239 + ], + [ + -123.15146636962892, + 49.20526885893066 + ], + [ + -123.15135955810547, + 49.20521926786621 + ], + [ + -123.14993286132814, + 49.20480346586425 + ], + [ + -123.14884948730469, + 49.20867156889163 + ], + [ + -123.14817810058592, + 49.20894622709474 + ], + [ + -123.1486587524414, + 49.209461211225616 + ], + [ + -123.14823913574219, + 49.21940231229987 + ], + [ + -123.14015197753906, + 49.21930694486822 + ], + [ + -123.13959503173827, + 49.234272002241354 + ], + [ + -123.15527343750001, + 49.23452377226088 + ], + [ + -123.17024993896484, + 49.234703063032356 + ], + [ + -123.17870330810548, + 49.234722136518705 + ], + [ + -123.17908477783203, + 49.21555709745609 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.15957618168902, + "lat": 49.22365548461882 + } + }, + { + "name": "Marpole", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.10696411132812, + 49.20415878202636 + ], + [ + -123.11153411865233, + 49.204444884321276 + ], + [ + -123.11196899414062, + 49.20445632841307 + ], + [ + -123.11240386962889, + 49.2044525137158 + ], + [ + -123.1128387451172, + 49.20442962553223 + ], + [ + -123.11327362060547, + 49.204391478559565 + ], + [ + -123.11370086669922, + 49.20433425810057 + ], + [ + -123.11412048339844, + 49.204261778852526 + ], + [ + -123.11453247070311, + 49.20417404081542 + ], + [ + -123.11718750000001, + 49.20354843046385 + ], + [ + -123.117431640625, + 49.2034759512158 + ], + [ + -123.11766052246095, + 49.20339202787596 + ], + [ + -123.11788940429686, + 49.203300475141575 + ], + [ + -123.1181106567383, + 49.203201293012675 + ], + [ + -123.11832427978517, + 49.20309448148924 + ], + [ + -123.11852264404297, + 49.20298004057127 + ], + [ + -123.11872100830077, + 49.20285797025877 + ], + [ + -123.11890411376953, + 49.202732085249 + ], + [ + -123.1190719604492, + 49.20259857084472 + ], + [ + -123.11923217773438, + 49.202457427045886 + ], + [ + -123.11938476562501, + 49.202312468549785 + ], + [ + -123.11952209472655, + 49.20215988065917 + ], + [ + -123.1196517944336, + 49.202014922163066 + ], + [ + -123.11979675292969, + 49.20187759306151 + ], + [ + -123.11995697021484, + 49.20174026395994 + ], + [ + -123.12012481689453, + 49.20161056425293 + ], + [ + -123.12030029296874, + 49.20148849394041 + ], + [ + -123.12049102783202, + 49.201374053022434 + ], + [ + -123.1206817626953, + 49.20126342680174 + ], + [ + -123.12088775634766, + 49.20116424467283 + ], + [ + -123.12110900878905, + 49.201068877241184 + ], + [ + -123.12133026123047, + 49.200981139204075 + ], + [ + -123.12155914306642, + 49.20090484525876 + ], + [ + -123.12179565429689, + 49.200836180707995 + ], + [ + -123.12785339355469, + 49.19917297270016 + ], + [ + -123.12913513183594, + 49.19904327299313 + ], + [ + -123.13042449951173, + 49.19896697904782 + ], + [ + -123.13172149658202, + 49.19894027616696 + ], + [ + -123.13396453857422, + 49.1989364614697 + ], + [ + -123.13463592529298, + 49.1989364614697 + ], + [ + -123.13531494140624, + 49.19896316435055 + ], + [ + -123.135986328125, + 49.19901657011227 + ], + [ + -123.13718414306639, + 49.199142455122036 + ], + [ + -123.13775634765626, + 49.199268340131795 + ], + [ + -123.13831329345703, + 49.19941329862788 + ], + [ + -123.13885498046875, + 49.19957733061033 + ], + [ + -123.13938903808595, + 49.19976043607905 + ], + [ + -123.13990783691408, + 49.199962615034146 + ], + [ + -123.14040374755861, + 49.200180052778286 + ], + [ + -123.14088439941406, + 49.20041656400875 + ], + [ + -123.14134979248048, + 49.2006683340283 + ], + [ + -123.14179229736327, + 49.20093536283689 + ], + [ + -123.14220428466797, + 49.20121765043454 + ], + [ + -123.14260101318361, + 49.201515196821276 + ], + [ + -123.14297485351561, + 49.20182418729979 + ], + [ + -123.14328002929686, + 49.20207595731931 + ], + [ + -123.14360809326172, + 49.20231628324705 + ], + [ + -123.14395904541016, + 49.20254516508299 + ], + [ + -123.14432525634767, + 49.20275878812988 + ], + [ + -123.14471435546875, + 49.20295715238768 + ], + [ + -123.1451187133789, + 49.20314407255369 + ], + [ + -123.14553833007812, + 49.203311919233386 + ], + [ + -123.14724731445312, + 49.20394897367675 + ], + [ + -123.14832305908205, + 49.20432281400878 + ], + [ + -123.14993286132814, + 49.20480346586425 + ], + [ + -123.14884948730469, + 49.20867156889163 + ], + [ + -123.14817810058592, + 49.20894622709474 + ], + [ + -123.1486587524414, + 49.209461211225616 + ], + [ + -123.14823913574219, + 49.21940231229987 + ], + [ + -123.14015197753906, + 49.21930694486822 + ], + [ + -123.10616302490233, + 49.21887588407721 + ], + [ + -123.10696411132812, + 49.20415878202636 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.1283816596551, + "lat": 49.21020746567156 + } + }, + { + "name": "Oakridge", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.10562133789061, + 49.23311614896985 + ], + [ + -123.10616302490233, + 49.21887588407721 + ], + [ + -123.14015197753906, + 49.21930694486822 + ], + [ + -123.13959503173827, + 49.234272002241354 + ], + [ + -123.12804412841797, + 49.23390579130386 + ], + [ + -123.10562133789061, + 49.23311614896985 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.12302460370566, + "lat": 49.226403196402856 + } + }, + { + "name": "Riley Park", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.10562133789061, + 49.23311614896985 + ], + [ + -123.1161651611328, + 49.2334899893019 + ], + [ + -123.1159896850586, + 49.23793792631362 + ], + [ + -123.1159896850586, + 49.23800659086442 + ], + [ + -123.11599731445311, + 49.23807907011248 + ], + [ + -123.11600494384767, + 49.238147734663244 + ], + [ + -123.11602783203126, + 49.238216399214025 + ], + [ + -123.11605072021486, + 49.23828506376479 + ], + [ + -123.11608123779297, + 49.23834991361833 + ], + [ + -123.1161117553711, + 49.23841476347185 + ], + [ + -123.11615753173828, + 49.23847961332534 + ], + [ + -123.11620330810547, + 49.23854446317887 + ], + [ + -123.11625671386719, + 49.23860549833511 + ], + [ + -123.11631011962892, + 49.2386627187941 + ], + [ + -123.11811828613281, + 49.24026107694841 + ], + [ + -123.1181640625, + 49.2403068533156 + ], + [ + -123.11820983886719, + 49.240352629682775 + ], + [ + -123.11824798583983, + 49.24040222074724 + ], + [ + -123.1182861328125, + 49.240447997114416 + ], + [ + -123.11831665039061, + 49.240501402876134 + ], + [ + -123.11834716796876, + 49.24055099394059 + ], + [ + -123.11837005615236, + 49.24060439970231 + ], + [ + -123.11839294433595, + 49.24065780546404 + ], + [ + -123.118408203125, + 49.240711211225744 + ], + [ + -123.11842346191406, + 49.24076461698748 + ], + [ + -123.11842346191406, + 49.24081802274919 + ], + [ + -123.1184310913086, + 49.2408714285109 + ], + [ + -123.1184310913086, + 49.24092864896989 + ], + [ + -123.11834716796876, + 49.24274444486833 + ], + [ + -123.11834716796876, + 49.24278640653826 + ], + [ + -123.1183395385742, + 49.242824553510935 + ], + [ + -123.11833190917969, + 49.24286651518085 + ], + [ + -123.11831665039061, + 49.2429046621535 + ], + [ + -123.11830139160156, + 49.242946623823414 + ], + [ + -123.11827850341797, + 49.242984770796085 + ], + [ + -123.11825561523438, + 49.243022917768734 + ], + [ + -123.11823272705078, + 49.24305725004412 + ], + [ + -123.11820220947267, + 49.24309539701677 + ], + [ + -123.11817169189453, + 49.243129729292164 + ], + [ + -123.11813354492189, + 49.24316406156756 + ], + [ + -123.11809539794922, + 49.24319457914568 + ], + [ + -123.11805725097655, + 49.243225096723826 + ], + [ + -123.11801147460936, + 49.24325561430195 + ], + [ + -123.1179656982422, + 49.24328231718279 + ], + [ + -123.11791992187501, + 49.243309020063656 + ], + [ + -123.11635589599608, + 49.244197844526546 + ], + [ + -123.11626434326173, + 49.24425125028827 + ], + [ + -123.11617279052736, + 49.24431228544453 + ], + [ + -123.1160888671875, + 49.24437332060078 + ], + [ + -123.11601257324219, + 49.24443817045429 + ], + [ + -123.11593627929689, + 49.244503020307796 + ], + [ + -123.1158676147461, + 49.244571684858585 + ], + [ + -123.11580657958984, + 49.24464416410664 + ], + [ + -123.11575317382812, + 49.24472045805192 + ], + [ + -123.11569976806642, + 49.24479293729999 + ], + [ + -123.11566162109375, + 49.244873045942576 + ], + [ + -123.11562347412108, + 49.24494933988788 + ], + [ + -123.11559295654297, + 49.24502944853046 + ], + [ + -123.11556243896484, + 49.245109557173045 + ], + [ + -123.11554718017578, + 49.245193480512874 + ], + [ + -123.11553192138673, + 49.24527358915546 + ], + [ + -123.11504364013672, + 49.25687026884301 + ], + [ + -123.08984375, + 49.25637817289576 + ], + [ + -123.09053802490233, + 49.23282241728041 + ], + [ + -123.10562133789061, + 49.23311614896985 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.10314680625231, + "lat": 49.24476647864864 + } + }, + { + "name": "South Cambie", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.1159896850586, + 49.23793792631362 + ], + [ + -123.1161651611328, + 49.2334899893019 + ], + [ + -123.12804412841797, + 49.23390579130386 + ], + [ + -123.12721252441408, + 49.25696945097193 + ], + [ + -123.12721252441408, + 49.25709915067896 + ], + [ + -123.11504364013672, + 49.25687026884301 + ], + [ + -123.11553192138673, + 49.24527358915546 + ], + [ + -123.11554718017578, + 49.245193480512874 + ], + [ + -123.11556243896484, + 49.245109557173045 + ], + [ + -123.11559295654297, + 49.24502944853046 + ], + [ + -123.11562347412108, + 49.24494933988788 + ], + [ + -123.11566162109375, + 49.244873045942576 + ], + [ + -123.11569976806642, + 49.24479293729999 + ], + [ + -123.11575317382812, + 49.24472045805192 + ], + [ + -123.11580657958984, + 49.24464416410664 + ], + [ + -123.1158676147461, + 49.24457549955586 + ], + [ + -123.11593627929689, + 49.244503020307796 + ], + [ + -123.11601257324219, + 49.24443817045429 + ], + [ + -123.1160888671875, + 49.24437332060078 + ], + [ + -123.11617279052736, + 49.24431228544453 + ], + [ + -123.11626434326173, + 49.24425125028827 + ], + [ + -123.11635589599608, + 49.244197844526546 + ], + [ + -123.1181411743164, + 49.24317932035663 + ], + [ + -123.11817932128908, + 49.24314117338396 + ], + [ + -123.11820983886719, + 49.24309921171403 + ], + [ + -123.11824035644531, + 49.24305725004412 + ], + [ + -123.11827087402342, + 49.2430152883742 + ], + [ + -123.11829376220702, + 49.24297332670427 + ], + [ + -123.1183090209961, + 49.242927550337086 + ], + [ + -123.11832427978517, + 49.2428817739699 + ], + [ + -123.1183395385742, + 49.242835997602725 + ], + [ + -123.11834716796876, + 49.24279022123552 + ], + [ + -123.11834716796876, + 49.24274444486833 + ], + [ + -123.1184310913086, + 49.24092864896989 + ], + [ + -123.1184310913086, + 49.2408714285109 + ], + [ + -123.11842346191406, + 49.24081802274919 + ], + [ + -123.11842346191406, + 49.24076461698748 + ], + [ + -123.118408203125, + 49.240711211225744 + ], + [ + -123.11839294433595, + 49.24065780546404 + ], + [ + -123.11837005615236, + 49.24060439970231 + ], + [ + -123.11834716796876, + 49.24055099394059 + ], + [ + -123.11831665039061, + 49.240501402876134 + ], + [ + -123.1182861328125, + 49.240447997114416 + ], + [ + -123.11824798583983, + 49.24040222074724 + ], + [ + -123.11820983886719, + 49.240352629682775 + ], + [ + -123.1181640625, + 49.2403068533156 + ], + [ + -123.11811828613281, + 49.24026107694841 + ], + [ + -123.11631011962892, + 49.2386627187941 + ], + [ + -123.11625671386719, + 49.23861312772965 + ], + [ + -123.11621093749999, + 49.23856353666522 + ], + [ + -123.1161651611328, + 49.23851013090349 + ], + [ + -123.11612701416016, + 49.238456725141766 + ], + [ + -123.11609649658202, + 49.238403319380026 + ], + [ + -123.1160659790039, + 49.23834609892106 + ], + [ + -123.11603546142578, + 49.238292693159345 + ], + [ + -123.11602020263672, + 49.23823165800308 + ], + [ + -123.11600494384767, + 49.23817443754411 + ], + [ + -123.1159896850586, + 49.23811721708512 + ], + [ + -123.11598205566408, + 49.238056181928876 + ], + [ + -123.11598205566408, + 49.23799896146987 + ], + [ + -123.1159896850586, + 49.23793792631362 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.12180091574463, + "lat": 49.245556462368654 + } + }, + { + "name": "Shaughnessy", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.15527343750001, + 49.23452377226088 + ], + [ + -123.15508270263673, + 49.23939895536637 + ], + [ + -123.15507507324219, + 49.23947524931169 + ], + [ + -123.15505981445314, + 49.23955535795426 + ], + [ + -123.15504455566406, + 49.23963165189957 + ], + [ + -123.15502166748047, + 49.23970794584489 + ], + [ + -123.1549835205078, + 49.23978423979019 + ], + [ + -123.15494537353516, + 49.2398605337355 + ], + [ + -123.1549072265625, + 49.23993301298356 + ], + [ + -123.15485382080078, + 49.240005492231596 + ], + [ + -123.15480041503908, + 49.2400741567824 + ], + [ + -123.15473937988281, + 49.240142821333166 + ], + [ + -123.15467071533203, + 49.24020767118668 + ], + [ + -123.15459442138672, + 49.24027252104021 + ], + [ + -123.15451812744142, + 49.24033355619647 + ], + [ + -123.15444183349608, + 49.24039077665544 + ], + [ + -123.15435028076173, + 49.24044418241716 + ], + [ + -123.15425872802736, + 49.24049758817888 + ], + [ + -123.15416717529297, + 49.24054336454608 + ], + [ + -123.15406799316408, + 49.24058914091325 + ], + [ + -123.15396118164062, + 49.24063110258319 + ], + [ + -123.15386199951172, + 49.240669249555836 + ], + [ + -123.15374755859375, + 49.24070358183123 + ], + [ + -123.15364074707033, + 49.240734099409345 + ], + [ + -123.15352630615236, + 49.240760802290225 + ], + [ + -123.15341186523438, + 49.24077987577653 + ], + [ + -123.15328979492189, + 49.24079894926287 + ], + [ + -123.1531753540039, + 49.24081420805194 + ], + [ + -123.15305328369142, + 49.24082183744646 + ], + [ + -123.15293121337892, + 49.240829466840985 + ], + [ + -123.15281677246095, + 49.240829466840985 + ], + [ + -123.15269470214845, + 49.24082565214373 + ], + [ + -123.15257263183592, + 49.24082183744646 + ], + [ + -123.15245819091798, + 49.24081039335467 + ], + [ + -123.15233612060545, + 49.240795134565595 + ], + [ + -123.15222167968751, + 49.240772246382015 + ], + [ + -123.15210723876955, + 49.24074935819842 + ], + [ + -123.15199279785156, + 49.24072265531754 + ], + [ + -123.1500701904297, + 49.24038696195817 + ], + [ + -123.14994049072266, + 49.240367888471845 + ], + [ + -123.14981842041016, + 49.240352629682775 + ], + [ + -123.14968872070311, + 49.24034500028825 + ], + [ + -123.1495590209961, + 49.24033737089373 + ], + [ + -123.14942932128905, + 49.24033355619646 + ], + [ + -123.14929962158203, + 49.24033737089373 + ], + [ + -123.14916992187499, + 49.24034500028825 + ], + [ + -123.14904022216797, + 49.24035644438005 + ], + [ + -123.14891815185547, + 49.24037170316912 + ], + [ + -123.14878845214842, + 49.24039077665544 + ], + [ + -123.14866638183594, + 49.24041366483903 + ], + [ + -123.14854431152344, + 49.24044418241716 + ], + [ + -123.14842224121094, + 49.240474699995275 + ], + [ + -123.14830780029297, + 49.24051284696796 + ], + [ + -123.148193359375, + 49.24055480863786 + ], + [ + -123.14808654785158, + 49.24059677030778 + ], + [ + -123.14797973632812, + 49.24064636137223 + ], + [ + -123.1478729248047, + 49.24069976713394 + ], + [ + -123.14778137207033, + 49.24075317289568 + ], + [ + -123.14768218994142, + 49.24081039335467 + ], + [ + -123.14759826660156, + 49.2408714285109 + ], + [ + -123.1475143432617, + 49.240936278364416 + ], + [ + -123.14743041992188, + 49.24100494291521 + ], + [ + -123.1473617553711, + 49.241073607465985 + ], + [ + -123.14729309082031, + 49.24114608671403 + ], + [ + -123.14723205566405, + 49.24122238065935 + ], + [ + -123.14717864990234, + 49.241298674604664 + ], + [ + -123.14712524414062, + 49.24137496854999 + ], + [ + -123.14708709716795, + 49.24145507719255 + ], + [ + -123.14704895019533, + 49.24153900053239 + ], + [ + -123.14701843261717, + 49.241619109174984 + ], + [ + -123.14699554443358, + 49.24170303251482 + ], + [ + -123.14698028564453, + 49.24178695585467 + ], + [ + -123.14697265624999, + 49.241870879194515 + ], + [ + -123.14696502685547, + 49.24195480253437 + ], + [ + -123.14694976806642, + 49.2425613393996 + ], + [ + -123.14694976806642, + 49.24273300077653 + ], + [ + -123.14697265624999, + 49.242900847456234 + ], + [ + -123.14700317382812, + 49.243072508833194 + ], + [ + -123.14704895019533, + 49.243240355512874 + ], + [ + -123.14710235595703, + 49.24340438749529 + ], + [ + -123.14717864990234, + 49.243568419477725 + ], + [ + -123.14726257324219, + 49.24372863676288 + ], + [ + -123.14736938476562, + 49.24388503935077 + ], + [ + -123.15238189697264, + 49.250621794721894 + ], + [ + -123.1524658203125, + 49.25074767973165 + ], + [ + -123.15254211425781, + 49.2508773794387 + ], + [ + -123.1526107788086, + 49.251007079145715 + ], + [ + -123.15266418457031, + 49.25114059355003 + ], + [ + -123.1527099609375, + 49.25127792265159 + ], + [ + -123.15274047851561, + 49.25141525175315 + ], + [ + -123.1527633666992, + 49.25155258085472 + ], + [ + -123.15277099609375, + 49.25169372465353 + ], + [ + -123.1527633666992, + 49.25183105375512 + ], + [ + -123.15259552001952, + 49.25722503568872 + ], + [ + -123.14598846435547, + 49.25712203886255 + ], + [ + -123.13842010498047, + 49.257007597944586 + ], + [ + -123.1383056640625, + 49.25709915067896 + ], + [ + -123.13819122314453, + 49.257190703413336 + ], + [ + -123.13806152343751, + 49.25727462675319 + ], + [ + -123.13793182373047, + 49.25735473539575 + ], + [ + -123.1377944946289, + 49.25743102934107 + ], + [ + -123.13764953613281, + 49.25750350858911 + ], + [ + -123.13750457763672, + 49.257568358442626 + ], + [ + -123.13735198974611, + 49.25762939359888 + ], + [ + -123.13719177246094, + 49.2576827993606 + ], + [ + -123.13702392578126, + 49.25773239042506 + ], + [ + -123.13685607910158, + 49.257778166792235 + ], + [ + -123.13668823242186, + 49.25781249906764 + ], + [ + -123.13651275634766, + 49.25784683134303 + ], + [ + -123.13633728027345, + 49.257869719526624 + ], + [ + -123.13616180419922, + 49.25788879301295 + ], + [ + -123.13597869873045, + 49.257904051802015 + ], + [ + -123.13565826416016, + 49.257915495893805 + ], + [ + -123.13533782958983, + 49.257915495893805 + ], + [ + -123.13500976562499, + 49.257904051802015 + ], + [ + -123.13468933105469, + 49.2578811636184 + ], + [ + -123.13436889648436, + 49.25784683134303 + ], + [ + -123.1340560913086, + 49.257797240278585 + ], + [ + -123.13374328613281, + 49.25774001981959 + ], + [ + -123.13343811035156, + 49.25767135526882 + ], + [ + -123.13313293457031, + 49.25759124662623 + ], + [ + -123.13284301757812, + 49.25749969389185 + ], + [ + -123.13256072998047, + 49.25739669706567 + ], + [ + -123.13228607177734, + 49.257282256147725 + ], + [ + -123.13201904296875, + 49.25716018583521 + ], + [ + -123.1317672729492, + 49.257030486128194 + ], + [ + -123.12721252441408, + 49.25696945097193 + ], + [ + -123.12804412841797, + 49.23390579130386 + ], + [ + -123.13959503173827, + 49.234272002241354 + ], + [ + -123.15527343750001, + 49.23452377226088 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.13976016672807, + "lat": 49.24568097615458 + } + }, + { + "name": "Victoria-Fraserview", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.0568313598633, + 49.20420074369628 + ], + [ + -123.05846405029298, + 49.2042198171826 + ], + [ + -123.05944824218749, + 49.204242705366205 + ], + [ + -123.06043243408203, + 49.20430374052245 + ], + [ + -123.06140899658203, + 49.20439529325683 + ], + [ + -123.0623779296875, + 49.20452499296387 + ], + [ + -123.06333160400392, + 49.204692839643556 + ], + [ + -123.0642776489258, + 49.20489501859865 + ], + [ + -123.06519317626952, + 49.20512771513184 + ], + [ + -123.0660934448242, + 49.205398558637704 + ], + [ + -123.06697082519533, + 49.20569991972168 + ], + [ + -123.06781768798827, + 49.20603179838379 + ], + [ + -123.06854248046875, + 49.2063407888623 + ], + [ + -123.0688247680664, + 49.20645522978027 + ], + [ + -123.06912231445314, + 49.20655822660646 + ], + [ + -123.06942749023436, + 49.20664977934083 + ], + [ + -123.06974029541017, + 49.2067298879834 + ], + [ + -123.07006072998047, + 49.206794737836915 + ], + [ + -123.07438659667969, + 49.207599638959955 + ], + [ + -123.07478332519531, + 49.207645415327164 + ], + [ + -123.07517242431639, + 49.20767593290528 + ], + [ + -123.07556915283203, + 49.20769500639161 + ], + [ + -123.07596588134766, + 49.20769500639161 + ], + [ + -123.07636260986328, + 49.20768356229981 + ], + [ + -123.07675170898438, + 49.207656859418954 + ], + [ + -123.0771484375, + 49.207614897749025 + ], + [ + -123.07701110839844, + 49.21918487455574 + ], + [ + -123.07742309570314, + 49.21997070219244 + ], + [ + -123.07703399658203, + 49.232666014692505 + ], + [ + -123.06674194335938, + 49.23255538847181 + ], + [ + -123.06444549560548, + 49.23286437895032 + ], + [ + -123.05885314941406, + 49.23280715849134 + ], + [ + -123.04875183105469, + 49.23275375272962 + ], + [ + -123.0488052368164, + 49.229293822309685 + ], + [ + -123.0500717163086, + 49.229293822309685 + ], + [ + -123.05055999755858, + 49.21715927030766 + ], + [ + -123.05063629150392, + 49.216915129682675 + ], + [ + -123.05073547363281, + 49.216674803754955 + ], + [ + -123.05085754394531, + 49.216442107221724 + ], + [ + -123.05099487304688, + 49.21620941068854 + ], + [ + -123.05115509033205, + 49.21598434354985 + ], + [ + -123.05133819580077, + 49.21576690580571 + ], + [ + -123.05153656005861, + 49.21555709745609 + ], + [ + -123.05175018310547, + 49.21535491850101 + ], + [ + -123.05437469482422, + 49.21306228544437 + ], + [ + -123.0544891357422, + 49.2129592886182 + ], + [ + -123.05459594726562, + 49.21285247709476 + ], + [ + -123.05469512939452, + 49.21274185087406 + ], + [ + -123.0547866821289, + 49.212627409956085 + ], + [ + -123.0548629760742, + 49.21251296903813 + ], + [ + -123.05493164062499, + 49.212390898725616 + ], + [ + -123.05499267578125, + 49.212268828413116 + ], + [ + -123.05503845214844, + 49.212146758100616 + ], + [ + -123.05507659912108, + 49.21202087309085 + ], + [ + -123.05509948730467, + 49.2118949880811 + ], + [ + -123.05545806884767, + 49.20962524320802 + ], + [ + -123.05572509765625, + 49.209148406049835 + ], + [ + -123.05604553222655, + 49.20868682768068 + ], + [ + -123.05641174316406, + 49.20824050810059 + ], + [ + -123.05649566650389, + 49.20814132597169 + ], + [ + -123.05656433105467, + 49.20804214384277 + ], + [ + -123.05663299560547, + 49.20794296171388 + ], + [ + -123.0566864013672, + 49.207836150190424 + ], + [ + -123.05673217773436, + 49.207729338666994 + ], + [ + -123.05677795410155, + 49.20762252714357 + ], + [ + -123.0568084716797, + 49.207515715620126 + ], + [ + -123.05682373046874, + 49.20740508939943 + ], + [ + -123.05683898925781, + 49.20729446317871 + ], + [ + -123.05684661865233, + 49.20718383695801 + ], + [ + -123.0568313598633, + 49.20420074369628 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.06413471832595, + "lat": 49.22001194005767 + } + }, + { + "name": "Dunbar-Southlands", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.17016601562501, + 49.24789047147971 + ], + [ + -123.17024993896484, + 49.234703063032356 + ], + [ + -123.17870330810548, + 49.234722136518705 + ], + [ + -123.17909240722656, + 49.21680450346197 + ], + [ + -123.17908477783203, + 49.21555709745609 + ], + [ + -123.17910003662108, + 49.21555709745609 + ], + [ + -123.17975616455078, + 49.21558761503423 + ], + [ + -123.18041229248047, + 49.21563720609868 + ], + [ + -123.18106079101561, + 49.215713500044004 + ], + [ + -123.18170166015624, + 49.215812682172896 + ], + [ + -123.18232727050781, + 49.2159347524854 + ], + [ + -123.18295288085936, + 49.2160797109815 + ], + [ + -123.18355560302734, + 49.216247557661184 + ], + [ + -123.18415069580078, + 49.21643447782719 + ], + [ + -123.18472290039062, + 49.216644286176795 + ], + [ + -123.1852798461914, + 49.216873168012754 + ], + [ + -123.18581390380858, + 49.21712112333501 + ], + [ + -123.1863327026367, + 49.21739196684088 + ], + [ + -123.18682098388672, + 49.2176780691358 + ], + [ + -123.18728637695314, + 49.21797943021979 + ], + [ + -123.18772888183592, + 49.21829986479009 + ], + [ + -123.18795013427734, + 49.218463896772526 + ], + [ + -123.18818664550781, + 49.218616484663144 + ], + [ + -123.18843841552733, + 49.218761443159245 + ], + [ + -123.18869781494139, + 49.2188987722608 + ], + [ + -123.18896484375001, + 49.219024657270566 + ], + [ + -123.18924713134767, + 49.219142912885786 + ], + [ + -123.18953704833984, + 49.21924972440924 + ], + [ + -123.18983459472655, + 49.219348906538166 + ], + [ + -123.19014739990236, + 49.21943282987801 + ], + [ + -123.19046020507812, + 49.21950912382332 + ], + [ + -123.1907730102539, + 49.219573973676816 + ], + [ + -123.19110107421875, + 49.21962356474128 + ], + [ + -123.1975860595703, + 49.22055435087409 + ], + [ + -123.19785308837892, + 49.22060012724128 + ], + [ + -123.19811248779298, + 49.220653533002995 + ], + [ + -123.1983642578125, + 49.22071838285651 + ], + [ + -123.19861602783203, + 49.22079086210457 + ], + [ + -123.1988525390625, + 49.220874785444394 + ], + [ + -123.19908905029297, + 49.22096633817878 + ], + [ + -123.19931793212892, + 49.22106170561042 + ], + [ + -123.1995315551758, + 49.22116851713387 + ], + [ + -123.19974517822267, + 49.221282958051845 + ], + [ + -123.19994354248047, + 49.22140502836434 + ], + [ + -123.20550537109374, + 49.224994658491305 + ], + [ + -123.20590972900389, + 49.225299834272555 + ], + [ + -123.20629119873048, + 49.225616454145595 + ], + [ + -123.20664215087889, + 49.225944518110445 + ], + [ + -123.20697021484374, + 49.22628784086436 + ], + [ + -123.20726776123047, + 49.2266387930128 + ], + [ + -123.20754241943358, + 49.22700118925303 + ], + [ + -123.20888519287108, + 49.22894668485851 + ], + [ + -123.20916748046875, + 49.2292594900343 + ], + [ + -123.20948028564452, + 49.22956085111828 + ], + [ + -123.20982360839844, + 49.22984695341319 + ], + [ + -123.2101821899414, + 49.230121611616326 + ], + [ + -123.21057128906251, + 49.23038101103039 + ], + [ + -123.21098327636719, + 49.230625151655396 + ], + [ + -123.21141815185545, + 49.23085403349131 + ], + [ + -123.21985626220702, + 49.235023497602675 + ], + [ + -123.2219467163086, + 49.23657607938979 + ], + [ + -123.21992492675781, + 49.23954772855973 + ], + [ + -123.2085952758789, + 49.235183714887846 + ], + [ + -123.20560455322267, + 49.23720168974136 + ], + [ + -123.1968307495117, + 49.23485565092299 + ], + [ + -123.1968536376953, + 49.23651504423354 + ], + [ + -123.19857025146484, + 49.236518858930815 + ], + [ + -123.19857025146484, + 49.23834609892106 + ], + [ + -123.1968536376953, + 49.23847961332534 + ], + [ + -123.19678497314452, + 49.246196745893755 + ], + [ + -123.19854736328125, + 49.246208189985545 + ], + [ + -123.19858551025392, + 49.246208189985545 + ], + [ + -123.19863128662111, + 49.246208189985545 + ], + [ + -123.1986770629883, + 49.2462120046828 + ], + [ + -123.19871520996094, + 49.246215819380076 + ], + [ + -123.19876098632812, + 49.24622344877462 + ], + [ + -123.1987991333008, + 49.24623107816914 + ], + [ + -123.19884490966798, + 49.24623870756366 + ], + [ + -123.19888305664062, + 49.246246336958194 + ], + [ + -123.19892120361328, + 49.24625778105002 + ], + [ + -123.19895935058592, + 49.24627303983906 + ], + [ + -123.1989974975586, + 49.246288298628116 + ], + [ + -123.19903564453126, + 49.24629974271992 + ], + [ + -123.19906616210938, + 49.246318816206255 + ], + [ + -123.20494079589842, + 49.24926376249533 + ], + [ + -123.2009963989258, + 49.249973296186745 + ], + [ + -123.20079040527344, + 49.25001144315941 + ], + [ + -123.20057678222656, + 49.25003814604025 + ], + [ + -123.20036315917969, + 49.25005721952656 + ], + [ + -123.20014190673827, + 49.25006866361837 + ], + [ + -123.19992828369139, + 49.25007247831563 + ], + [ + -123.1986770629883, + 49.25007629301293 + ], + [ + -123.1986770629883, + 49.249923705122285 + ], + [ + -123.19660949707031, + 49.24992751981954 + ], + [ + -123.19654846191405, + 49.25651931669457 + ], + [ + -123.20288085937499, + 49.25661468412623 + ], + [ + -123.20321655273439, + 49.258148192427015 + ], + [ + -123.18399047851561, + 49.257865904829366 + ], + [ + -123.17807006835938, + 49.25776672270045 + ], + [ + -123.1781005859375, + 49.257164000532484 + ], + [ + -123.17792510986328, + 49.2569389333938 + ], + [ + -123.17616271972656, + 49.25561141874535 + ], + [ + -123.17501068115233, + 49.25408172514183 + ], + [ + -123.17347717285158, + 49.252849577925026 + ], + [ + -123.1718978881836, + 49.25154495146018 + ], + [ + -123.1696014404297, + 49.24896240141134 + ], + [ + -123.17092895507812, + 49.24967193510274 + ], + [ + -123.17218780517578, + 49.250045775434785 + ], + [ + -123.17095184326172, + 49.24844741728048 + ], + [ + -123.17051696777342, + 49.248092650434785 + ], + [ + -123.17016601562501, + 49.24789047147971 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.18954680338996, + "lat": 49.23796190534427 + } + }, + { + "name": "Fairview", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.14598846435547, + 49.25712203886255 + ], + [ + -123.14540100097656, + 49.271846770307945 + ], + [ + -123.14534759521484, + 49.2719612112259 + ], + [ + -123.1452865600586, + 49.272075652143904 + ], + [ + -123.14521789550781, + 49.27218627836458 + ], + [ + -123.1451416015625, + 49.27229690458529 + ], + [ + -123.14505004882812, + 49.27239990141145 + ], + [ + -123.14495086669922, + 49.272502898237626 + ], + [ + -123.14484405517577, + 49.27260208036652 + ], + [ + -123.14473724365234, + 49.27269744779819 + ], + [ + -123.14461517333984, + 49.27278900053254 + ], + [ + -123.1444854736328, + 49.2728729238724 + ], + [ + -123.14434814453124, + 49.27295684721224 + ], + [ + -123.1442108154297, + 49.27303314115756 + ], + [ + -123.14405822753906, + 49.27310562040561 + ], + [ + -123.14390563964844, + 49.27317047025911 + ], + [ + -123.14374542236328, + 49.27323150541536 + ], + [ + -123.1392822265625, + 49.274826048872406 + ], + [ + -123.13768005371092, + 49.27531814481966 + ], + [ + -123.12928009033203, + 49.2695312490677 + ], + [ + -123.12116241455078, + 49.26953887846223 + ], + [ + -123.11444854736328, + 49.2717742910599 + ], + [ + -123.11504364013672, + 49.25687026884301 + ], + [ + -123.12721252441408, + 49.25709915067896 + ], + [ + -123.12721252441408, + 49.25696945097193 + ], + [ + -123.1317672729492, + 49.257030486128194 + ], + [ + -123.13200378417967, + 49.25715255644068 + ], + [ + -123.1322479248047, + 49.257266997358656 + ], + [ + -123.1324996948242, + 49.257373808882086 + ], + [ + -123.13276672363283, + 49.25747299101099 + ], + [ + -123.1330337524414, + 49.25756072904809 + ], + [ + -123.13331604003906, + 49.25764083769068 + ], + [ + -123.13359832763672, + 49.25770950224146 + ], + [ + -123.1338882446289, + 49.257770537397704 + ], + [ + -123.13417816162108, + 49.257820128462164 + ], + [ + -123.13447570800781, + 49.25785827543482 + ], + [ + -123.13478088378906, + 49.25788497831567 + ], + [ + -123.13507843017577, + 49.25790405180202 + ], + [ + -123.13538360595702, + 49.25791168119654 + ], + [ + -123.13568878173828, + 49.25790786649928 + ], + [ + -123.135986328125, + 49.25789642240748 + ], + [ + -123.13616943359376, + 49.25788497831567 + ], + [ + -123.13634490966797, + 49.25786590482936 + ], + [ + -123.13652038574217, + 49.257839201948514 + ], + [ + -123.1366958618164, + 49.257808684370374 + ], + [ + -123.1368637084961, + 49.25777435209498 + ], + [ + -123.13703155517578, + 49.2577285757278 + ], + [ + -123.13719177246094, + 49.2576827993606 + ], + [ + -123.13735198974611, + 49.25762557890161 + ], + [ + -123.13750457763672, + 49.257568358442626 + ], + [ + -123.13765716552733, + 49.25749969389185 + ], + [ + -123.13780212402345, + 49.25743102934108 + ], + [ + -123.13793945312499, + 49.25735473539575 + ], + [ + -123.13806915283203, + 49.25727462675318 + ], + [ + -123.13819122314453, + 49.257190703413336 + ], + [ + -123.1383056640625, + 49.25709915067896 + ], + [ + -123.13842010498047, + 49.257007597944586 + ], + [ + -123.14598846435547, + 49.25712203886255 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.1310488653851, + "lat": 49.26454048616976 + } + }, + { + "name": "Mount Pleasant", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.10066986083984, + 49.269130705854806 + ], + [ + -123.09692382812501, + 49.26700591947784 + ], + [ + -123.09688568115234, + 49.266975401899714 + ], + [ + -123.09683990478516, + 49.26694869901886 + ], + [ + -123.09679412841797, + 49.26692581083526 + ], + [ + -123.09674072265625, + 49.26689910795439 + ], + [ + -123.09669494628906, + 49.26688003446808 + ], + [ + -123.09664154052736, + 49.26685714628449 + ], + [ + -123.09658813476561, + 49.2668418874954 + ], + [ + -123.0965347290039, + 49.266826628706355 + ], + [ + -123.09647369384764, + 49.266811369917285 + ], + [ + -123.09642028808594, + 49.26679992582549 + ], + [ + -123.0963592529297, + 49.26678848173369 + ], + [ + -123.09629821777344, + 49.26678085233917 + ], + [ + -123.09623718261717, + 49.26677322294464 + ], + [ + -123.09618377685547, + 49.26677322294464 + ], + [ + -123.09612274169923, + 49.266769408247356 + ], + [ + -123.08999633789061, + 49.26672744657744 + ], + [ + -123.08967590332031, + 49.26670837309112 + ], + [ + -123.08936309814455, + 49.26667404081573 + ], + [ + -123.08905792236328, + 49.2666320791458 + ], + [ + -123.08874511718751, + 49.26657867338409 + ], + [ + -123.08196258544923, + 49.26527023222196 + ], + [ + -123.08179473876955, + 49.26523589994658 + ], + [ + -123.08162689208983, + 49.265209197065715 + ], + [ + -123.08145904541014, + 49.26518630888213 + ], + [ + -123.08129119873047, + 49.265171050093066 + ], + [ + -123.08111572265625, + 49.26515960600126 + ], + [ + -123.08094787597656, + 49.265155791304 + ], + [ + -123.07741546630858, + 49.26514053251494 + ], + [ + -123.07758331298827, + 49.256626128218016 + ], + [ + -123.07778930664062, + 49.256633757612555 + ], + [ + -123.07779693603514, + 49.25619888212427 + ], + [ + -123.08984375, + 49.25637817289576 + ], + [ + -123.10120391845705, + 49.25654601957543 + ], + [ + -123.11504364013672, + 49.25687026884301 + ], + [ + -123.11444854736328, + 49.2717742910599 + ], + [ + -123.11107635498047, + 49.272926329634096 + ], + [ + -123.10169982910158, + 49.27297210600129 + ], + [ + -123.09999847412111, + 49.272750853559906 + ], + [ + -123.10003662109375, + 49.271923064253244 + ], + [ + -123.10060119628906, + 49.270889281294274 + ], + [ + -123.10066986083984, + 49.269130705854806 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.09851312036905, + "lat": 49.26306524972865 + } + }, + { + "name": "Renfrew-Collingwood", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.02355957031249, + 49.23479080106947 + ], + [ + -123.02356719970705, + 49.23226928617689 + ], + [ + -123.03034210205078, + 49.231933592817505 + ], + [ + -123.03051757812501, + 49.23192977812023 + ], + [ + -123.03069305419922, + 49.23192977812023 + ], + [ + -123.03086853027342, + 49.231937407514785 + ], + [ + -123.03105163574219, + 49.23194885160657 + ], + [ + -123.03122711181642, + 49.231971739790175 + ], + [ + -123.0313949584961, + 49.23199844267102 + ], + [ + -123.03156280517578, + 49.232028960249146 + ], + [ + -123.03173065185547, + 49.232070921919075 + ], + [ + -123.03189849853516, + 49.23211669828626 + ], + [ + -123.03205871582031, + 49.232166289350715 + ], + [ + -123.03221130371094, + 49.2322235098097 + ], + [ + -123.03236389160158, + 49.23228454496595 + ], + [ + -123.03250885009766, + 49.23235320951673 + ], + [ + -123.03585815429689, + 49.23410415556167 + ], + [ + -123.03645324707033, + 49.23342895414565 + ], + [ + -123.03650665283203, + 49.23337554838393 + ], + [ + -123.0365676879883, + 49.233318327924934 + ], + [ + -123.03662872314453, + 49.233264922163215 + ], + [ + -123.03669738769531, + 49.233215331098755 + ], + [ + -123.0367660522461, + 49.233169554731575 + ], + [ + -123.0368423461914, + 49.23312377836439 + ], + [ + -123.0369186401367, + 49.23308181669446 + ], + [ + -123.03700256347656, + 49.233043669721795 + ], + [ + -123.03708648681639, + 49.23300552274916 + ], + [ + -123.03717803955077, + 49.23297119047377 + ], + [ + -123.03726959228516, + 49.23294067289563 + ], + [ + -123.03736114501953, + 49.2329139700148 + ], + [ + -123.0374526977539, + 49.23289108183119 + ], + [ + -123.03755187988281, + 49.23287200834486 + ], + [ + -123.0376510620117, + 49.232856749555786 + ], + [ + -123.03775024414064, + 49.232841490766745 + ], + [ + -123.03784942626953, + 49.2328338613722 + ], + [ + -123.0467071533203, + 49.23288726713391 + ], + [ + -123.04875183105469, + 49.23275375272962 + ], + [ + -123.05885314941406, + 49.23280715849134 + ], + [ + -123.0586700439453, + 49.24076461698748 + ], + [ + -123.05866241455078, + 49.24085998441911 + ], + [ + -123.0586471557617, + 49.24095535185075 + ], + [ + -123.05862426757811, + 49.241050719282406 + ], + [ + -123.05860137939455, + 49.24114227201677 + ], + [ + -123.05856323242188, + 49.24123763944841 + ], + [ + -123.05851745605469, + 49.24132537748552 + ], + [ + -123.0584716796875, + 49.2414169302199 + ], + [ + -123.05841064453124, + 49.24150466825701 + ], + [ + -123.05834197998048, + 49.241588591596845 + ], + [ + -123.0582733154297, + 49.241672514936695 + ], + [ + -123.05819702148436, + 49.24175262357927 + ], + [ + -123.05811309814453, + 49.24182891752458 + ], + [ + -123.05662536621094, + 49.24317550565935 + ], + [ + -123.05658721923827, + 49.26198196317898 + ], + [ + -123.04424285888672, + 49.26193618681179 + ], + [ + -123.04424285888672, + 49.26187133695827 + ], + [ + -123.03262329101564, + 49.26182937528834 + ], + [ + -123.03239440917969, + 49.26183318998563 + ], + [ + -123.03216552734374, + 49.26184463407742 + ], + [ + -123.03193664550783, + 49.26186752226102 + ], + [ + -123.03170776367188, + 49.26189422514187 + ], + [ + -123.03148651123048, + 49.261932372114536 + ], + [ + -123.03126525878906, + 49.26197814848171 + ], + [ + -123.03104400634766, + 49.262027739546156 + ], + [ + -123.03083801269531, + 49.26208877470243 + ], + [ + -123.03063201904295, + 49.2621574392532 + ], + [ + -123.03042602539062, + 49.262229918501255 + ], + [ + -123.03023529052736, + 49.2623138418411 + ], + [ + -123.03004455566408, + 49.26240157987821 + ], + [ + -123.02986907958984, + 49.26249694730984 + ], + [ + -123.02969360351562, + 49.26259612943875 + ], + [ + -123.02953338623047, + 49.262706755659444 + ], + [ + -123.02794647216797, + 49.26375198271025 + ], + [ + -123.02762603759764, + 49.263980864546184 + ], + [ + -123.02729034423828, + 49.264198302290325 + ], + [ + -123.02693176269531, + 49.26440429594267 + ], + [ + -123.02655792236328, + 49.26459503080595 + ], + [ + -123.0261688232422, + 49.26477050688016 + ], + [ + -123.02576446533205, + 49.26493453886258 + ], + [ + -123.02534484863281, + 49.26508331205594 + ], + [ + -123.02491760253906, + 49.265220641157526 + ], + [ + -123.02447509765625, + 49.265338896772754 + ], + [ + -123.0240249633789, + 49.26544189359891 + ], + [ + -123.02356719970705, + 49.265525816938755 + ], + [ + -123.02355957031249, + 49.23479080106947 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.040166464563, + "lat": 49.247342733638504 + } + }, + { + "name": "West End", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.13768005371092, + 49.27531814481966 + ], + [ + -123.1412582397461, + 49.27829360868688 + ], + [ + -123.1426773071289, + 49.28133010771033 + ], + [ + -123.14553833007812, + 49.28436279203652 + ], + [ + -123.14540863037108, + 49.287136076948634 + ], + [ + -123.14775085449217, + 49.2889060964799 + ], + [ + -123.14168548583984, + 49.29291915800335 + ], + [ + -123.13809967041016, + 49.293514250776795 + ], + [ + -123.13668060302734, + 49.29445648100141 + ], + [ + -123.12109375, + 49.28436660673378 + ], + [ + -123.13233184814453, + 49.276931761763024 + ], + [ + -123.13768005371092, + 49.27531814481966 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.13543765302629, + "lat": 49.285011188472005 + } + }, + { + "name": "Arbutus Ridge", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.15259552001952, + 49.25722503568872 + ], + [ + -123.16487884521484, + 49.257427214643805 + ], + [ + -123.16487884521484, + 49.25756835844264 + ], + [ + -123.17807006835938, + 49.25776672270045 + ], + [ + -123.1781005859375, + 49.257164000532484 + ], + [ + -123.17792510986328, + 49.2569389333938 + ], + [ + -123.17616271972656, + 49.25561141874535 + ], + [ + -123.17501068115233, + 49.25408172514183 + ], + [ + -123.17190551757812, + 49.25155258085472 + ], + [ + -123.1696014404297, + 49.24896240141134 + ], + [ + -123.17092895507812, + 49.24967193510274 + ], + [ + -123.17218780517578, + 49.250045775434785 + ], + [ + -123.17095184326172, + 49.24845886137228 + ], + [ + -123.17056274414061, + 49.24811935331564 + ], + [ + -123.17015838623047, + 49.24788284208516 + ], + [ + -123.17024993896484, + 49.234703063032356 + ], + [ + -123.15527343750001, + 49.23452377226088 + ], + [ + -123.15508270263673, + 49.23939895536637 + ], + [ + -123.15506744384766, + 49.23947906400897 + ], + [ + -123.15503692626955, + 49.239562987348805 + ], + [ + -123.15500640869139, + 49.23964309599139 + ], + [ + -123.15496826171876, + 49.239723204633954 + ], + [ + -123.15492248535156, + 49.23979949857926 + ], + [ + -123.15487670898438, + 49.239879607221845 + ], + [ + -123.15481567382812, + 49.2399520864699 + ], + [ + -123.15475463867189, + 49.24002456571794 + ], + [ + -123.1546859741211, + 49.24009704496598 + ], + [ + -123.15461730957031, + 49.24016570951677 + ], + [ + -123.15453338623045, + 49.240230559370296 + ], + [ + -123.15444946289062, + 49.24029159452653 + ], + [ + -123.15435791015625, + 49.24035262968279 + ], + [ + -123.15426635742188, + 49.240406035444494 + ], + [ + -123.15416717529297, + 49.24045944120622 + ], + [ + -123.15406036376952, + 49.240509032270694 + ], + [ + -123.15396118164062, + 49.24055480863786 + ], + [ + -123.15384674072266, + 49.24059677030778 + ], + [ + -123.15373229980467, + 49.24063491728044 + ], + [ + -123.15361785888673, + 49.240669249555836 + ], + [ + -123.1534957885742, + 49.24069976713394 + ], + [ + -123.15337371826172, + 49.24072647001482 + ], + [ + -123.15325164794922, + 49.24074935819841 + ], + [ + -123.15312957763672, + 49.24076461698747 + ], + [ + -123.15299987792967, + 49.240776061079266 + ], + [ + -123.15287780761719, + 49.240787505171056 + ], + [ + -123.15274810791016, + 49.240791319868336 + ], + [ + -123.15261840820311, + 49.240791319868336 + ], + [ + -123.15249633789062, + 49.240783690473805 + ], + [ + -123.15236663818361, + 49.24077606107926 + ], + [ + -123.15223693847656, + 49.24076080229022 + ], + [ + -123.15211486816406, + 49.24074554350114 + ], + [ + -123.15199279785156, + 49.24072265531754 + ], + [ + -123.1500701904297, + 49.24038696195817 + ], + [ + -123.14994049072266, + 49.240367888471845 + ], + [ + -123.14981842041016, + 49.240352629682775 + ], + [ + -123.14968872070311, + 49.24034118559099 + ], + [ + -123.1495590209961, + 49.24033737089373 + ], + [ + -123.14942932128905, + 49.24033355619646 + ], + [ + -123.14929962158203, + 49.24033737089373 + ], + [ + -123.14916992187499, + 49.24034118559099 + ], + [ + -123.14904022216797, + 49.24035262968279 + ], + [ + -123.14891815185547, + 49.24036788847185 + ], + [ + -123.14878845214842, + 49.24039077665544 + ], + [ + -123.14866638183594, + 49.24041366483903 + ], + [ + -123.14854431152344, + 49.2404403677199 + ], + [ + -123.14842224121094, + 49.240474699995275 + ], + [ + -123.14830780029297, + 49.24051284696796 + ], + [ + -123.148193359375, + 49.24055099394059 + ], + [ + -123.14808654785158, + 49.24059677030778 + ], + [ + -123.14797973632812, + 49.24064636137223 + ], + [ + -123.1478729248047, + 49.240695952436695 + ], + [ + -123.14777374267577, + 49.24075317289568 + ], + [ + -123.14768218994142, + 49.24081039335467 + ], + [ + -123.14759063720705, + 49.24087142851091 + ], + [ + -123.14750671386719, + 49.240936278364416 + ], + [ + -123.14743041992188, + 49.24100494291521 + ], + [ + -123.1473617553711, + 49.241073607465985 + ], + [ + -123.14729309082031, + 49.24114608671403 + ], + [ + -123.14723205566405, + 49.24122238065935 + ], + [ + -123.14717864990234, + 49.241298674604664 + ], + [ + -123.14712524414062, + 49.24137496854999 + ], + [ + -123.14708709716795, + 49.24145507719255 + ], + [ + -123.14704895019533, + 49.24153900053239 + ], + [ + -123.14701843261717, + 49.241619109174984 + ], + [ + -123.14699554443358, + 49.24170303251482 + ], + [ + -123.14698028564453, + 49.24178695585467 + ], + [ + -123.14697265624999, + 49.241870879194515 + ], + [ + -123.14696502685547, + 49.24195480253437 + ], + [ + -123.14694976806642, + 49.2425613393996 + ], + [ + -123.14694976806642, + 49.24273300077653 + ], + [ + -123.14697265624999, + 49.242900847456234 + ], + [ + -123.14700317382812, + 49.243072508833194 + ], + [ + -123.14704895019533, + 49.243240355512874 + ], + [ + -123.14710235595703, + 49.24340438749529 + ], + [ + -123.14717864990234, + 49.243568419477725 + ], + [ + -123.14726257324219, + 49.24372863676288 + ], + [ + -123.14736938476562, + 49.24388503935077 + ], + [ + -123.15238189697264, + 49.250621794721894 + ], + [ + -123.1524658203125, + 49.25074767973165 + ], + [ + -123.15254211425781, + 49.2508773794387 + ], + [ + -123.1526107788086, + 49.251007079145715 + ], + [ + -123.15266418457031, + 49.25114059355003 + ], + [ + -123.1527099609375, + 49.25127792265159 + ], + [ + -123.15274047851561, + 49.25141525175315 + ], + [ + -123.1527633666992, + 49.25155258085472 + ], + [ + -123.15277099609375, + 49.25169372465353 + ], + [ + -123.1527633666992, + 49.25183105375512 + ], + [ + -123.15259552001952, + 49.25722503568872 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.16166923820482, + "lat": 49.24680490982789 + } + }, + { + "name": "Grandview-Woodland", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.07701873779298, + 49.29024886991739 + ], + [ + -123.06777954101562, + 49.290103911421305 + ], + [ + -123.06262207031251, + 49.289535521528734 + ], + [ + -123.06242370605469, + 49.290874480268954 + ], + [ + -123.05648803710938, + 49.29348754789594 + ], + [ + -123.05658721923827, + 49.26217651273953 + ], + [ + -123.07746887207033, + 49.262336730024685 + ], + [ + -123.07741546630858, + 49.26514053251494 + ], + [ + -123.07701873779298, + 49.29024886991739 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.06672822103268, + "lat": 49.27643960930463 + } + }, + { + "name": "Kensington-Cedar Cottage", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.05658721923827, + 49.26198196317898 + ], + [ + -123.05662536621094, + 49.24317550565935 + ], + [ + -123.05811309814453, + 49.24182891752458 + ], + [ + -123.05819702148436, + 49.24175262357927 + ], + [ + -123.0582733154297, + 49.241672514936695 + ], + [ + -123.05834197998048, + 49.241588591596845 + ], + [ + -123.05841064453124, + 49.24150466825701 + ], + [ + -123.0584716796875, + 49.2414169302199 + ], + [ + -123.05851745605469, + 49.24132537748552 + ], + [ + -123.05856323242188, + 49.24123763944841 + ], + [ + -123.05860137939455, + 49.24114227201677 + ], + [ + -123.05862426757811, + 49.241050719282406 + ], + [ + -123.0586471557617, + 49.24095535185075 + ], + [ + -123.05866241455078, + 49.24085998441911 + ], + [ + -123.0586700439453, + 49.24076461698748 + ], + [ + -123.05885314941406, + 49.23280715849134 + ], + [ + -123.06444549560548, + 49.23286437895032 + ], + [ + -123.06674194335938, + 49.23255538847181 + ], + [ + -123.07703399658203, + 49.232666014692505 + ], + [ + -123.09053802490233, + 49.23282241728041 + ], + [ + -123.08984375, + 49.25637817289576 + ], + [ + -123.07779693603514, + 49.25619888212427 + ], + [ + -123.07778930664062, + 49.256633757612555 + ], + [ + -123.07758331298827, + 49.256626128218016 + ], + [ + -123.07746887207033, + 49.262336730024685 + ], + [ + -123.05658721923827, + 49.26217651273953 + ], + [ + -123.05658721923827, + 49.26198196317898 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.07288459215947, + "lat": 49.246686446286056 + } + }, + { + "name": "Killarney", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.02355957031249, + 49.20014572050289 + ], + [ + -123.03997802734375, + 49.203960417768535 + ], + [ + -123.04232025146484, + 49.20400237943846 + ], + [ + -123.0568313598633, + 49.20420074369628 + ], + [ + -123.05684661865233, + 49.20718383695801 + ], + [ + -123.05683898925781, + 49.20729446317871 + ], + [ + -123.05682373046874, + 49.20740508939943 + ], + [ + -123.0568084716797, + 49.207515715620126 + ], + [ + -123.05677795410155, + 49.20762252714357 + ], + [ + -123.05673217773436, + 49.207729338666994 + ], + [ + -123.0566864013672, + 49.207836150190424 + ], + [ + -123.05663299560547, + 49.20794296171388 + ], + [ + -123.05656433105467, + 49.20804214384277 + ], + [ + -123.05649566650389, + 49.20814132597169 + ], + [ + -123.05641174316406, + 49.20824050810059 + ], + [ + -123.05604553222655, + 49.20868682768068 + ], + [ + -123.05572509765625, + 49.209148406049835 + ], + [ + -123.05545806884767, + 49.20962524320802 + ], + [ + -123.05509948730467, + 49.2118949880811 + ], + [ + -123.05507659912108, + 49.21202087309085 + ], + [ + -123.05503845214844, + 49.212146758100616 + ], + [ + -123.05499267578125, + 49.212268828413116 + ], + [ + -123.05493164062499, + 49.212390898725616 + ], + [ + -123.0548629760742, + 49.21251296903813 + ], + [ + -123.0547866821289, + 49.212627409956085 + ], + [ + -123.05469512939452, + 49.21274185087406 + ], + [ + -123.05459594726562, + 49.21285247709476 + ], + [ + -123.0544891357422, + 49.2129592886182 + ], + [ + -123.05437469482422, + 49.21306228544437 + ], + [ + -123.05175018310547, + 49.21535491850101 + ], + [ + -123.05153656005861, + 49.21555709745609 + ], + [ + -123.05133819580077, + 49.21576690580571 + ], + [ + -123.05115509033205, + 49.21598434354985 + ], + [ + -123.05099487304688, + 49.21620941068854 + ], + [ + -123.05085754394531, + 49.216442107221724 + ], + [ + -123.05073547363281, + 49.216674803754955 + ], + [ + -123.05063629150392, + 49.216915129682675 + ], + [ + -123.05055999755858, + 49.21715927030766 + ], + [ + -123.0500717163086, + 49.229293822309685 + ], + [ + -123.0488052368164, + 49.229293822309685 + ], + [ + -123.04875183105469, + 49.23275375272962 + ], + [ + -123.0467071533203, + 49.23288726713391 + ], + [ + -123.03839874267578, + 49.232872008344856 + ], + [ + -123.0383071899414, + 49.232860564253045 + ], + [ + -123.03821563720703, + 49.23285293485854 + ], + [ + -123.03811645507812, + 49.232845305464 + ], + [ + -123.03802490234375, + 49.23284530546399 + ], + [ + -123.03792572021484, + 49.23284530546398 + ], + [ + -123.03783416748047, + 49.23284912016127 + ], + [ + -123.0377426147461, + 49.232856749555786 + ], + [ + -123.0376510620117, + 49.23286819364759 + ], + [ + -123.03755950927733, + 49.23288345243665 + ], + [ + -123.03746795654298, + 49.23289871122571 + ], + [ + -123.0373764038086, + 49.232921599409316 + ], + [ + -123.03728485107422, + 49.2329444875929 + ], + [ + -123.03720092773436, + 49.23297119047376 + ], + [ + -123.03711700439453, + 49.23299789335462 + ], + [ + -123.03704071044923, + 49.23303222563003 + ], + [ + -123.03695678710938, + 49.2330665579054 + ], + [ + -123.0368881225586, + 49.233104704878066 + ], + [ + -123.03681182861328, + 49.23314285185071 + ], + [ + -123.0367431640625, + 49.23318481352066 + ], + [ + -123.03667449951172, + 49.233230589887825 + ], + [ + -123.03661346435545, + 49.23327636625501 + ], + [ + -123.03656005859375, + 49.23332595731947 + ], + [ + -123.03650665283203, + 49.23337936308118 + ], + [ + -123.03645324707033, + 49.23342895414565 + ], + [ + -123.03585815429689, + 49.23410415556167 + ], + [ + -123.03250885009766, + 49.23235320951673 + ], + [ + -123.03236389160158, + 49.23228454496595 + ], + [ + -123.03221130371094, + 49.2322235098097 + ], + [ + -123.03205871582031, + 49.232166289350715 + ], + [ + -123.03189849853516, + 49.23211669828626 + ], + [ + -123.03173065185547, + 49.232070921919075 + ], + [ + -123.03156280517578, + 49.232028960249146 + ], + [ + -123.0313949584961, + 49.23199844267102 + ], + [ + -123.03122711181642, + 49.231971739790175 + ], + [ + -123.03105163574219, + 49.23194885160657 + ], + [ + -123.03086853027342, + 49.231937407514785 + ], + [ + -123.03069305419922, + 49.23192977812023 + ], + [ + -123.03051757812501, + 49.23192977812023 + ], + [ + -123.03034210205078, + 49.231933592817505 + ], + [ + -123.02356719970705, + 49.23226928617689 + ], + [ + -123.02326202392578, + 49.20940780546388 + ], + [ + -123.02355957031249, + 49.20014572050289 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.03764702895802, + "lat": 49.21702167079743 + } + }, + { + "name": "Kitsilano", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.13768005371092, + 49.27531814481966 + ], + [ + -123.14374542236328, + 49.27323150541536 + ], + [ + -123.14389801025389, + 49.273178099653656 + ], + [ + -123.14404296875001, + 49.27311706449739 + ], + [ + -123.14418792724611, + 49.273052214643876 + ], + [ + -123.14432525634767, + 49.272983550093095 + ], + [ + -123.14445495605469, + 49.27291107084505 + ], + [ + -123.1445846557617, + 49.27283096220247 + ], + [ + -123.14469909667967, + 49.27274703886264 + ], + [ + -123.14481353759766, + 49.27265930082552 + ], + [ + -123.14491271972655, + 49.27256774809115 + ], + [ + -123.14500427246094, + 49.272472380659494 + ], + [ + -123.14509582519531, + 49.27237319853059 + ], + [ + -123.14517211914061, + 49.27227401640169 + ], + [ + -123.1452407836914, + 49.27217101957552 + ], + [ + -123.14530181884766, + 49.272064208052086 + ], + [ + -123.14535522460938, + 49.27195739652865 + ], + [ + -123.14540100097656, + 49.271846770307945 + ], + [ + -123.14598846435547, + 49.25712203886255 + ], + [ + -123.16487884521484, + 49.25741958524926 + ], + [ + -123.16487884521484, + 49.25756835844264 + ], + [ + -123.18399047851561, + 49.257865904829366 + ], + [ + -123.18392944335939, + 49.25976562406764 + ], + [ + -123.18593597412111, + 49.26113891508327 + ], + [ + -123.18548583984376, + 49.2749710073685 + ], + [ + -123.17374420166016, + 49.274341582319664 + ], + [ + -123.16479492187499, + 49.27556610014193 + ], + [ + -123.15970611572266, + 49.27554702665561 + ], + [ + -123.15265655517578, + 49.28030776884313 + ], + [ + -123.14600372314455, + 49.280315398237654 + ], + [ + -123.14358520507812, + 49.279666899702505 + ], + [ + -123.1412582397461, + 49.27829360868688 + ], + [ + -123.13768005371092, + 49.27531814481966 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.16329474017252, + "lat": 49.26753984848691 + } + }, + { + "name": "Strathcona", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.0992889404297, + 49.289272307417406 + ], + [ + -123.09390258789064, + 49.29051589872601 + ], + [ + -123.07701873779298, + 49.29024886991739 + ], + [ + -123.07741546630858, + 49.26514053251494 + ], + [ + -123.08094787597656, + 49.265155791304 + ], + [ + -123.08120727539064, + 49.265171050093066 + ], + [ + -123.08145904541014, + 49.265193938276646 + ], + [ + -123.08171081542969, + 49.26522445585478 + ], + [ + -123.08196258544923, + 49.26527023222196 + ], + [ + -123.08874511718751, + 49.26657867338409 + ], + [ + -123.08895111083984, + 49.266624449751276 + ], + [ + -123.08915710449219, + 49.26665878202664 + ], + [ + -123.08936309814455, + 49.2666892996048 + ], + [ + -123.08956909179686, + 49.26670837309112 + ], + [ + -123.08978271484374, + 49.26672363188019 + ], + [ + -123.08999633789061, + 49.26672744657744 + ], + [ + -123.09612274169923, + 49.266769408247356 + ], + [ + -123.09619903564453, + 49.2667770376419 + ], + [ + -123.09628295898436, + 49.266788481733705 + ], + [ + -123.0963592529297, + 49.266803740522754 + ], + [ + -123.096435546875, + 49.266818999311816 + ], + [ + -123.09651184082031, + 49.26683807279815 + ], + [ + -123.09658813476561, + 49.26686096098174 + ], + [ + -123.0966567993164, + 49.266883849165325 + ], + [ + -123.09672546386719, + 49.266910552046184 + ], + [ + -123.09679412841797, + 49.266941069624316 + ], + [ + -123.09686279296875, + 49.26697158720244 + ], + [ + -123.09692382812501, + 49.26700591947784 + ], + [ + -123.10066986083984, + 49.269130705854806 + ], + [ + -123.10060119628906, + 49.270889281294274 + ], + [ + -123.10003662109375, + 49.271923064253244 + ], + [ + -123.09999847412111, + 49.272750853559906 + ], + [ + -123.0992889404297, + 49.289272307417406 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.08823528054062, + "lat": 49.27821957764724 + } + }, + { + "name": "Sunset", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.10696411132812, + 49.20415878202636 + ], + [ + -123.10616302490233, + 49.21887588407721 + ], + [ + -123.10562133789061, + 49.23311614896985 + ], + [ + -123.09053802490233, + 49.23282241728041 + ], + [ + -123.07703399658203, + 49.232666014692505 + ], + [ + -123.07742309570314, + 49.21997070219244 + ], + [ + -123.07701110839844, + 49.21918487455574 + ], + [ + -123.0771484375, + 49.207614897749025 + ], + [ + -123.07750701904297, + 49.20756149198732 + ], + [ + -123.07786560058592, + 49.2074966421338 + ], + [ + -123.07821655273438, + 49.207420348188485 + ], + [ + -123.07855987548828, + 49.20733261015138 + ], + [ + -123.07889556884766, + 49.20723342802246 + ], + [ + -123.0792236328125, + 49.20712280180177 + ], + [ + -123.0799560546875, + 49.206874846479494 + ], + [ + -123.08071899414062, + 49.206661223432626 + ], + [ + -123.08149719238281, + 49.206478117963876 + ], + [ + -123.08839416503908, + 49.204776762983386 + ], + [ + -123.08956146240234, + 49.204444884321276 + ], + [ + -123.08972930908203, + 49.204383849165026 + ], + [ + -123.0898971557617, + 49.204326628706035 + ], + [ + -123.09007263183595, + 49.2042770376416 + ], + [ + -123.09024810791016, + 49.20423507597168 + ], + [ + -123.0904312133789, + 49.20419692899901 + ], + [ + -123.09061431884767, + 49.20416641142089 + ], + [ + -123.09079742431639, + 49.20414352323731 + ], + [ + -123.09098815917967, + 49.204124449750964 + ], + [ + -123.09117126464844, + 49.20411682035643 + ], + [ + -123.09136199951172, + 49.204113005659174 + ], + [ + -123.10379028320312, + 49.20408248808105 + ], + [ + -123.10507202148438, + 49.204071043989245 + ], + [ + -123.10635375976561, + 49.2041206350537 + ], + [ + -123.10696411132812, + 49.20415878202636 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.09203800098149, + "lat": 49.21875615053907 + } + }, + { + "name": "West Point Grey", + "geom": { + "type": "Feature", + "geometry": { + "coordinates": [ + [ + [ + -123.22444915771486, + 49.2789230337357 + ], + [ + -123.2051544189453, + 49.27805709745641 + ], + [ + -123.18941497802734, + 49.27521514799351 + ], + [ + -123.18548583984376, + 49.2749710073685 + ], + [ + -123.18550109863281, + 49.27325439359895 + ], + [ + -123.18594360351562, + 49.26113891508327 + ], + [ + -123.18392944335939, + 49.25976562406764 + ], + [ + -123.18399047851561, + 49.257865904829366 + ], + [ + -123.20321655273439, + 49.258148192427015 + ], + [ + -123.21538543701172, + 49.25833129789575 + ], + [ + -123.21508789062501, + 49.26735687162627 + ], + [ + -123.21713256835938, + 49.2673339834427 + ], + [ + -123.2183837890625, + 49.26725006010284 + ], + [ + -123.21961975097655, + 49.267108916304004 + ], + [ + -123.21962738037111, + 49.26882934477082 + ], + [ + -123.22189331054689, + 49.26853942777862 + ], + [ + -123.22174835205077, + 49.27025985624544 + ], + [ + -123.22431945800781, + 49.272266387007164 + ], + [ + -123.22484588623045, + 49.274654387495445 + ], + [ + -123.22457122802734, + 49.27789688017126 + ], + [ + -123.22444915771486, + 49.2789230337357 + ] + ] + ], + "type": "Polygon" + }, + "properties": {} + }, + "geo_point_2d": { + "lon": -123.20346748255886, + "lat": 49.268401210185914 + } + } +] \ No newline at end of file diff --git a/lib/tasks/fake_data/analytics.rake b/lib/tasks/fake_data/analytics.rake index d52b83c3..d95e5f54 100644 --- a/lib/tasks/fake_data/analytics.rake +++ b/lib/tasks/fake_data/analytics.rake @@ -9,33 +9,37 @@ namespace :fake_data do facility_ids = Facility.all.ids - 100.times.each do |n| - created_at = rand(90).days.ago - uuid = SecureRandom.hex - session_id = SecureRandom.hex - - visit = Analytics::Visit.create_with(created_at: created_at) - .find_or_create_by!(uuid: uuid, - session_id: session_id) - created_at = visit.created_at - - rand(1..5).times.each do - event_date = rand(120).minutes.after(created_at) - event = visit.events.create!(controller_name: 'api/facilities', - action_name: 'index', - lat: rand(49.260635..49.305427), - long: rand(-123.176651..-123.056488), - request_url: '/api/facilities', - request_ip: Faker::Internet.ip_v4_address, - request_params: { search: 'a search text'}, - created_at: event_date) - - - n = rand(1..10) - ids_to_filter = facility_ids.sample(n) - Facility.where(id: ids_to_filter).find_each do |facility| - event.impressions.create!(impressionable: facility, - created_at: event_date) + start_date = 1.day.ago + 30.times.each do |n| + created_at = start_date + n.days + x = n+1 + puts "Creating #{x} visits" + x.times.each do + uuid = SecureRandom.hex + session_id = SecureRandom.hex + visit = Analytics::Visit.create_with(created_at: created_at) + .find_or_create_by!(uuid: uuid, + session_id: session_id) + created_at = visit.created_at + + rand(1..4).times.each do + event_date = rand(120).minutes.after(created_at) + event = visit.events.create!(controller_name: 'api/facilities', + action_name: 'index', + lat: rand(49.260635..49.305427), + long: rand(-123.176651..-123.056488), + request_url: '/api/facilities', + request_ip: Faker::Internet.ip_v4_address, + request_params: { search: 'a search text'}, + created_at: event_date) + + + n = rand(1..10) + ids_to_filter = facility_ids.sample(n) + Facility.where(id: ids_to_filter).find_each do |facility| + event.impressions.create!(impressionable: facility, + created_at: event_date) + end end end From 62419918b134449788fff9ccf43f7c8d7175e182 Mon Sep 17 00:00:00 2001 From: jstet Date: Sun, 4 Feb 2024 16:47:08 +0100 Subject: [PATCH 16/16] clean up --- Gemfile | 4 +- Gemfile.lock | 14 - app/controllers/admin/dashboard_controller.rb | 51 +- app/models/analytics/event.rb | 1 - lib/assets/local-area-boundary.json | 5258 ----------------- lib/tasks/fake_data/analytics.rake | 12 +- 6 files changed, 15 insertions(+), 5325 deletions(-) delete mode 100644 lib/assets/local-area-boundary.json diff --git a/Gemfile b/Gemfile index 9163a4fc..82afddcd 100644 --- a/Gemfile +++ b/Gemfile @@ -118,7 +118,5 @@ gem "cssbundling-rails", "~> 1.1" # Set the timeout by setting the RACK_TIMEOUT_SERVICE_TIMEOUT env var gem "rack-timeout" -gem "hotwire-livereload", "~> 1.3", :group => :development - gem "groupdate" -gem "prophet-rb" + diff --git a/Gemfile.lock b/Gemfile.lock index fb227857..3c8ffe51 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -97,7 +97,6 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - cmdstan (0.3.0) coderay (1.1.3) colorize (1.1.0) concurrent-ruby (1.2.2) @@ -128,10 +127,6 @@ GEM activesupport (>= 5.0) groupdate (6.4.0) activesupport (>= 6.1) - hotwire-livereload (1.3.0) - actioncable (>= 6.0.0) - listen (>= 3.0.0) - railties (>= 6.0.0) hotwire-rails (0.1.3) rails (>= 6.0.0) stimulus-rails @@ -178,7 +173,6 @@ GEM racc (~> 1.4) nokogiri (1.15.3-x86_64-linux) racc (~> 1.4) - numo-narray (0.9.2.1) orm_adapter (0.5.0) pagy (5.10.1) activesupport @@ -187,10 +181,6 @@ GEM ast (~> 2.4.1) racc pg (1.4.6) - prophet-rb (0.5.0) - cmdstan (>= 0.2) - numo-narray (>= 0.9.1.7) - rover-df pry (0.13.1) coderay (~> 1.1) method_source (~> 1.0) @@ -259,8 +249,6 @@ GEM railties (>= 5.2) rexml (3.2.5) rouge (4.1.2) - rover-df (0.3.4) - numo-narray (>= 0.9.1.9) rspec-core (3.12.2) rspec-support (~> 3.12.0) rspec-expectations (3.12.3) @@ -381,7 +369,6 @@ DEPENDENCIES geocoder (~> 1.6) groupdate haversine! - hotwire-livereload (~> 1.3) hotwire-rails inline_svg jsbundling-rails (~> 1.0) @@ -390,7 +377,6 @@ DEPENDENCIES memory_profiler pagy (~> 5.10.1) pg (~> 1.4.4) - prophet-rb pry (~> 0.13.1) pry-byebug pry-rails diff --git a/app/controllers/admin/dashboard_controller.rb b/app/controllers/admin/dashboard_controller.rb index c064682d..9efa0d12 100644 --- a/app/controllers/admin/dashboard_controller.rb +++ b/app/controllers/admin/dashboard_controller.rb @@ -1,57 +1,22 @@ require 'json' -require 'prophet-rb' -require 'rover' class Admin::DashboardController < Admin::BaseController def index end - def districts - - # https://gist.github.com/kidbrax/1236253 - - # Read the JSON file - json_file_path = Rails.root.join('lib', 'assets', 'local-area-boundary.json') - polygons = [] - - json_data = File.read(json_file_path) - - data = eval(json_data) - - data.each do |row| - points = [] - geom = row[:geom] - geom[:geometry][:coordinates][0].each do |coord| - points << [coord[0], coord[1]] - end - - polygons << points - end - - end - # https://guides.rubyonrails.org/active_record_querying.html#retrieving-objects-from-the-database def timeseries impressions = Analytics::Visit.all - visits_per_day = impressions.group_by_day(:created_at).count - visits_per_day_transformed = visits_per_day.transform_keys { |date| date.strftime('%Y-%m-%d') }.to_a.map { |date, count| { 'ds' => date, 'y' => count } } - df = Rover::DataFrame.new(visits_per_day_transformed) - m = Prophet.new - m.fit(df) - future = m.make_future_dataframe(periods: 14) - forecast = m.predict(future).to_a - - time_series_json = forecast.zip(visits_per_day_transformed).map do |forecast_row, visits_per_day_row| - { - date: forecast_row["ds"], - pred: forecast_row["yhat"], - actual: visits_per_day_row&.fetch("y", nil) - } - end + visits_per_day = visits_per_day.map do |date, count| + { + date: date.strftime('%Y-%m-%d'), + count: count + } + end - render json: time_series_json + render json: visits_per_day.to_json end def heatmap data = {} @@ -95,6 +60,6 @@ def heatmap private def heatmap_params - params.permit(:service) + params.permit(:service,:format) end end \ No newline at end of file diff --git a/app/models/analytics/event.rb b/app/models/analytics/event.rb index 654767b1..fb84bf7c 100644 --- a/app/models/analytics/event.rb +++ b/app/models/analytics/event.rb @@ -5,7 +5,6 @@ class Analytics::Event < ApplicationRecord has_many :impressions, dependent: :destroy has_many :impressionables, through: :impressions, source: :impressionable - has_many :facilities, through: :impressions, source: :impressionable, source_type: "Facility" diff --git a/lib/assets/local-area-boundary.json b/lib/assets/local-area-boundary.json deleted file mode 100644 index 4b4cc384..00000000 --- a/lib/assets/local-area-boundary.json +++ /dev/null @@ -1,5258 +0,0 @@ -[ - { - "name": "Downtown", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.11226654052733, - 49.29016494657755 - ], - [ - -123.10424041748047, - 49.288166045210374 - ], - [ - -123.0992889404297, - 49.289272307417406 - ], - [ - -123.09999847412111, - 49.272750853559906 - ], - [ - -123.10169982910158, - 49.27297210600129 - ], - [ - -123.11107635498047, - 49.272926329634096 - ], - [ - -123.11444854736328, - 49.2717742910599 - ], - [ - -123.12116241455078, - 49.26953887846223 - ], - [ - -123.12928009033203, - 49.2695312490677 - ], - [ - -123.13768005371092, - 49.27531814481966 - ], - [ - -123.13233184814453, - 49.276931761763024 - ], - [ - -123.12109375, - 49.28436660673378 - ], - [ - -123.13668060302734, - 49.29445648100141 - ], - [ - -123.13468933105469, - 49.295810698530715 - ], - [ - -123.12271118164062, - 49.291500090620545 - ], - [ - -123.11226654052733, - 49.29016494657755 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.11656700827415, - "lat": 49.28074707013743 - } - }, - { - "name": "Hastings-Sunrise", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.05648803710938, - 49.29348754789594 - ], - [ - -123.0519027709961, - 49.294147490522896 - ], - [ - -123.046630859375, - 49.29418182279827 - ], - [ - -123.03739166259764, - 49.29273223783734 - ], - [ - -123.02320098876953, - 49.29353332426313 - ], - [ - -123.02323150634764, - 49.29302978422406 - ], - [ - -123.02356719970705, - 49.265525816938755 - ], - [ - -123.02411651611328, - 49.26539993192899 - ], - [ - -123.02464294433594, - 49.265251158735644 - ], - [ - -123.02516937255858, - 49.26508712675322 - ], - [ - -123.02567291259767, - 49.26490402128446 - ], - [ - -123.02616119384764, - 49.26470565702665 - ], - [ - -123.02663421630858, - 49.264492033979785 - ], - [ - -123.02709197998047, - 49.264259337446575 - ], - [ - -123.02753448486327, - 49.264011382124295 - ], - [ - -123.02794647216797, - 49.26375198271025 - ], - [ - -123.02953338623047, - 49.262706755659444 - ], - [ - -123.02969360351562, - 49.26259612943875 - ], - [ - -123.02986145019531, - 49.26249694730984 - ], - [ - -123.03004455566408, - 49.26240157987821 - ], - [ - -123.0302276611328, - 49.26231002714382 - ], - [ - -123.03042602539062, - 49.262229918501255 - ], - [ - -123.03062438964844, - 49.26215362455594 - ], - [ - -123.03083038330078, - 49.26208496000515 - ], - [ - -123.03104400634766, - 49.262027739546156 - ], - [ - -123.03126525878906, - 49.26197433378446 - ], - [ - -123.03148651123048, - 49.261928557417264 - ], - [ - -123.03170776367188, - 49.26189422514187 - ], - [ - -123.03193664550783, - 49.26186370756375 - ], - [ - -123.03216552734374, - 49.26184463407742 - ], - [ - -123.03239440917969, - 49.26183318998563 - ], - [ - -123.03262329101564, - 49.26182937528834 - ], - [ - -123.04424285888672, - 49.26187133695827 - ], - [ - -123.04424285888672, - 49.26193618681179 - ], - [ - -123.05658721923827, - 49.26198196317898 - ], - [ - -123.05658721923827, - 49.26217651273953 - ], - [ - -123.05648803710938, - 49.29348754789594 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.04026992328848, - "lat": 49.27793405209019 - } - }, - { - "name": "Kerrisdale", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.17908477783203, - 49.21555709745609 - ], - [ - -123.1756362915039, - 49.2153701772901 - ], - [ - -123.1721725463867, - 49.215278624555715 - ], - [ - -123.17156982421875, - 49.21524810697758 - ], - [ - -123.17096710205077, - 49.21519851591314 - ], - [ - -123.17037200927734, - 49.21512603666508 - ], - [ - -123.16978454589842, - 49.21503066923345 - ], - [ - -123.16920471191406, - 49.214916228315474 - ], - [ - -123.16864013671875, - 49.21477889921392 - ], - [ - -123.1680908203125, - 49.21461868192875 - ], - [ - -123.16754913330078, - 49.21443939115727 - ], - [ - -123.16702270507814, - 49.21424102689946 - ], - [ - -123.16651916503906, - 49.214019774458045 - ], - [ - -123.16598510742189, - 49.21378707792485 - ], - [ - -123.1654281616211, - 49.213577269575225 - ], - [ - -123.16484832763673, - 49.21339034940923 - ], - [ - -123.16425323486327, - 49.2132263174268 - ], - [ - -123.16365051269531, - 49.21308517362796 - ], - [ - -123.1631088256836, - 49.21296310331547 - ], - [ - -123.16258239746094, - 49.212821959516624 - ], - [ - -123.16207122802734, - 49.21266174223147 - ], - [ - -123.16156768798828, - 49.212486266157256 - ], - [ - -123.16108703613283, - 49.2122917165967 - ], - [ - -123.16061401367186, - 49.2120819082471 - ], - [ - -123.16016387939452, - 49.21185302641114 - ], - [ - -123.15972900390625, - 49.21161270048341 - ], - [ - -123.15931701660158, - 49.21135711576663 - ], - [ - -123.15892791748047, - 49.21108627226078 - ], - [ - -123.15856170654298, - 49.210803984663116 - ], - [ - -123.15821075439453, - 49.21050643827639 - ], - [ - -123.1578903198242, - 49.21020126249515 - ], - [ - -123.15760040283203, - 49.20988082792483 - ], - [ - -123.15755462646484, - 49.20983123686036 - ], - [ - -123.15750122070312, - 49.20978546049318 - ], - [ - -123.15744781494142, - 49.209739684126 - ], - [ - -123.15738677978516, - 49.2096939077588 - ], - [ - -123.15732574462889, - 49.20965194608889 - ], - [ - -123.15726470947266, - 49.20961379911622 - ], - [ - -123.15719604492188, - 49.20957565214357 - ], - [ - -123.1571273803711, - 49.20954131986817 - ], - [ - -123.15705108642578, - 49.20950698759279 - ], - [ - -123.15697479248048, - 49.20948028471193 - ], - [ - -123.15689849853514, - 49.20945358183106 - ], - [ - -123.15681457519531, - 49.209426878950225 - ], - [ - -123.15673065185547, - 49.20940780546388 - ], - [ - -123.15664672851564, - 49.209388731977555 - ], - [ - -123.15656280517578, - 49.209373473188485 - ], - [ - -123.1564712524414, - 49.20936202909669 - ], - [ - -123.15638732910158, - 49.209354399702185 - ], - [ - -123.15629577636719, - 49.209342955610374 - ], - [ - -123.15621185302733, - 49.20933151151858 - ], - [ - -123.15612030029295, - 49.20931625272949 - ], - [ - -123.15603637695312, - 49.20929717924319 - ], - [ - -123.15595245361327, - 49.20927429105959 - ], - [ - -123.15588378906249, - 49.20925140287599 - ], - [ - -123.15581512451173, - 49.20922469999514 - ], - [ - -123.15574645996095, - 49.209197997114266 - ], - [ - -123.15567779541017, - 49.209167479536156 - ], - [ - -123.1556167602539, - 49.20913314726076 - ], - [ - -123.15555572509767, - 49.209098814985374 - ], - [ - -123.1554946899414, - 49.209064482709984 - ], - [ - -123.1554412841797, - 49.209026335737306 - ], - [ - -123.15538787841795, - 49.20898437406741 - ], - [ - -123.1553421020508, - 49.208942412397484 - ], - [ - -123.15529632568361, - 49.20890045072756 - ], - [ - -123.15291595458984, - 49.207023619672846 - ], - [ - -123.15283966064455, - 49.206958769819344 - ], - [ - -123.1527633666992, - 49.20689010526856 - ], - [ - -123.15270233154297, - 49.20682144071779 - ], - [ - -123.15264129638672, - 49.20674896146973 - ], - [ - -123.152587890625, - 49.20667266752441 - ], - [ - -123.15253448486328, - 49.2065963735791 - ], - [ - -123.15249633789062, - 49.20652007963378 - ], - [ - -123.1524658203125, - 49.206439970991205 - ], - [ - -123.15243530273439, - 49.20635986234864 - ], - [ - -123.15242004394531, - 49.20627593900879 - ], - [ - -123.1523895263672, - 49.20619201566895 - ], - [ - -123.15235900878905, - 49.20610809232911 - ], - [ - -123.15231323242186, - 49.206027983686525 - ], - [ - -123.15226745605467, - 49.20594406034669 - ], - [ - -123.15221405029297, - 49.205867766401376 - ], - [ - -123.15215301513673, - 49.20579147245605 - ], - [ - -123.15208435058595, - 49.20571517851075 - ], - [ - -123.15201568603516, - 49.20564269926269 - ], - [ - -123.15193939208986, - 49.205574034711894 - ], - [ - -123.15185546875, - 49.205505370161134 - ], - [ - -123.15176391601562, - 49.205440520307626 - ], - [ - -123.15167236328125, - 49.20537948515137 - ], - [ - -123.15157318115234, - 49.20532226469239 - ], - [ - -123.15146636962892, - 49.20526885893066 - ], - [ - -123.15135955810547, - 49.20521926786621 - ], - [ - -123.14993286132814, - 49.20480346586425 - ], - [ - -123.14884948730469, - 49.20867156889163 - ], - [ - -123.14817810058592, - 49.20894622709474 - ], - [ - -123.1486587524414, - 49.209461211225616 - ], - [ - -123.14823913574219, - 49.21940231229987 - ], - [ - -123.14015197753906, - 49.21930694486822 - ], - [ - -123.13959503173827, - 49.234272002241354 - ], - [ - -123.15527343750001, - 49.23452377226088 - ], - [ - -123.17024993896484, - 49.234703063032356 - ], - [ - -123.17870330810548, - 49.234722136518705 - ], - [ - -123.17908477783203, - 49.21555709745609 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.15957618168902, - "lat": 49.22365548461882 - } - }, - { - "name": "Marpole", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.10696411132812, - 49.20415878202636 - ], - [ - -123.11153411865233, - 49.204444884321276 - ], - [ - -123.11196899414062, - 49.20445632841307 - ], - [ - -123.11240386962889, - 49.2044525137158 - ], - [ - -123.1128387451172, - 49.20442962553223 - ], - [ - -123.11327362060547, - 49.204391478559565 - ], - [ - -123.11370086669922, - 49.20433425810057 - ], - [ - -123.11412048339844, - 49.204261778852526 - ], - [ - -123.11453247070311, - 49.20417404081542 - ], - [ - -123.11718750000001, - 49.20354843046385 - ], - [ - -123.117431640625, - 49.2034759512158 - ], - [ - -123.11766052246095, - 49.20339202787596 - ], - [ - -123.11788940429686, - 49.203300475141575 - ], - [ - -123.1181106567383, - 49.203201293012675 - ], - [ - -123.11832427978517, - 49.20309448148924 - ], - [ - -123.11852264404297, - 49.20298004057127 - ], - [ - -123.11872100830077, - 49.20285797025877 - ], - [ - -123.11890411376953, - 49.202732085249 - ], - [ - -123.1190719604492, - 49.20259857084472 - ], - [ - -123.11923217773438, - 49.202457427045886 - ], - [ - -123.11938476562501, - 49.202312468549785 - ], - [ - -123.11952209472655, - 49.20215988065917 - ], - [ - -123.1196517944336, - 49.202014922163066 - ], - [ - -123.11979675292969, - 49.20187759306151 - ], - [ - -123.11995697021484, - 49.20174026395994 - ], - [ - -123.12012481689453, - 49.20161056425293 - ], - [ - -123.12030029296874, - 49.20148849394041 - ], - [ - -123.12049102783202, - 49.201374053022434 - ], - [ - -123.1206817626953, - 49.20126342680174 - ], - [ - -123.12088775634766, - 49.20116424467283 - ], - [ - -123.12110900878905, - 49.201068877241184 - ], - [ - -123.12133026123047, - 49.200981139204075 - ], - [ - -123.12155914306642, - 49.20090484525876 - ], - [ - -123.12179565429689, - 49.200836180707995 - ], - [ - -123.12785339355469, - 49.19917297270016 - ], - [ - -123.12913513183594, - 49.19904327299313 - ], - [ - -123.13042449951173, - 49.19896697904782 - ], - [ - -123.13172149658202, - 49.19894027616696 - ], - [ - -123.13396453857422, - 49.1989364614697 - ], - [ - -123.13463592529298, - 49.1989364614697 - ], - [ - -123.13531494140624, - 49.19896316435055 - ], - [ - -123.135986328125, - 49.19901657011227 - ], - [ - -123.13718414306639, - 49.199142455122036 - ], - [ - -123.13775634765626, - 49.199268340131795 - ], - [ - -123.13831329345703, - 49.19941329862788 - ], - [ - -123.13885498046875, - 49.19957733061033 - ], - [ - -123.13938903808595, - 49.19976043607905 - ], - [ - -123.13990783691408, - 49.199962615034146 - ], - [ - -123.14040374755861, - 49.200180052778286 - ], - [ - -123.14088439941406, - 49.20041656400875 - ], - [ - -123.14134979248048, - 49.2006683340283 - ], - [ - -123.14179229736327, - 49.20093536283689 - ], - [ - -123.14220428466797, - 49.20121765043454 - ], - [ - -123.14260101318361, - 49.201515196821276 - ], - [ - -123.14297485351561, - 49.20182418729979 - ], - [ - -123.14328002929686, - 49.20207595731931 - ], - [ - -123.14360809326172, - 49.20231628324705 - ], - [ - -123.14395904541016, - 49.20254516508299 - ], - [ - -123.14432525634767, - 49.20275878812988 - ], - [ - -123.14471435546875, - 49.20295715238768 - ], - [ - -123.1451187133789, - 49.20314407255369 - ], - [ - -123.14553833007812, - 49.203311919233386 - ], - [ - -123.14724731445312, - 49.20394897367675 - ], - [ - -123.14832305908205, - 49.20432281400878 - ], - [ - -123.14993286132814, - 49.20480346586425 - ], - [ - -123.14884948730469, - 49.20867156889163 - ], - [ - -123.14817810058592, - 49.20894622709474 - ], - [ - -123.1486587524414, - 49.209461211225616 - ], - [ - -123.14823913574219, - 49.21940231229987 - ], - [ - -123.14015197753906, - 49.21930694486822 - ], - [ - -123.10616302490233, - 49.21887588407721 - ], - [ - -123.10696411132812, - 49.20415878202636 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.1283816596551, - "lat": 49.21020746567156 - } - }, - { - "name": "Oakridge", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.10562133789061, - 49.23311614896985 - ], - [ - -123.10616302490233, - 49.21887588407721 - ], - [ - -123.14015197753906, - 49.21930694486822 - ], - [ - -123.13959503173827, - 49.234272002241354 - ], - [ - -123.12804412841797, - 49.23390579130386 - ], - [ - -123.10562133789061, - 49.23311614896985 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.12302460370566, - "lat": 49.226403196402856 - } - }, - { - "name": "Riley Park", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.10562133789061, - 49.23311614896985 - ], - [ - -123.1161651611328, - 49.2334899893019 - ], - [ - -123.1159896850586, - 49.23793792631362 - ], - [ - -123.1159896850586, - 49.23800659086442 - ], - [ - -123.11599731445311, - 49.23807907011248 - ], - [ - -123.11600494384767, - 49.238147734663244 - ], - [ - -123.11602783203126, - 49.238216399214025 - ], - [ - -123.11605072021486, - 49.23828506376479 - ], - [ - -123.11608123779297, - 49.23834991361833 - ], - [ - -123.1161117553711, - 49.23841476347185 - ], - [ - -123.11615753173828, - 49.23847961332534 - ], - [ - -123.11620330810547, - 49.23854446317887 - ], - [ - -123.11625671386719, - 49.23860549833511 - ], - [ - -123.11631011962892, - 49.2386627187941 - ], - [ - -123.11811828613281, - 49.24026107694841 - ], - [ - -123.1181640625, - 49.2403068533156 - ], - [ - -123.11820983886719, - 49.240352629682775 - ], - [ - -123.11824798583983, - 49.24040222074724 - ], - [ - -123.1182861328125, - 49.240447997114416 - ], - [ - -123.11831665039061, - 49.240501402876134 - ], - [ - -123.11834716796876, - 49.24055099394059 - ], - [ - -123.11837005615236, - 49.24060439970231 - ], - [ - -123.11839294433595, - 49.24065780546404 - ], - [ - -123.118408203125, - 49.240711211225744 - ], - [ - -123.11842346191406, - 49.24076461698748 - ], - [ - -123.11842346191406, - 49.24081802274919 - ], - [ - -123.1184310913086, - 49.2408714285109 - ], - [ - -123.1184310913086, - 49.24092864896989 - ], - [ - -123.11834716796876, - 49.24274444486833 - ], - [ - -123.11834716796876, - 49.24278640653826 - ], - [ - -123.1183395385742, - 49.242824553510935 - ], - [ - -123.11833190917969, - 49.24286651518085 - ], - [ - -123.11831665039061, - 49.2429046621535 - ], - [ - -123.11830139160156, - 49.242946623823414 - ], - [ - -123.11827850341797, - 49.242984770796085 - ], - [ - -123.11825561523438, - 49.243022917768734 - ], - [ - -123.11823272705078, - 49.24305725004412 - ], - [ - -123.11820220947267, - 49.24309539701677 - ], - [ - -123.11817169189453, - 49.243129729292164 - ], - [ - -123.11813354492189, - 49.24316406156756 - ], - [ - -123.11809539794922, - 49.24319457914568 - ], - [ - -123.11805725097655, - 49.243225096723826 - ], - [ - -123.11801147460936, - 49.24325561430195 - ], - [ - -123.1179656982422, - 49.24328231718279 - ], - [ - -123.11791992187501, - 49.243309020063656 - ], - [ - -123.11635589599608, - 49.244197844526546 - ], - [ - -123.11626434326173, - 49.24425125028827 - ], - [ - -123.11617279052736, - 49.24431228544453 - ], - [ - -123.1160888671875, - 49.24437332060078 - ], - [ - -123.11601257324219, - 49.24443817045429 - ], - [ - -123.11593627929689, - 49.244503020307796 - ], - [ - -123.1158676147461, - 49.244571684858585 - ], - [ - -123.11580657958984, - 49.24464416410664 - ], - [ - -123.11575317382812, - 49.24472045805192 - ], - [ - -123.11569976806642, - 49.24479293729999 - ], - [ - -123.11566162109375, - 49.244873045942576 - ], - [ - -123.11562347412108, - 49.24494933988788 - ], - [ - -123.11559295654297, - 49.24502944853046 - ], - [ - -123.11556243896484, - 49.245109557173045 - ], - [ - -123.11554718017578, - 49.245193480512874 - ], - [ - -123.11553192138673, - 49.24527358915546 - ], - [ - -123.11504364013672, - 49.25687026884301 - ], - [ - -123.08984375, - 49.25637817289576 - ], - [ - -123.09053802490233, - 49.23282241728041 - ], - [ - -123.10562133789061, - 49.23311614896985 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.10314680625231, - "lat": 49.24476647864864 - } - }, - { - "name": "South Cambie", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.1159896850586, - 49.23793792631362 - ], - [ - -123.1161651611328, - 49.2334899893019 - ], - [ - -123.12804412841797, - 49.23390579130386 - ], - [ - -123.12721252441408, - 49.25696945097193 - ], - [ - -123.12721252441408, - 49.25709915067896 - ], - [ - -123.11504364013672, - 49.25687026884301 - ], - [ - -123.11553192138673, - 49.24527358915546 - ], - [ - -123.11554718017578, - 49.245193480512874 - ], - [ - -123.11556243896484, - 49.245109557173045 - ], - [ - -123.11559295654297, - 49.24502944853046 - ], - [ - -123.11562347412108, - 49.24494933988788 - ], - [ - -123.11566162109375, - 49.244873045942576 - ], - [ - -123.11569976806642, - 49.24479293729999 - ], - [ - -123.11575317382812, - 49.24472045805192 - ], - [ - -123.11580657958984, - 49.24464416410664 - ], - [ - -123.1158676147461, - 49.24457549955586 - ], - [ - -123.11593627929689, - 49.244503020307796 - ], - [ - -123.11601257324219, - 49.24443817045429 - ], - [ - -123.1160888671875, - 49.24437332060078 - ], - [ - -123.11617279052736, - 49.24431228544453 - ], - [ - -123.11626434326173, - 49.24425125028827 - ], - [ - -123.11635589599608, - 49.244197844526546 - ], - [ - -123.1181411743164, - 49.24317932035663 - ], - [ - -123.11817932128908, - 49.24314117338396 - ], - [ - -123.11820983886719, - 49.24309921171403 - ], - [ - -123.11824035644531, - 49.24305725004412 - ], - [ - -123.11827087402342, - 49.2430152883742 - ], - [ - -123.11829376220702, - 49.24297332670427 - ], - [ - -123.1183090209961, - 49.242927550337086 - ], - [ - -123.11832427978517, - 49.2428817739699 - ], - [ - -123.1183395385742, - 49.242835997602725 - ], - [ - -123.11834716796876, - 49.24279022123552 - ], - [ - -123.11834716796876, - 49.24274444486833 - ], - [ - -123.1184310913086, - 49.24092864896989 - ], - [ - -123.1184310913086, - 49.2408714285109 - ], - [ - -123.11842346191406, - 49.24081802274919 - ], - [ - -123.11842346191406, - 49.24076461698748 - ], - [ - -123.118408203125, - 49.240711211225744 - ], - [ - -123.11839294433595, - 49.24065780546404 - ], - [ - -123.11837005615236, - 49.24060439970231 - ], - [ - -123.11834716796876, - 49.24055099394059 - ], - [ - -123.11831665039061, - 49.240501402876134 - ], - [ - -123.1182861328125, - 49.240447997114416 - ], - [ - -123.11824798583983, - 49.24040222074724 - ], - [ - -123.11820983886719, - 49.240352629682775 - ], - [ - -123.1181640625, - 49.2403068533156 - ], - [ - -123.11811828613281, - 49.24026107694841 - ], - [ - -123.11631011962892, - 49.2386627187941 - ], - [ - -123.11625671386719, - 49.23861312772965 - ], - [ - -123.11621093749999, - 49.23856353666522 - ], - [ - -123.1161651611328, - 49.23851013090349 - ], - [ - -123.11612701416016, - 49.238456725141766 - ], - [ - -123.11609649658202, - 49.238403319380026 - ], - [ - -123.1160659790039, - 49.23834609892106 - ], - [ - -123.11603546142578, - 49.238292693159345 - ], - [ - -123.11602020263672, - 49.23823165800308 - ], - [ - -123.11600494384767, - 49.23817443754411 - ], - [ - -123.1159896850586, - 49.23811721708512 - ], - [ - -123.11598205566408, - 49.238056181928876 - ], - [ - -123.11598205566408, - 49.23799896146987 - ], - [ - -123.1159896850586, - 49.23793792631362 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.12180091574463, - "lat": 49.245556462368654 - } - }, - { - "name": "Shaughnessy", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.15527343750001, - 49.23452377226088 - ], - [ - -123.15508270263673, - 49.23939895536637 - ], - [ - -123.15507507324219, - 49.23947524931169 - ], - [ - -123.15505981445314, - 49.23955535795426 - ], - [ - -123.15504455566406, - 49.23963165189957 - ], - [ - -123.15502166748047, - 49.23970794584489 - ], - [ - -123.1549835205078, - 49.23978423979019 - ], - [ - -123.15494537353516, - 49.2398605337355 - ], - [ - -123.1549072265625, - 49.23993301298356 - ], - [ - -123.15485382080078, - 49.240005492231596 - ], - [ - -123.15480041503908, - 49.2400741567824 - ], - [ - -123.15473937988281, - 49.240142821333166 - ], - [ - -123.15467071533203, - 49.24020767118668 - ], - [ - -123.15459442138672, - 49.24027252104021 - ], - [ - -123.15451812744142, - 49.24033355619647 - ], - [ - -123.15444183349608, - 49.24039077665544 - ], - [ - -123.15435028076173, - 49.24044418241716 - ], - [ - -123.15425872802736, - 49.24049758817888 - ], - [ - -123.15416717529297, - 49.24054336454608 - ], - [ - -123.15406799316408, - 49.24058914091325 - ], - [ - -123.15396118164062, - 49.24063110258319 - ], - [ - -123.15386199951172, - 49.240669249555836 - ], - [ - -123.15374755859375, - 49.24070358183123 - ], - [ - -123.15364074707033, - 49.240734099409345 - ], - [ - -123.15352630615236, - 49.240760802290225 - ], - [ - -123.15341186523438, - 49.24077987577653 - ], - [ - -123.15328979492189, - 49.24079894926287 - ], - [ - -123.1531753540039, - 49.24081420805194 - ], - [ - -123.15305328369142, - 49.24082183744646 - ], - [ - -123.15293121337892, - 49.240829466840985 - ], - [ - -123.15281677246095, - 49.240829466840985 - ], - [ - -123.15269470214845, - 49.24082565214373 - ], - [ - -123.15257263183592, - 49.24082183744646 - ], - [ - -123.15245819091798, - 49.24081039335467 - ], - [ - -123.15233612060545, - 49.240795134565595 - ], - [ - -123.15222167968751, - 49.240772246382015 - ], - [ - -123.15210723876955, - 49.24074935819842 - ], - [ - -123.15199279785156, - 49.24072265531754 - ], - [ - -123.1500701904297, - 49.24038696195817 - ], - [ - -123.14994049072266, - 49.240367888471845 - ], - [ - -123.14981842041016, - 49.240352629682775 - ], - [ - -123.14968872070311, - 49.24034500028825 - ], - [ - -123.1495590209961, - 49.24033737089373 - ], - [ - -123.14942932128905, - 49.24033355619646 - ], - [ - -123.14929962158203, - 49.24033737089373 - ], - [ - -123.14916992187499, - 49.24034500028825 - ], - [ - -123.14904022216797, - 49.24035644438005 - ], - [ - -123.14891815185547, - 49.24037170316912 - ], - [ - -123.14878845214842, - 49.24039077665544 - ], - [ - -123.14866638183594, - 49.24041366483903 - ], - [ - -123.14854431152344, - 49.24044418241716 - ], - [ - -123.14842224121094, - 49.240474699995275 - ], - [ - -123.14830780029297, - 49.24051284696796 - ], - [ - -123.148193359375, - 49.24055480863786 - ], - [ - -123.14808654785158, - 49.24059677030778 - ], - [ - -123.14797973632812, - 49.24064636137223 - ], - [ - -123.1478729248047, - 49.24069976713394 - ], - [ - -123.14778137207033, - 49.24075317289568 - ], - [ - -123.14768218994142, - 49.24081039335467 - ], - [ - -123.14759826660156, - 49.2408714285109 - ], - [ - -123.1475143432617, - 49.240936278364416 - ], - [ - -123.14743041992188, - 49.24100494291521 - ], - [ - -123.1473617553711, - 49.241073607465985 - ], - [ - -123.14729309082031, - 49.24114608671403 - ], - [ - -123.14723205566405, - 49.24122238065935 - ], - [ - -123.14717864990234, - 49.241298674604664 - ], - [ - -123.14712524414062, - 49.24137496854999 - ], - [ - -123.14708709716795, - 49.24145507719255 - ], - [ - -123.14704895019533, - 49.24153900053239 - ], - [ - -123.14701843261717, - 49.241619109174984 - ], - [ - -123.14699554443358, - 49.24170303251482 - ], - [ - -123.14698028564453, - 49.24178695585467 - ], - [ - -123.14697265624999, - 49.241870879194515 - ], - [ - -123.14696502685547, - 49.24195480253437 - ], - [ - -123.14694976806642, - 49.2425613393996 - ], - [ - -123.14694976806642, - 49.24273300077653 - ], - [ - -123.14697265624999, - 49.242900847456234 - ], - [ - -123.14700317382812, - 49.243072508833194 - ], - [ - -123.14704895019533, - 49.243240355512874 - ], - [ - -123.14710235595703, - 49.24340438749529 - ], - [ - -123.14717864990234, - 49.243568419477725 - ], - [ - -123.14726257324219, - 49.24372863676288 - ], - [ - -123.14736938476562, - 49.24388503935077 - ], - [ - -123.15238189697264, - 49.250621794721894 - ], - [ - -123.1524658203125, - 49.25074767973165 - ], - [ - -123.15254211425781, - 49.2508773794387 - ], - [ - -123.1526107788086, - 49.251007079145715 - ], - [ - -123.15266418457031, - 49.25114059355003 - ], - [ - -123.1527099609375, - 49.25127792265159 - ], - [ - -123.15274047851561, - 49.25141525175315 - ], - [ - -123.1527633666992, - 49.25155258085472 - ], - [ - -123.15277099609375, - 49.25169372465353 - ], - [ - -123.1527633666992, - 49.25183105375512 - ], - [ - -123.15259552001952, - 49.25722503568872 - ], - [ - -123.14598846435547, - 49.25712203886255 - ], - [ - -123.13842010498047, - 49.257007597944586 - ], - [ - -123.1383056640625, - 49.25709915067896 - ], - [ - -123.13819122314453, - 49.257190703413336 - ], - [ - -123.13806152343751, - 49.25727462675319 - ], - [ - -123.13793182373047, - 49.25735473539575 - ], - [ - -123.1377944946289, - 49.25743102934107 - ], - [ - -123.13764953613281, - 49.25750350858911 - ], - [ - -123.13750457763672, - 49.257568358442626 - ], - [ - -123.13735198974611, - 49.25762939359888 - ], - [ - -123.13719177246094, - 49.2576827993606 - ], - [ - -123.13702392578126, - 49.25773239042506 - ], - [ - -123.13685607910158, - 49.257778166792235 - ], - [ - -123.13668823242186, - 49.25781249906764 - ], - [ - -123.13651275634766, - 49.25784683134303 - ], - [ - -123.13633728027345, - 49.257869719526624 - ], - [ - -123.13616180419922, - 49.25788879301295 - ], - [ - -123.13597869873045, - 49.257904051802015 - ], - [ - -123.13565826416016, - 49.257915495893805 - ], - [ - -123.13533782958983, - 49.257915495893805 - ], - [ - -123.13500976562499, - 49.257904051802015 - ], - [ - -123.13468933105469, - 49.2578811636184 - ], - [ - -123.13436889648436, - 49.25784683134303 - ], - [ - -123.1340560913086, - 49.257797240278585 - ], - [ - -123.13374328613281, - 49.25774001981959 - ], - [ - -123.13343811035156, - 49.25767135526882 - ], - [ - -123.13313293457031, - 49.25759124662623 - ], - [ - -123.13284301757812, - 49.25749969389185 - ], - [ - -123.13256072998047, - 49.25739669706567 - ], - [ - -123.13228607177734, - 49.257282256147725 - ], - [ - -123.13201904296875, - 49.25716018583521 - ], - [ - -123.1317672729492, - 49.257030486128194 - ], - [ - -123.12721252441408, - 49.25696945097193 - ], - [ - -123.12804412841797, - 49.23390579130386 - ], - [ - -123.13959503173827, - 49.234272002241354 - ], - [ - -123.15527343750001, - 49.23452377226088 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.13976016672807, - "lat": 49.24568097615458 - } - }, - { - "name": "Victoria-Fraserview", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.0568313598633, - 49.20420074369628 - ], - [ - -123.05846405029298, - 49.2042198171826 - ], - [ - -123.05944824218749, - 49.204242705366205 - ], - [ - -123.06043243408203, - 49.20430374052245 - ], - [ - -123.06140899658203, - 49.20439529325683 - ], - [ - -123.0623779296875, - 49.20452499296387 - ], - [ - -123.06333160400392, - 49.204692839643556 - ], - [ - -123.0642776489258, - 49.20489501859865 - ], - [ - -123.06519317626952, - 49.20512771513184 - ], - [ - -123.0660934448242, - 49.205398558637704 - ], - [ - -123.06697082519533, - 49.20569991972168 - ], - [ - -123.06781768798827, - 49.20603179838379 - ], - [ - -123.06854248046875, - 49.2063407888623 - ], - [ - -123.0688247680664, - 49.20645522978027 - ], - [ - -123.06912231445314, - 49.20655822660646 - ], - [ - -123.06942749023436, - 49.20664977934083 - ], - [ - -123.06974029541017, - 49.2067298879834 - ], - [ - -123.07006072998047, - 49.206794737836915 - ], - [ - -123.07438659667969, - 49.207599638959955 - ], - [ - -123.07478332519531, - 49.207645415327164 - ], - [ - -123.07517242431639, - 49.20767593290528 - ], - [ - -123.07556915283203, - 49.20769500639161 - ], - [ - -123.07596588134766, - 49.20769500639161 - ], - [ - -123.07636260986328, - 49.20768356229981 - ], - [ - -123.07675170898438, - 49.207656859418954 - ], - [ - -123.0771484375, - 49.207614897749025 - ], - [ - -123.07701110839844, - 49.21918487455574 - ], - [ - -123.07742309570314, - 49.21997070219244 - ], - [ - -123.07703399658203, - 49.232666014692505 - ], - [ - -123.06674194335938, - 49.23255538847181 - ], - [ - -123.06444549560548, - 49.23286437895032 - ], - [ - -123.05885314941406, - 49.23280715849134 - ], - [ - -123.04875183105469, - 49.23275375272962 - ], - [ - -123.0488052368164, - 49.229293822309685 - ], - [ - -123.0500717163086, - 49.229293822309685 - ], - [ - -123.05055999755858, - 49.21715927030766 - ], - [ - -123.05063629150392, - 49.216915129682675 - ], - [ - -123.05073547363281, - 49.216674803754955 - ], - [ - -123.05085754394531, - 49.216442107221724 - ], - [ - -123.05099487304688, - 49.21620941068854 - ], - [ - -123.05115509033205, - 49.21598434354985 - ], - [ - -123.05133819580077, - 49.21576690580571 - ], - [ - -123.05153656005861, - 49.21555709745609 - ], - [ - -123.05175018310547, - 49.21535491850101 - ], - [ - -123.05437469482422, - 49.21306228544437 - ], - [ - -123.0544891357422, - 49.2129592886182 - ], - [ - -123.05459594726562, - 49.21285247709476 - ], - [ - -123.05469512939452, - 49.21274185087406 - ], - [ - -123.0547866821289, - 49.212627409956085 - ], - [ - -123.0548629760742, - 49.21251296903813 - ], - [ - -123.05493164062499, - 49.212390898725616 - ], - [ - -123.05499267578125, - 49.212268828413116 - ], - [ - -123.05503845214844, - 49.212146758100616 - ], - [ - -123.05507659912108, - 49.21202087309085 - ], - [ - -123.05509948730467, - 49.2118949880811 - ], - [ - -123.05545806884767, - 49.20962524320802 - ], - [ - -123.05572509765625, - 49.209148406049835 - ], - [ - -123.05604553222655, - 49.20868682768068 - ], - [ - -123.05641174316406, - 49.20824050810059 - ], - [ - -123.05649566650389, - 49.20814132597169 - ], - [ - -123.05656433105467, - 49.20804214384277 - ], - [ - -123.05663299560547, - 49.20794296171388 - ], - [ - -123.0566864013672, - 49.207836150190424 - ], - [ - -123.05673217773436, - 49.207729338666994 - ], - [ - -123.05677795410155, - 49.20762252714357 - ], - [ - -123.0568084716797, - 49.207515715620126 - ], - [ - -123.05682373046874, - 49.20740508939943 - ], - [ - -123.05683898925781, - 49.20729446317871 - ], - [ - -123.05684661865233, - 49.20718383695801 - ], - [ - -123.0568313598633, - 49.20420074369628 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.06413471832595, - "lat": 49.22001194005767 - } - }, - { - "name": "Dunbar-Southlands", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.17016601562501, - 49.24789047147971 - ], - [ - -123.17024993896484, - 49.234703063032356 - ], - [ - -123.17870330810548, - 49.234722136518705 - ], - [ - -123.17909240722656, - 49.21680450346197 - ], - [ - -123.17908477783203, - 49.21555709745609 - ], - [ - -123.17910003662108, - 49.21555709745609 - ], - [ - -123.17975616455078, - 49.21558761503423 - ], - [ - -123.18041229248047, - 49.21563720609868 - ], - [ - -123.18106079101561, - 49.215713500044004 - ], - [ - -123.18170166015624, - 49.215812682172896 - ], - [ - -123.18232727050781, - 49.2159347524854 - ], - [ - -123.18295288085936, - 49.2160797109815 - ], - [ - -123.18355560302734, - 49.216247557661184 - ], - [ - -123.18415069580078, - 49.21643447782719 - ], - [ - -123.18472290039062, - 49.216644286176795 - ], - [ - -123.1852798461914, - 49.216873168012754 - ], - [ - -123.18581390380858, - 49.21712112333501 - ], - [ - -123.1863327026367, - 49.21739196684088 - ], - [ - -123.18682098388672, - 49.2176780691358 - ], - [ - -123.18728637695314, - 49.21797943021979 - ], - [ - -123.18772888183592, - 49.21829986479009 - ], - [ - -123.18795013427734, - 49.218463896772526 - ], - [ - -123.18818664550781, - 49.218616484663144 - ], - [ - -123.18843841552733, - 49.218761443159245 - ], - [ - -123.18869781494139, - 49.2188987722608 - ], - [ - -123.18896484375001, - 49.219024657270566 - ], - [ - -123.18924713134767, - 49.219142912885786 - ], - [ - -123.18953704833984, - 49.21924972440924 - ], - [ - -123.18983459472655, - 49.219348906538166 - ], - [ - -123.19014739990236, - 49.21943282987801 - ], - [ - -123.19046020507812, - 49.21950912382332 - ], - [ - -123.1907730102539, - 49.219573973676816 - ], - [ - -123.19110107421875, - 49.21962356474128 - ], - [ - -123.1975860595703, - 49.22055435087409 - ], - [ - -123.19785308837892, - 49.22060012724128 - ], - [ - -123.19811248779298, - 49.220653533002995 - ], - [ - -123.1983642578125, - 49.22071838285651 - ], - [ - -123.19861602783203, - 49.22079086210457 - ], - [ - -123.1988525390625, - 49.220874785444394 - ], - [ - -123.19908905029297, - 49.22096633817878 - ], - [ - -123.19931793212892, - 49.22106170561042 - ], - [ - -123.1995315551758, - 49.22116851713387 - ], - [ - -123.19974517822267, - 49.221282958051845 - ], - [ - -123.19994354248047, - 49.22140502836434 - ], - [ - -123.20550537109374, - 49.224994658491305 - ], - [ - -123.20590972900389, - 49.225299834272555 - ], - [ - -123.20629119873048, - 49.225616454145595 - ], - [ - -123.20664215087889, - 49.225944518110445 - ], - [ - -123.20697021484374, - 49.22628784086436 - ], - [ - -123.20726776123047, - 49.2266387930128 - ], - [ - -123.20754241943358, - 49.22700118925303 - ], - [ - -123.20888519287108, - 49.22894668485851 - ], - [ - -123.20916748046875, - 49.2292594900343 - ], - [ - -123.20948028564452, - 49.22956085111828 - ], - [ - -123.20982360839844, - 49.22984695341319 - ], - [ - -123.2101821899414, - 49.230121611616326 - ], - [ - -123.21057128906251, - 49.23038101103039 - ], - [ - -123.21098327636719, - 49.230625151655396 - ], - [ - -123.21141815185545, - 49.23085403349131 - ], - [ - -123.21985626220702, - 49.235023497602675 - ], - [ - -123.2219467163086, - 49.23657607938979 - ], - [ - -123.21992492675781, - 49.23954772855973 - ], - [ - -123.2085952758789, - 49.235183714887846 - ], - [ - -123.20560455322267, - 49.23720168974136 - ], - [ - -123.1968307495117, - 49.23485565092299 - ], - [ - -123.1968536376953, - 49.23651504423354 - ], - [ - -123.19857025146484, - 49.236518858930815 - ], - [ - -123.19857025146484, - 49.23834609892106 - ], - [ - -123.1968536376953, - 49.23847961332534 - ], - [ - -123.19678497314452, - 49.246196745893755 - ], - [ - -123.19854736328125, - 49.246208189985545 - ], - [ - -123.19858551025392, - 49.246208189985545 - ], - [ - -123.19863128662111, - 49.246208189985545 - ], - [ - -123.1986770629883, - 49.2462120046828 - ], - [ - -123.19871520996094, - 49.246215819380076 - ], - [ - -123.19876098632812, - 49.24622344877462 - ], - [ - -123.1987991333008, - 49.24623107816914 - ], - [ - -123.19884490966798, - 49.24623870756366 - ], - [ - -123.19888305664062, - 49.246246336958194 - ], - [ - -123.19892120361328, - 49.24625778105002 - ], - [ - -123.19895935058592, - 49.24627303983906 - ], - [ - -123.1989974975586, - 49.246288298628116 - ], - [ - -123.19903564453126, - 49.24629974271992 - ], - [ - -123.19906616210938, - 49.246318816206255 - ], - [ - -123.20494079589842, - 49.24926376249533 - ], - [ - -123.2009963989258, - 49.249973296186745 - ], - [ - -123.20079040527344, - 49.25001144315941 - ], - [ - -123.20057678222656, - 49.25003814604025 - ], - [ - -123.20036315917969, - 49.25005721952656 - ], - [ - -123.20014190673827, - 49.25006866361837 - ], - [ - -123.19992828369139, - 49.25007247831563 - ], - [ - -123.1986770629883, - 49.25007629301293 - ], - [ - -123.1986770629883, - 49.249923705122285 - ], - [ - -123.19660949707031, - 49.24992751981954 - ], - [ - -123.19654846191405, - 49.25651931669457 - ], - [ - -123.20288085937499, - 49.25661468412623 - ], - [ - -123.20321655273439, - 49.258148192427015 - ], - [ - -123.18399047851561, - 49.257865904829366 - ], - [ - -123.17807006835938, - 49.25776672270045 - ], - [ - -123.1781005859375, - 49.257164000532484 - ], - [ - -123.17792510986328, - 49.2569389333938 - ], - [ - -123.17616271972656, - 49.25561141874535 - ], - [ - -123.17501068115233, - 49.25408172514183 - ], - [ - -123.17347717285158, - 49.252849577925026 - ], - [ - -123.1718978881836, - 49.25154495146018 - ], - [ - -123.1696014404297, - 49.24896240141134 - ], - [ - -123.17092895507812, - 49.24967193510274 - ], - [ - -123.17218780517578, - 49.250045775434785 - ], - [ - -123.17095184326172, - 49.24844741728048 - ], - [ - -123.17051696777342, - 49.248092650434785 - ], - [ - -123.17016601562501, - 49.24789047147971 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.18954680338996, - "lat": 49.23796190534427 - } - }, - { - "name": "Fairview", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.14598846435547, - 49.25712203886255 - ], - [ - -123.14540100097656, - 49.271846770307945 - ], - [ - -123.14534759521484, - 49.2719612112259 - ], - [ - -123.1452865600586, - 49.272075652143904 - ], - [ - -123.14521789550781, - 49.27218627836458 - ], - [ - -123.1451416015625, - 49.27229690458529 - ], - [ - -123.14505004882812, - 49.27239990141145 - ], - [ - -123.14495086669922, - 49.272502898237626 - ], - [ - -123.14484405517577, - 49.27260208036652 - ], - [ - -123.14473724365234, - 49.27269744779819 - ], - [ - -123.14461517333984, - 49.27278900053254 - ], - [ - -123.1444854736328, - 49.2728729238724 - ], - [ - -123.14434814453124, - 49.27295684721224 - ], - [ - -123.1442108154297, - 49.27303314115756 - ], - [ - -123.14405822753906, - 49.27310562040561 - ], - [ - -123.14390563964844, - 49.27317047025911 - ], - [ - -123.14374542236328, - 49.27323150541536 - ], - [ - -123.1392822265625, - 49.274826048872406 - ], - [ - -123.13768005371092, - 49.27531814481966 - ], - [ - -123.12928009033203, - 49.2695312490677 - ], - [ - -123.12116241455078, - 49.26953887846223 - ], - [ - -123.11444854736328, - 49.2717742910599 - ], - [ - -123.11504364013672, - 49.25687026884301 - ], - [ - -123.12721252441408, - 49.25709915067896 - ], - [ - -123.12721252441408, - 49.25696945097193 - ], - [ - -123.1317672729492, - 49.257030486128194 - ], - [ - -123.13200378417967, - 49.25715255644068 - ], - [ - -123.1322479248047, - 49.257266997358656 - ], - [ - -123.1324996948242, - 49.257373808882086 - ], - [ - -123.13276672363283, - 49.25747299101099 - ], - [ - -123.1330337524414, - 49.25756072904809 - ], - [ - -123.13331604003906, - 49.25764083769068 - ], - [ - -123.13359832763672, - 49.25770950224146 - ], - [ - -123.1338882446289, - 49.257770537397704 - ], - [ - -123.13417816162108, - 49.257820128462164 - ], - [ - -123.13447570800781, - 49.25785827543482 - ], - [ - -123.13478088378906, - 49.25788497831567 - ], - [ - -123.13507843017577, - 49.25790405180202 - ], - [ - -123.13538360595702, - 49.25791168119654 - ], - [ - -123.13568878173828, - 49.25790786649928 - ], - [ - -123.135986328125, - 49.25789642240748 - ], - [ - -123.13616943359376, - 49.25788497831567 - ], - [ - -123.13634490966797, - 49.25786590482936 - ], - [ - -123.13652038574217, - 49.257839201948514 - ], - [ - -123.1366958618164, - 49.257808684370374 - ], - [ - -123.1368637084961, - 49.25777435209498 - ], - [ - -123.13703155517578, - 49.2577285757278 - ], - [ - -123.13719177246094, - 49.2576827993606 - ], - [ - -123.13735198974611, - 49.25762557890161 - ], - [ - -123.13750457763672, - 49.257568358442626 - ], - [ - -123.13765716552733, - 49.25749969389185 - ], - [ - -123.13780212402345, - 49.25743102934108 - ], - [ - -123.13793945312499, - 49.25735473539575 - ], - [ - -123.13806915283203, - 49.25727462675318 - ], - [ - -123.13819122314453, - 49.257190703413336 - ], - [ - -123.1383056640625, - 49.25709915067896 - ], - [ - -123.13842010498047, - 49.257007597944586 - ], - [ - -123.14598846435547, - 49.25712203886255 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.1310488653851, - "lat": 49.26454048616976 - } - }, - { - "name": "Mount Pleasant", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.10066986083984, - 49.269130705854806 - ], - [ - -123.09692382812501, - 49.26700591947784 - ], - [ - -123.09688568115234, - 49.266975401899714 - ], - [ - -123.09683990478516, - 49.26694869901886 - ], - [ - -123.09679412841797, - 49.26692581083526 - ], - [ - -123.09674072265625, - 49.26689910795439 - ], - [ - -123.09669494628906, - 49.26688003446808 - ], - [ - -123.09664154052736, - 49.26685714628449 - ], - [ - -123.09658813476561, - 49.2668418874954 - ], - [ - -123.0965347290039, - 49.266826628706355 - ], - [ - -123.09647369384764, - 49.266811369917285 - ], - [ - -123.09642028808594, - 49.26679992582549 - ], - [ - -123.0963592529297, - 49.26678848173369 - ], - [ - -123.09629821777344, - 49.26678085233917 - ], - [ - -123.09623718261717, - 49.26677322294464 - ], - [ - -123.09618377685547, - 49.26677322294464 - ], - [ - -123.09612274169923, - 49.266769408247356 - ], - [ - -123.08999633789061, - 49.26672744657744 - ], - [ - -123.08967590332031, - 49.26670837309112 - ], - [ - -123.08936309814455, - 49.26667404081573 - ], - [ - -123.08905792236328, - 49.2666320791458 - ], - [ - -123.08874511718751, - 49.26657867338409 - ], - [ - -123.08196258544923, - 49.26527023222196 - ], - [ - -123.08179473876955, - 49.26523589994658 - ], - [ - -123.08162689208983, - 49.265209197065715 - ], - [ - -123.08145904541014, - 49.26518630888213 - ], - [ - -123.08129119873047, - 49.265171050093066 - ], - [ - -123.08111572265625, - 49.26515960600126 - ], - [ - -123.08094787597656, - 49.265155791304 - ], - [ - -123.07741546630858, - 49.26514053251494 - ], - [ - -123.07758331298827, - 49.256626128218016 - ], - [ - -123.07778930664062, - 49.256633757612555 - ], - [ - -123.07779693603514, - 49.25619888212427 - ], - [ - -123.08984375, - 49.25637817289576 - ], - [ - -123.10120391845705, - 49.25654601957543 - ], - [ - -123.11504364013672, - 49.25687026884301 - ], - [ - -123.11444854736328, - 49.2717742910599 - ], - [ - -123.11107635498047, - 49.272926329634096 - ], - [ - -123.10169982910158, - 49.27297210600129 - ], - [ - -123.09999847412111, - 49.272750853559906 - ], - [ - -123.10003662109375, - 49.271923064253244 - ], - [ - -123.10060119628906, - 49.270889281294274 - ], - [ - -123.10066986083984, - 49.269130705854806 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.09851312036905, - "lat": 49.26306524972865 - } - }, - { - "name": "Renfrew-Collingwood", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.02355957031249, - 49.23479080106947 - ], - [ - -123.02356719970705, - 49.23226928617689 - ], - [ - -123.03034210205078, - 49.231933592817505 - ], - [ - -123.03051757812501, - 49.23192977812023 - ], - [ - -123.03069305419922, - 49.23192977812023 - ], - [ - -123.03086853027342, - 49.231937407514785 - ], - [ - -123.03105163574219, - 49.23194885160657 - ], - [ - -123.03122711181642, - 49.231971739790175 - ], - [ - -123.0313949584961, - 49.23199844267102 - ], - [ - -123.03156280517578, - 49.232028960249146 - ], - [ - -123.03173065185547, - 49.232070921919075 - ], - [ - -123.03189849853516, - 49.23211669828626 - ], - [ - -123.03205871582031, - 49.232166289350715 - ], - [ - -123.03221130371094, - 49.2322235098097 - ], - [ - -123.03236389160158, - 49.23228454496595 - ], - [ - -123.03250885009766, - 49.23235320951673 - ], - [ - -123.03585815429689, - 49.23410415556167 - ], - [ - -123.03645324707033, - 49.23342895414565 - ], - [ - -123.03650665283203, - 49.23337554838393 - ], - [ - -123.0365676879883, - 49.233318327924934 - ], - [ - -123.03662872314453, - 49.233264922163215 - ], - [ - -123.03669738769531, - 49.233215331098755 - ], - [ - -123.0367660522461, - 49.233169554731575 - ], - [ - -123.0368423461914, - 49.23312377836439 - ], - [ - -123.0369186401367, - 49.23308181669446 - ], - [ - -123.03700256347656, - 49.233043669721795 - ], - [ - -123.03708648681639, - 49.23300552274916 - ], - [ - -123.03717803955077, - 49.23297119047377 - ], - [ - -123.03726959228516, - 49.23294067289563 - ], - [ - -123.03736114501953, - 49.2329139700148 - ], - [ - -123.0374526977539, - 49.23289108183119 - ], - [ - -123.03755187988281, - 49.23287200834486 - ], - [ - -123.0376510620117, - 49.232856749555786 - ], - [ - -123.03775024414064, - 49.232841490766745 - ], - [ - -123.03784942626953, - 49.2328338613722 - ], - [ - -123.0467071533203, - 49.23288726713391 - ], - [ - -123.04875183105469, - 49.23275375272962 - ], - [ - -123.05885314941406, - 49.23280715849134 - ], - [ - -123.0586700439453, - 49.24076461698748 - ], - [ - -123.05866241455078, - 49.24085998441911 - ], - [ - -123.0586471557617, - 49.24095535185075 - ], - [ - -123.05862426757811, - 49.241050719282406 - ], - [ - -123.05860137939455, - 49.24114227201677 - ], - [ - -123.05856323242188, - 49.24123763944841 - ], - [ - -123.05851745605469, - 49.24132537748552 - ], - [ - -123.0584716796875, - 49.2414169302199 - ], - [ - -123.05841064453124, - 49.24150466825701 - ], - [ - -123.05834197998048, - 49.241588591596845 - ], - [ - -123.0582733154297, - 49.241672514936695 - ], - [ - -123.05819702148436, - 49.24175262357927 - ], - [ - -123.05811309814453, - 49.24182891752458 - ], - [ - -123.05662536621094, - 49.24317550565935 - ], - [ - -123.05658721923827, - 49.26198196317898 - ], - [ - -123.04424285888672, - 49.26193618681179 - ], - [ - -123.04424285888672, - 49.26187133695827 - ], - [ - -123.03262329101564, - 49.26182937528834 - ], - [ - -123.03239440917969, - 49.26183318998563 - ], - [ - -123.03216552734374, - 49.26184463407742 - ], - [ - -123.03193664550783, - 49.26186752226102 - ], - [ - -123.03170776367188, - 49.26189422514187 - ], - [ - -123.03148651123048, - 49.261932372114536 - ], - [ - -123.03126525878906, - 49.26197814848171 - ], - [ - -123.03104400634766, - 49.262027739546156 - ], - [ - -123.03083801269531, - 49.26208877470243 - ], - [ - -123.03063201904295, - 49.2621574392532 - ], - [ - -123.03042602539062, - 49.262229918501255 - ], - [ - -123.03023529052736, - 49.2623138418411 - ], - [ - -123.03004455566408, - 49.26240157987821 - ], - [ - -123.02986907958984, - 49.26249694730984 - ], - [ - -123.02969360351562, - 49.26259612943875 - ], - [ - -123.02953338623047, - 49.262706755659444 - ], - [ - -123.02794647216797, - 49.26375198271025 - ], - [ - -123.02762603759764, - 49.263980864546184 - ], - [ - -123.02729034423828, - 49.264198302290325 - ], - [ - -123.02693176269531, - 49.26440429594267 - ], - [ - -123.02655792236328, - 49.26459503080595 - ], - [ - -123.0261688232422, - 49.26477050688016 - ], - [ - -123.02576446533205, - 49.26493453886258 - ], - [ - -123.02534484863281, - 49.26508331205594 - ], - [ - -123.02491760253906, - 49.265220641157526 - ], - [ - -123.02447509765625, - 49.265338896772754 - ], - [ - -123.0240249633789, - 49.26544189359891 - ], - [ - -123.02356719970705, - 49.265525816938755 - ], - [ - -123.02355957031249, - 49.23479080106947 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.040166464563, - "lat": 49.247342733638504 - } - }, - { - "name": "West End", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.13768005371092, - 49.27531814481966 - ], - [ - -123.1412582397461, - 49.27829360868688 - ], - [ - -123.1426773071289, - 49.28133010771033 - ], - [ - -123.14553833007812, - 49.28436279203652 - ], - [ - -123.14540863037108, - 49.287136076948634 - ], - [ - -123.14775085449217, - 49.2889060964799 - ], - [ - -123.14168548583984, - 49.29291915800335 - ], - [ - -123.13809967041016, - 49.293514250776795 - ], - [ - -123.13668060302734, - 49.29445648100141 - ], - [ - -123.12109375, - 49.28436660673378 - ], - [ - -123.13233184814453, - 49.276931761763024 - ], - [ - -123.13768005371092, - 49.27531814481966 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.13543765302629, - "lat": 49.285011188472005 - } - }, - { - "name": "Arbutus Ridge", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.15259552001952, - 49.25722503568872 - ], - [ - -123.16487884521484, - 49.257427214643805 - ], - [ - -123.16487884521484, - 49.25756835844264 - ], - [ - -123.17807006835938, - 49.25776672270045 - ], - [ - -123.1781005859375, - 49.257164000532484 - ], - [ - -123.17792510986328, - 49.2569389333938 - ], - [ - -123.17616271972656, - 49.25561141874535 - ], - [ - -123.17501068115233, - 49.25408172514183 - ], - [ - -123.17190551757812, - 49.25155258085472 - ], - [ - -123.1696014404297, - 49.24896240141134 - ], - [ - -123.17092895507812, - 49.24967193510274 - ], - [ - -123.17218780517578, - 49.250045775434785 - ], - [ - -123.17095184326172, - 49.24845886137228 - ], - [ - -123.17056274414061, - 49.24811935331564 - ], - [ - -123.17015838623047, - 49.24788284208516 - ], - [ - -123.17024993896484, - 49.234703063032356 - ], - [ - -123.15527343750001, - 49.23452377226088 - ], - [ - -123.15508270263673, - 49.23939895536637 - ], - [ - -123.15506744384766, - 49.23947906400897 - ], - [ - -123.15503692626955, - 49.239562987348805 - ], - [ - -123.15500640869139, - 49.23964309599139 - ], - [ - -123.15496826171876, - 49.239723204633954 - ], - [ - -123.15492248535156, - 49.23979949857926 - ], - [ - -123.15487670898438, - 49.239879607221845 - ], - [ - -123.15481567382812, - 49.2399520864699 - ], - [ - -123.15475463867189, - 49.24002456571794 - ], - [ - -123.1546859741211, - 49.24009704496598 - ], - [ - -123.15461730957031, - 49.24016570951677 - ], - [ - -123.15453338623045, - 49.240230559370296 - ], - [ - -123.15444946289062, - 49.24029159452653 - ], - [ - -123.15435791015625, - 49.24035262968279 - ], - [ - -123.15426635742188, - 49.240406035444494 - ], - [ - -123.15416717529297, - 49.24045944120622 - ], - [ - -123.15406036376952, - 49.240509032270694 - ], - [ - -123.15396118164062, - 49.24055480863786 - ], - [ - -123.15384674072266, - 49.24059677030778 - ], - [ - -123.15373229980467, - 49.24063491728044 - ], - [ - -123.15361785888673, - 49.240669249555836 - ], - [ - -123.1534957885742, - 49.24069976713394 - ], - [ - -123.15337371826172, - 49.24072647001482 - ], - [ - -123.15325164794922, - 49.24074935819841 - ], - [ - -123.15312957763672, - 49.24076461698747 - ], - [ - -123.15299987792967, - 49.240776061079266 - ], - [ - -123.15287780761719, - 49.240787505171056 - ], - [ - -123.15274810791016, - 49.240791319868336 - ], - [ - -123.15261840820311, - 49.240791319868336 - ], - [ - -123.15249633789062, - 49.240783690473805 - ], - [ - -123.15236663818361, - 49.24077606107926 - ], - [ - -123.15223693847656, - 49.24076080229022 - ], - [ - -123.15211486816406, - 49.24074554350114 - ], - [ - -123.15199279785156, - 49.24072265531754 - ], - [ - -123.1500701904297, - 49.24038696195817 - ], - [ - -123.14994049072266, - 49.240367888471845 - ], - [ - -123.14981842041016, - 49.240352629682775 - ], - [ - -123.14968872070311, - 49.24034118559099 - ], - [ - -123.1495590209961, - 49.24033737089373 - ], - [ - -123.14942932128905, - 49.24033355619646 - ], - [ - -123.14929962158203, - 49.24033737089373 - ], - [ - -123.14916992187499, - 49.24034118559099 - ], - [ - -123.14904022216797, - 49.24035262968279 - ], - [ - -123.14891815185547, - 49.24036788847185 - ], - [ - -123.14878845214842, - 49.24039077665544 - ], - [ - -123.14866638183594, - 49.24041366483903 - ], - [ - -123.14854431152344, - 49.2404403677199 - ], - [ - -123.14842224121094, - 49.240474699995275 - ], - [ - -123.14830780029297, - 49.24051284696796 - ], - [ - -123.148193359375, - 49.24055099394059 - ], - [ - -123.14808654785158, - 49.24059677030778 - ], - [ - -123.14797973632812, - 49.24064636137223 - ], - [ - -123.1478729248047, - 49.240695952436695 - ], - [ - -123.14777374267577, - 49.24075317289568 - ], - [ - -123.14768218994142, - 49.24081039335467 - ], - [ - -123.14759063720705, - 49.24087142851091 - ], - [ - -123.14750671386719, - 49.240936278364416 - ], - [ - -123.14743041992188, - 49.24100494291521 - ], - [ - -123.1473617553711, - 49.241073607465985 - ], - [ - -123.14729309082031, - 49.24114608671403 - ], - [ - -123.14723205566405, - 49.24122238065935 - ], - [ - -123.14717864990234, - 49.241298674604664 - ], - [ - -123.14712524414062, - 49.24137496854999 - ], - [ - -123.14708709716795, - 49.24145507719255 - ], - [ - -123.14704895019533, - 49.24153900053239 - ], - [ - -123.14701843261717, - 49.241619109174984 - ], - [ - -123.14699554443358, - 49.24170303251482 - ], - [ - -123.14698028564453, - 49.24178695585467 - ], - [ - -123.14697265624999, - 49.241870879194515 - ], - [ - -123.14696502685547, - 49.24195480253437 - ], - [ - -123.14694976806642, - 49.2425613393996 - ], - [ - -123.14694976806642, - 49.24273300077653 - ], - [ - -123.14697265624999, - 49.242900847456234 - ], - [ - -123.14700317382812, - 49.243072508833194 - ], - [ - -123.14704895019533, - 49.243240355512874 - ], - [ - -123.14710235595703, - 49.24340438749529 - ], - [ - -123.14717864990234, - 49.243568419477725 - ], - [ - -123.14726257324219, - 49.24372863676288 - ], - [ - -123.14736938476562, - 49.24388503935077 - ], - [ - -123.15238189697264, - 49.250621794721894 - ], - [ - -123.1524658203125, - 49.25074767973165 - ], - [ - -123.15254211425781, - 49.2508773794387 - ], - [ - -123.1526107788086, - 49.251007079145715 - ], - [ - -123.15266418457031, - 49.25114059355003 - ], - [ - -123.1527099609375, - 49.25127792265159 - ], - [ - -123.15274047851561, - 49.25141525175315 - ], - [ - -123.1527633666992, - 49.25155258085472 - ], - [ - -123.15277099609375, - 49.25169372465353 - ], - [ - -123.1527633666992, - 49.25183105375512 - ], - [ - -123.15259552001952, - 49.25722503568872 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.16166923820482, - "lat": 49.24680490982789 - } - }, - { - "name": "Grandview-Woodland", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.07701873779298, - 49.29024886991739 - ], - [ - -123.06777954101562, - 49.290103911421305 - ], - [ - -123.06262207031251, - 49.289535521528734 - ], - [ - -123.06242370605469, - 49.290874480268954 - ], - [ - -123.05648803710938, - 49.29348754789594 - ], - [ - -123.05658721923827, - 49.26217651273953 - ], - [ - -123.07746887207033, - 49.262336730024685 - ], - [ - -123.07741546630858, - 49.26514053251494 - ], - [ - -123.07701873779298, - 49.29024886991739 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.06672822103268, - "lat": 49.27643960930463 - } - }, - { - "name": "Kensington-Cedar Cottage", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.05658721923827, - 49.26198196317898 - ], - [ - -123.05662536621094, - 49.24317550565935 - ], - [ - -123.05811309814453, - 49.24182891752458 - ], - [ - -123.05819702148436, - 49.24175262357927 - ], - [ - -123.0582733154297, - 49.241672514936695 - ], - [ - -123.05834197998048, - 49.241588591596845 - ], - [ - -123.05841064453124, - 49.24150466825701 - ], - [ - -123.0584716796875, - 49.2414169302199 - ], - [ - -123.05851745605469, - 49.24132537748552 - ], - [ - -123.05856323242188, - 49.24123763944841 - ], - [ - -123.05860137939455, - 49.24114227201677 - ], - [ - -123.05862426757811, - 49.241050719282406 - ], - [ - -123.0586471557617, - 49.24095535185075 - ], - [ - -123.05866241455078, - 49.24085998441911 - ], - [ - -123.0586700439453, - 49.24076461698748 - ], - [ - -123.05885314941406, - 49.23280715849134 - ], - [ - -123.06444549560548, - 49.23286437895032 - ], - [ - -123.06674194335938, - 49.23255538847181 - ], - [ - -123.07703399658203, - 49.232666014692505 - ], - [ - -123.09053802490233, - 49.23282241728041 - ], - [ - -123.08984375, - 49.25637817289576 - ], - [ - -123.07779693603514, - 49.25619888212427 - ], - [ - -123.07778930664062, - 49.256633757612555 - ], - [ - -123.07758331298827, - 49.256626128218016 - ], - [ - -123.07746887207033, - 49.262336730024685 - ], - [ - -123.05658721923827, - 49.26217651273953 - ], - [ - -123.05658721923827, - 49.26198196317898 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.07288459215947, - "lat": 49.246686446286056 - } - }, - { - "name": "Killarney", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.02355957031249, - 49.20014572050289 - ], - [ - -123.03997802734375, - 49.203960417768535 - ], - [ - -123.04232025146484, - 49.20400237943846 - ], - [ - -123.0568313598633, - 49.20420074369628 - ], - [ - -123.05684661865233, - 49.20718383695801 - ], - [ - -123.05683898925781, - 49.20729446317871 - ], - [ - -123.05682373046874, - 49.20740508939943 - ], - [ - -123.0568084716797, - 49.207515715620126 - ], - [ - -123.05677795410155, - 49.20762252714357 - ], - [ - -123.05673217773436, - 49.207729338666994 - ], - [ - -123.0566864013672, - 49.207836150190424 - ], - [ - -123.05663299560547, - 49.20794296171388 - ], - [ - -123.05656433105467, - 49.20804214384277 - ], - [ - -123.05649566650389, - 49.20814132597169 - ], - [ - -123.05641174316406, - 49.20824050810059 - ], - [ - -123.05604553222655, - 49.20868682768068 - ], - [ - -123.05572509765625, - 49.209148406049835 - ], - [ - -123.05545806884767, - 49.20962524320802 - ], - [ - -123.05509948730467, - 49.2118949880811 - ], - [ - -123.05507659912108, - 49.21202087309085 - ], - [ - -123.05503845214844, - 49.212146758100616 - ], - [ - -123.05499267578125, - 49.212268828413116 - ], - [ - -123.05493164062499, - 49.212390898725616 - ], - [ - -123.0548629760742, - 49.21251296903813 - ], - [ - -123.0547866821289, - 49.212627409956085 - ], - [ - -123.05469512939452, - 49.21274185087406 - ], - [ - -123.05459594726562, - 49.21285247709476 - ], - [ - -123.0544891357422, - 49.2129592886182 - ], - [ - -123.05437469482422, - 49.21306228544437 - ], - [ - -123.05175018310547, - 49.21535491850101 - ], - [ - -123.05153656005861, - 49.21555709745609 - ], - [ - -123.05133819580077, - 49.21576690580571 - ], - [ - -123.05115509033205, - 49.21598434354985 - ], - [ - -123.05099487304688, - 49.21620941068854 - ], - [ - -123.05085754394531, - 49.216442107221724 - ], - [ - -123.05073547363281, - 49.216674803754955 - ], - [ - -123.05063629150392, - 49.216915129682675 - ], - [ - -123.05055999755858, - 49.21715927030766 - ], - [ - -123.0500717163086, - 49.229293822309685 - ], - [ - -123.0488052368164, - 49.229293822309685 - ], - [ - -123.04875183105469, - 49.23275375272962 - ], - [ - -123.0467071533203, - 49.23288726713391 - ], - [ - -123.03839874267578, - 49.232872008344856 - ], - [ - -123.0383071899414, - 49.232860564253045 - ], - [ - -123.03821563720703, - 49.23285293485854 - ], - [ - -123.03811645507812, - 49.232845305464 - ], - [ - -123.03802490234375, - 49.23284530546399 - ], - [ - -123.03792572021484, - 49.23284530546398 - ], - [ - -123.03783416748047, - 49.23284912016127 - ], - [ - -123.0377426147461, - 49.232856749555786 - ], - [ - -123.0376510620117, - 49.23286819364759 - ], - [ - -123.03755950927733, - 49.23288345243665 - ], - [ - -123.03746795654298, - 49.23289871122571 - ], - [ - -123.0373764038086, - 49.232921599409316 - ], - [ - -123.03728485107422, - 49.2329444875929 - ], - [ - -123.03720092773436, - 49.23297119047376 - ], - [ - -123.03711700439453, - 49.23299789335462 - ], - [ - -123.03704071044923, - 49.23303222563003 - ], - [ - -123.03695678710938, - 49.2330665579054 - ], - [ - -123.0368881225586, - 49.233104704878066 - ], - [ - -123.03681182861328, - 49.23314285185071 - ], - [ - -123.0367431640625, - 49.23318481352066 - ], - [ - -123.03667449951172, - 49.233230589887825 - ], - [ - -123.03661346435545, - 49.23327636625501 - ], - [ - -123.03656005859375, - 49.23332595731947 - ], - [ - -123.03650665283203, - 49.23337936308118 - ], - [ - -123.03645324707033, - 49.23342895414565 - ], - [ - -123.03585815429689, - 49.23410415556167 - ], - [ - -123.03250885009766, - 49.23235320951673 - ], - [ - -123.03236389160158, - 49.23228454496595 - ], - [ - -123.03221130371094, - 49.2322235098097 - ], - [ - -123.03205871582031, - 49.232166289350715 - ], - [ - -123.03189849853516, - 49.23211669828626 - ], - [ - -123.03173065185547, - 49.232070921919075 - ], - [ - -123.03156280517578, - 49.232028960249146 - ], - [ - -123.0313949584961, - 49.23199844267102 - ], - [ - -123.03122711181642, - 49.231971739790175 - ], - [ - -123.03105163574219, - 49.23194885160657 - ], - [ - -123.03086853027342, - 49.231937407514785 - ], - [ - -123.03069305419922, - 49.23192977812023 - ], - [ - -123.03051757812501, - 49.23192977812023 - ], - [ - -123.03034210205078, - 49.231933592817505 - ], - [ - -123.02356719970705, - 49.23226928617689 - ], - [ - -123.02326202392578, - 49.20940780546388 - ], - [ - -123.02355957031249, - 49.20014572050289 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.03764702895802, - "lat": 49.21702167079743 - } - }, - { - "name": "Kitsilano", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.13768005371092, - 49.27531814481966 - ], - [ - -123.14374542236328, - 49.27323150541536 - ], - [ - -123.14389801025389, - 49.273178099653656 - ], - [ - -123.14404296875001, - 49.27311706449739 - ], - [ - -123.14418792724611, - 49.273052214643876 - ], - [ - -123.14432525634767, - 49.272983550093095 - ], - [ - -123.14445495605469, - 49.27291107084505 - ], - [ - -123.1445846557617, - 49.27283096220247 - ], - [ - -123.14469909667967, - 49.27274703886264 - ], - [ - -123.14481353759766, - 49.27265930082552 - ], - [ - -123.14491271972655, - 49.27256774809115 - ], - [ - -123.14500427246094, - 49.272472380659494 - ], - [ - -123.14509582519531, - 49.27237319853059 - ], - [ - -123.14517211914061, - 49.27227401640169 - ], - [ - -123.1452407836914, - 49.27217101957552 - ], - [ - -123.14530181884766, - 49.272064208052086 - ], - [ - -123.14535522460938, - 49.27195739652865 - ], - [ - -123.14540100097656, - 49.271846770307945 - ], - [ - -123.14598846435547, - 49.25712203886255 - ], - [ - -123.16487884521484, - 49.25741958524926 - ], - [ - -123.16487884521484, - 49.25756835844264 - ], - [ - -123.18399047851561, - 49.257865904829366 - ], - [ - -123.18392944335939, - 49.25976562406764 - ], - [ - -123.18593597412111, - 49.26113891508327 - ], - [ - -123.18548583984376, - 49.2749710073685 - ], - [ - -123.17374420166016, - 49.274341582319664 - ], - [ - -123.16479492187499, - 49.27556610014193 - ], - [ - -123.15970611572266, - 49.27554702665561 - ], - [ - -123.15265655517578, - 49.28030776884313 - ], - [ - -123.14600372314455, - 49.280315398237654 - ], - [ - -123.14358520507812, - 49.279666899702505 - ], - [ - -123.1412582397461, - 49.27829360868688 - ], - [ - -123.13768005371092, - 49.27531814481966 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.16329474017252, - "lat": 49.26753984848691 - } - }, - { - "name": "Strathcona", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.0992889404297, - 49.289272307417406 - ], - [ - -123.09390258789064, - 49.29051589872601 - ], - [ - -123.07701873779298, - 49.29024886991739 - ], - [ - -123.07741546630858, - 49.26514053251494 - ], - [ - -123.08094787597656, - 49.265155791304 - ], - [ - -123.08120727539064, - 49.265171050093066 - ], - [ - -123.08145904541014, - 49.265193938276646 - ], - [ - -123.08171081542969, - 49.26522445585478 - ], - [ - -123.08196258544923, - 49.26527023222196 - ], - [ - -123.08874511718751, - 49.26657867338409 - ], - [ - -123.08895111083984, - 49.266624449751276 - ], - [ - -123.08915710449219, - 49.26665878202664 - ], - [ - -123.08936309814455, - 49.2666892996048 - ], - [ - -123.08956909179686, - 49.26670837309112 - ], - [ - -123.08978271484374, - 49.26672363188019 - ], - [ - -123.08999633789061, - 49.26672744657744 - ], - [ - -123.09612274169923, - 49.266769408247356 - ], - [ - -123.09619903564453, - 49.2667770376419 - ], - [ - -123.09628295898436, - 49.266788481733705 - ], - [ - -123.0963592529297, - 49.266803740522754 - ], - [ - -123.096435546875, - 49.266818999311816 - ], - [ - -123.09651184082031, - 49.26683807279815 - ], - [ - -123.09658813476561, - 49.26686096098174 - ], - [ - -123.0966567993164, - 49.266883849165325 - ], - [ - -123.09672546386719, - 49.266910552046184 - ], - [ - -123.09679412841797, - 49.266941069624316 - ], - [ - -123.09686279296875, - 49.26697158720244 - ], - [ - -123.09692382812501, - 49.26700591947784 - ], - [ - -123.10066986083984, - 49.269130705854806 - ], - [ - -123.10060119628906, - 49.270889281294274 - ], - [ - -123.10003662109375, - 49.271923064253244 - ], - [ - -123.09999847412111, - 49.272750853559906 - ], - [ - -123.0992889404297, - 49.289272307417406 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.08823528054062, - "lat": 49.27821957764724 - } - }, - { - "name": "Sunset", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.10696411132812, - 49.20415878202636 - ], - [ - -123.10616302490233, - 49.21887588407721 - ], - [ - -123.10562133789061, - 49.23311614896985 - ], - [ - -123.09053802490233, - 49.23282241728041 - ], - [ - -123.07703399658203, - 49.232666014692505 - ], - [ - -123.07742309570314, - 49.21997070219244 - ], - [ - -123.07701110839844, - 49.21918487455574 - ], - [ - -123.0771484375, - 49.207614897749025 - ], - [ - -123.07750701904297, - 49.20756149198732 - ], - [ - -123.07786560058592, - 49.2074966421338 - ], - [ - -123.07821655273438, - 49.207420348188485 - ], - [ - -123.07855987548828, - 49.20733261015138 - ], - [ - -123.07889556884766, - 49.20723342802246 - ], - [ - -123.0792236328125, - 49.20712280180177 - ], - [ - -123.0799560546875, - 49.206874846479494 - ], - [ - -123.08071899414062, - 49.206661223432626 - ], - [ - -123.08149719238281, - 49.206478117963876 - ], - [ - -123.08839416503908, - 49.204776762983386 - ], - [ - -123.08956146240234, - 49.204444884321276 - ], - [ - -123.08972930908203, - 49.204383849165026 - ], - [ - -123.0898971557617, - 49.204326628706035 - ], - [ - -123.09007263183595, - 49.2042770376416 - ], - [ - -123.09024810791016, - 49.20423507597168 - ], - [ - -123.0904312133789, - 49.20419692899901 - ], - [ - -123.09061431884767, - 49.20416641142089 - ], - [ - -123.09079742431639, - 49.20414352323731 - ], - [ - -123.09098815917967, - 49.204124449750964 - ], - [ - -123.09117126464844, - 49.20411682035643 - ], - [ - -123.09136199951172, - 49.204113005659174 - ], - [ - -123.10379028320312, - 49.20408248808105 - ], - [ - -123.10507202148438, - 49.204071043989245 - ], - [ - -123.10635375976561, - 49.2041206350537 - ], - [ - -123.10696411132812, - 49.20415878202636 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.09203800098149, - "lat": 49.21875615053907 - } - }, - { - "name": "West Point Grey", - "geom": { - "type": "Feature", - "geometry": { - "coordinates": [ - [ - [ - -123.22444915771486, - 49.2789230337357 - ], - [ - -123.2051544189453, - 49.27805709745641 - ], - [ - -123.18941497802734, - 49.27521514799351 - ], - [ - -123.18548583984376, - 49.2749710073685 - ], - [ - -123.18550109863281, - 49.27325439359895 - ], - [ - -123.18594360351562, - 49.26113891508327 - ], - [ - -123.18392944335939, - 49.25976562406764 - ], - [ - -123.18399047851561, - 49.257865904829366 - ], - [ - -123.20321655273439, - 49.258148192427015 - ], - [ - -123.21538543701172, - 49.25833129789575 - ], - [ - -123.21508789062501, - 49.26735687162627 - ], - [ - -123.21713256835938, - 49.2673339834427 - ], - [ - -123.2183837890625, - 49.26725006010284 - ], - [ - -123.21961975097655, - 49.267108916304004 - ], - [ - -123.21962738037111, - 49.26882934477082 - ], - [ - -123.22189331054689, - 49.26853942777862 - ], - [ - -123.22174835205077, - 49.27025985624544 - ], - [ - -123.22431945800781, - 49.272266387007164 - ], - [ - -123.22484588623045, - 49.274654387495445 - ], - [ - -123.22457122802734, - 49.27789688017126 - ], - [ - -123.22444915771486, - 49.2789230337357 - ] - ] - ], - "type": "Polygon" - }, - "properties": {} - }, - "geo_point_2d": { - "lon": -123.20346748255886, - "lat": 49.268401210185914 - } - } -] \ No newline at end of file diff --git a/lib/tasks/fake_data/analytics.rake b/lib/tasks/fake_data/analytics.rake index d95e5f54..35f4e199 100644 --- a/lib/tasks/fake_data/analytics.rake +++ b/lib/tasks/fake_data/analytics.rake @@ -10,10 +10,10 @@ namespace :fake_data do facility_ids = Facility.all.ids start_date = 1.day.ago - 30.times.each do |n| - created_at = start_date + n.days - x = n+1 - puts "Creating #{x} visits" + 30.times.each do |x| + created_at = start_date + x.days + y = (0.2*x).ceil + puts "Creating #{y} visits" x.times.each do uuid = SecureRandom.hex session_id = SecureRandom.hex @@ -34,8 +34,8 @@ namespace :fake_data do created_at: event_date) - n = rand(1..10) - ids_to_filter = facility_ids.sample(n) + p = rand(1..10) + ids_to_filter = facility_ids.sample(p) Facility.where(id: ids_to_filter).find_each do |facility| event.impressions.create!(impressionable: facility, created_at: event_date)