├── .devcontainer └── devcontainer.json ├── .editorconfig ├── .eslintrc.js ├── .gitattributes ├── .github └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── .husky └── pre-commit ├── .npmignore ├── .prettierignore ├── .prettierrc ├── .yarn └── releases │ └── yarn-1.18.0.js ├── .yarnrc ├── CHANGES.md ├── Dockerfile ├── LICENSE.md ├── README.md ├── architecture ├── 0000-record-architecture-decisions.md └── 0001-npm-lockfiles.md ├── buildprocess ├── configureWebpackForPlugins.js ├── generate-region-ids.sh ├── split-catalog.sh ├── split-groups.sh └── webpack.config.js ├── ckanext-cesiumpreview ├── .gitignore ├── README.md ├── __init__.py ├── ckanext │ ├── __init__.py │ ├── __init__.pyc │ └── cesiumpreview │ │ ├── __init__.py │ │ ├── __init__.pyc │ │ ├── plugin.py │ │ ├── plugin.pyc │ │ ├── tests │ │ ├── __init__.py │ │ └── test_preview.py │ │ └── theme │ │ ├── public │ │ ├── css │ │ │ └── text.css │ │ ├── geojson-extent.js │ │ ├── preview_cesium.js │ │ └── resource.config │ │ └── templates │ │ └── cesium.html ├── ckanext_cesiumpreview.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ ├── entry_points.txt │ ├── namespace_packages.txt │ ├── not-zip-safe │ └── top_level.txt ├── install.txt └── setup.py ├── deploy ├── docker │ ├── Dockerfile │ ├── create-docker-context.js │ └── docker-util.js ├── ecosystem-example.config.js ├── helm │ ├── example-prod.yml │ ├── minikube-dev.yml │ └── terria │ │ ├── .helmignore │ │ ├── Chart.yaml │ │ ├── charts │ │ └── terriamap │ │ │ ├── Chart.yaml │ │ │ ├── templates │ │ │ ├── configmap-client.yaml │ │ │ ├── configmap-server.yaml │ │ │ ├── deployment.yaml │ │ │ └── service.yaml │ │ │ └── values.yaml │ │ ├── requirements.yaml │ │ ├── templates │ │ └── _helpers.tpl │ │ └── values.yaml ├── kubernetes │ └── rbac-config.yaml └── varnish │ └── default.vcl ├── doc └── deploying │ └── deploying-to-aws.md ├── entry.js ├── gulpfile.js ├── index.js ├── lib ├── Core │ └── loadPlugins.ts ├── Styles │ ├── globe.gif │ ├── loader.css │ ├── variables-overrides.scss │ └── variables.scss └── Views │ ├── AboutButton.jsx │ ├── DevelopmentDisclaimerPreamble.html │ ├── GlobalDisclaimer.html │ ├── PreviewLink.html │ ├── UserInterface.jsx │ ├── global.scss │ ├── render.jsx │ └── showGlobalDisclaimer.ts ├── package.json ├── plugins.ts ├── serverconfig.json ├── terria-logo.png ├── tsconfig.json ├── wwwroot ├── 404.html ├── 500.html ├── SpecRunner.html ├── about.html ├── config.json ├── favicon.ico ├── favicons │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── browserconfig.xml │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── manifest.json │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── help │ ├── css │ │ ├── bootstrap-theme.css │ │ ├── bootstrap-theme.css.map │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap-theme.min.css.map │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ ├── bootstrap.min.css.map │ │ └── custom.css │ ├── data-catalogue.html │ ├── data-workbench.html │ ├── faq.html │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── help.html │ ├── img │ │ ├── Comms.jpg │ │ ├── Finalist-Innovation.gif │ │ ├── GA-dark.png │ │ ├── data-catalogue.jpg │ │ ├── data-workbench.jpg │ │ ├── data61-white.jpg │ │ ├── iawards.png │ │ ├── map-controls.jpg │ │ ├── map-settings.jpg │ │ ├── nm-logo.png │ │ └── pmc-stacked.jpg │ ├── js │ │ ├── affix.js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ └── npm.js │ ├── map-navigation.html │ └── privacy.html ├── images │ ├── Dept_of_Comms-Reg-Stacked-Press_0.jpg │ ├── Finalist-Innovation.gif │ ├── aremi.jpg │ ├── aurin-map.jpg │ ├── basemaps │ │ ├── australian-topo.png │ │ ├── bing-aerial-labels.png │ │ ├── bing-aerial.png │ │ ├── bing-maps-roads.png │ │ └── natural-earth.png │ ├── branding.png │ ├── data61-white-bg-huge.jpg │ ├── geoscience_stacked.jpg │ ├── nationalmap-logo.png │ ├── neii.jpg │ ├── nicta-logo.png │ ├── nicta.png │ ├── northernaustralia.jpg │ ├── solar.png │ ├── square.png │ ├── terrarium.png │ ├── terria_logo.png │ ├── welcome-bg.jpg │ └── wind.png ├── index.ejs ├── init │ └── simple.json ├── languages │ └── en │ │ └── languageOverrides.json ├── lowpoly_bus │ ├── attribution.txt │ ├── scene.bin │ ├── scene.gltf │ └── textures │ │ ├── CARRO3PCARRO1P1C1greytire_baseColor.png │ │ └── onibus1body1_baseColor.png ├── privacy.html ├── public │ ├── css │ │ ├── bootstrap.css │ │ ├── bootstrap.min.css │ │ └── custom.css │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ ├── img │ │ ├── Comms.jpg │ │ ├── Finalist-Innovation.gif │ │ ├── GA-dark.png │ │ ├── GA.png │ │ ├── Gov_NICTA_NM_logos.png │ │ ├── InfoButton.png │ │ ├── ZoomHome.png │ │ ├── ZoomIn.png │ │ ├── ZoomOut.png │ │ ├── base-maps.png │ │ ├── compass-control.png │ │ ├── data-catalogue-groups.png │ │ ├── data-catalogue-subgroups.png │ │ ├── data61-white.jpg │ │ ├── data61.png │ │ ├── dragIcon.png │ │ ├── dragIconLight.png │ │ ├── glyphicons_067_cleaning.png │ │ ├── glyphicons_094_vector_path_square.png │ │ ├── glyphicons_095_vector_path_circle.png │ │ ├── glyphicons_096_vector_path_polygon.png │ │ ├── glyphicons_097_vector_path_line.png │ │ ├── glyphicons_242_google_maps.png │ │ ├── iawards.png │ │ ├── nm-logo.png │ │ ├── now-viewing.png │ │ ├── pmc-stacked.jpg │ │ └── search-tab.png │ └── js │ │ ├── bootstrap.js │ │ └── bootstrap.min.js ├── status.php └── test │ ├── 2011Census_AUST_CED.csv │ ├── 2011Census_AUST_SA4.csv │ ├── 2011Census_AUST_STE.csv │ ├── 3d │ └── geelong │ │ ├── geelong_mini_demo_bin_linux_v1.0-draft_x64.gltf │ │ ├── license.txt │ │ ├── readme.txt │ │ ├── smooth.czml │ │ └── terrain.czml │ ├── NSW_LGA_NEXIS_201212.csv │ ├── SEIFA_POA_2011.csv │ ├── abs_file │ ├── 2011Census_B15_AUST.json │ └── 2011Census_B15_AUST_SA3_short.csv │ ├── airports.zip │ ├── all_birds.czml │ ├── bigInfobox.czml │ ├── bike_racks.geojson │ ├── cemeteries.geojson │ ├── countries.csv │ ├── csv-geo-au │ ├── cd.csv │ ├── ced_code_2011.csv │ ├── ced_code_2013.csv │ ├── gccsa.csv │ ├── iare.csv │ ├── iloc.csv │ ├── ireg.csv │ ├── lga_code_2011.csv │ ├── lga_code_2013.csv │ ├── lga_code_2015.csv │ ├── phn.csv │ ├── ra.csv │ ├── sla.csv │ ├── sos.csv │ ├── sosr.csv │ ├── sua.csv │ ├── sua_name.csv │ ├── tr_code_2013.csv │ ├── tr_code_2015.csv │ └── ucl.csv │ ├── droughts.csv │ ├── earthquakes.csv │ ├── gme.geojson │ ├── images │ ├── place32.png │ └── pow32.png │ ├── incidents.csv │ ├── incidents_notime.csv │ ├── localphotostories20092014.csv │ ├── sample.gpx │ ├── simple.czml │ ├── simple.kml │ ├── states_stem_2013.csv │ ├── vic_police.kml │ └── vic_police.kmz └── yarn.lock /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "context": "..", 3 | 4 | "build": { 5 | "dockerfile": "../Dockerfile", 6 | "target": "develop" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.scss] 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | module.exports = { 4 | extends: "./node_modules/terriajs/.eslintrc.js" 5 | }; 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | CHANGES.md merge=union 2 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: CI 5 | 6 | on: [push, pull_request] 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | strategy: 13 | matrix: 14 | node-version: [20.x, 22.x, 23.x] 15 | 16 | steps: 17 | - uses: actions/checkout@v2 18 | - name: Use Node.js ${{ matrix.node-version }} 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - run: rm -rf node_modules && yarn install --frozen-lockfile 23 | - run: yarn gulp lint release 24 | env: 25 | NODE_OPTIONS: "--max_old_space_size=4096" 26 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | release: 5 | types: [published] 6 | workflow_dispatch: 7 | 8 | env: 9 | REGISTRY: ghcr.io 10 | IMAGE_NAME: ${{ github.repository }} 11 | 12 | permissions: 13 | packages: write 14 | 15 | jobs: 16 | build: 17 | runs-on: ubuntu-latest 18 | 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v2 22 | 23 | - name: Set up QEMU 24 | uses: docker/setup-qemu-action@v1 25 | 26 | - name: Set up Docker Buildx 27 | uses: docker/setup-buildx-action@v1 28 | 29 | - name: Login to GHCR 30 | uses: docker/login-action@v1 31 | with: 32 | registry: ghcr.io 33 | username: ${{ github.repository_owner }} 34 | password: ${{ secrets.GITHUB_TOKEN }} 35 | 36 | - name: Tag image 37 | id: meta 38 | uses: docker/metadata-action@v3 39 | with: 40 | images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} 41 | tags: | 42 | type=semver,pattern={{version}} 43 | 44 | - name: Build and push 45 | uses: docker/build-push-action@v2 46 | with: 47 | platforms: linux/amd64,linux/arm64 48 | tags: ${{ steps.meta.outputs.tags }} 49 | push: true 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .idea/ 3 | wwwroot/build/ 4 | wwwroot/doc/ 5 | wwwroot/index.html 6 | npm-debug.log 7 | version.js 8 | version.json 9 | wwwroot/init/nm.json 10 | datasources/00_National_Data_Sets.json 11 | .DS_Store 12 | .localized 13 | .sass-cache 14 | /terriajs.pid 15 | /terriajs-server.log 16 | 17 | /wwwroot/editor/ 18 | /error.log 19 | /error.log 20 | /output.log 21 | privateserverconfig.json 22 | wwwroot/privateconfig.json 23 | deploy/packages/ 24 | deploy/work/ 25 | packages/ 26 | pancake/ 27 | yarn-error.log 28 | .npmrc 29 | 30 | package-lock.json 31 | .nvmrc 32 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/.gitmodules -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx pretty-quick --staged 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .localized 3 | /terriajs.pid 4 | /error.log 5 | /output.log -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # ===================== 2 | # From .gitignore. Update this list when .gitignore changes 3 | node_modules/ 4 | .idea/ 5 | wwwroot/build/ 6 | wwwroot/doc/ 7 | wwwroot/index.html 8 | npm-debug.log 9 | version.js 10 | wwwroot/init/nm.json 11 | datasources/00_National_Data_Sets.json 12 | .DS_Store 13 | .localized 14 | .sass-cache 15 | /terriajs.pid 16 | /terriajs-server.log 17 | 18 | /wwwroot/editor/ 19 | /error.log 20 | /error.log 21 | /output.log 22 | privateserverconfig.json 23 | wwwroot/privateconfig.json 24 | deploy/packages/ 25 | deploy/work/ 26 | packages/ 27 | pancake/ 28 | yarn-error.log 29 | 30 | package-lock.json 31 | 32 | # End of .gitignore copy 33 | # ===================== 34 | 35 | # Generated files 36 | yarn.lock 37 | .yarn/releases/ 38 | 39 | # wwwroot 40 | wwwroot/help/ 41 | wwwroot/public/ 42 | wwwroot/*.html 43 | 44 | 45 | ckanext-cesiumpreview 46 | deploy/helm/terria/charts/terriamap/templates/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "none" 3 | } 4 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | lastUpdateCheck 1641769253305 6 | yarn-path ".yarn/releases/yarn-1.18.0.js" 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # develop container 2 | FROM node:20 AS develop 3 | 4 | # build container 5 | FROM node:20 AS build 6 | USER node 7 | 8 | COPY --chown=node:node . /app 9 | 10 | WORKDIR /app 11 | 12 | RUN yarn install --network-timeout 1000000 13 | RUN yarn gulp release 14 | 15 | # deploy container 16 | FROM node:20-slim AS deploy 17 | 18 | USER node 19 | 20 | WORKDIR /app 21 | 22 | # Without the chown when copying directories, wwwroot is owned by root:root. 23 | COPY --from=build --chown=node:node /app/wwwroot wwwroot 24 | COPY --from=build --chown=node:node /app/node_modules node_modules 25 | COPY --from=build /app/serverconfig.json serverconfig.json 26 | COPY --from=build /app/index.js index.js 27 | COPY --from=build /app/package.json package.json 28 | COPY --from=build /app/version.js version.js 29 | 30 | EXPOSE 3001 31 | ENV NODE_ENV=production 32 | CMD [ "node", "./node_modules/terriajs-server/lib/app.js", "--config-file", "serverconfig.json" ] 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Terria Map 2 | 3 | [![Build Status](https://github.com/TerriaJS/TerriaMap/actions/workflows/ci.yml/badge.svg?branch=main&event=push)](https://github.com/TerriaJS/TerriaMap/actions/workflows/ci.yml) [![Docs](https://img.shields.io/badge/docs-online-blue.svg)](https://docs.terria.io/) 4 | 5 | ![Terria logo](terria-logo.png "Terria logo") 6 | 7 | This is a complete website built using the TerriaJS library. See the [TerriaJS README](https://github.com/TerriaJS/TerriaJS) for information about TerriaJS, and getting started using this repository. 8 | 9 | For instructions on how to deploy your map, see [the documentation here](doc/deploying/deploying-to-aws.md). 10 | 11 | To get in touch: 12 | 13 | - Join the [TerriaJS Github Discussion](https://github.com/TerriaJS/terriajs/discussions) 14 | - Raise issues in the [TerriaJS Github issue tracker](https://github.com/TerriaJS/terriajs/issues/new) 15 | 16 | --- 17 | 18 | ## Major announcements 19 | 20 | Following is a list of major announcements and upgrades that may affect users maintaining a fork (copied from [TerriaJS announcements](https://github.com/TerriaJS/terriajs/discussions/categories/announcements)). For a full list of changes to TerriaMap, including the latest versions of TerriaJS included with each release please refer to [CHANGES.md](https://github.com/TerriaJS/TerriaMap/blob/main/CHANGES.md). 21 | 22 | ### We have released TerriaJS v8.3.0 (2023-05-22) 23 | 24 | Terriajs version `8.3.0` includes a few breaking changes: 25 | 26 | - Upgrade to Typescript version 4.9.x 27 | - Upgrade to Mobx version 6.9.x 28 | 29 | This might affect your map only if it has local model layer modifications like your own custom data provider (aka catalog items). Otherwise you can proceed like any other normal upgrade. For instructions on upgrading your maps with local modiciations please refer to the [upgrade guide](https://github.com/TerriaJS/terriajs/discussions/6787). 30 | 31 | ### PM2 no longer supported (2023-03-21) 32 | 33 | We've removed pm2 from our dependencies and no longer ship configuration for running terriajs-server with pm2. 34 | 35 | `npm start` now runs in forground because it no longer uses pm2. A new task `gulp dev` has been introduced to make development easier. It runs terriajs-server and starts `gulp watch` - which watches for changes and incrementally builds. See https://github.com/TerriaJS/terriajs/discussions/6731 for more information on why and what to do. 36 | 37 | ### We just reformatted our codebase with [Prettier](https://prettier.io/) (2022-08-29) 38 | 39 | This may cause large merge conflicts when you merge `main` into your fork. See https://github.com/TerriaJS/terriajs/discussions/6517 for instructions on how to merge this formatting change. 40 | 41 | ### We have released TerriaJS v8 (2021-08-13) 42 | 43 | What this means: 44 | 45 | - [Our new main branch of TerriaMap](https://github.com/TerriaJS/TerriaMap/tree/main) now uses v8+ of TerriaJS 46 | - [The terriajs7 branch of TerriaMap](https://github.com/TerriaJS/TerriaMap/tree/terriajs7) will use v7 TerriaJS, but will not receive further updates 47 | - We have a [migration guide](https://docs.terria.io/guide/contributing/migration-guide/) available for users of TerriaJS v7 to help them upgrade their applications to TerriaJS v8 48 | - Please chat to us and the community in our [GitHub discussions forum](https://github.com/TerriaJS/terriajs/discussions) 49 | -------------------------------------------------------------------------------- /architecture/0000-record-architecture-decisions.md: -------------------------------------------------------------------------------- 1 | # 0. Record architecture decisions 2 | 3 | Date: 2019-07-18 4 | 5 | ## Status 6 | 7 | Accepted 8 | 9 | ## Context 10 | 11 | We need to record the architectural decisions made on this project. 12 | 13 | ## Decision 14 | 15 | We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). 16 | 17 | ## Consequences 18 | 19 | We will have to write docs. 😱 20 | 21 | See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools). 22 | -------------------------------------------------------------------------------- /architecture/0001-npm-lockfiles.md: -------------------------------------------------------------------------------- 1 | # 1. npm lockfiles - use package-lock.json 2 | 3 | Date: 2020-03-02 4 | 5 | ## Status 6 | 7 | Accepted 8 | 9 | ## Context 10 | 11 | I'm unsure about this one. 12 | 13 | Our lockfile situation is a little messy. 14 | 15 | Recently our TerriaMap CI builds have been failing, probably due to a recent change via travis using `yarn --frozen-lockfile` & failing when yarn's equivalent package-lock.json (yarn.lock) is out of sync (https://github.com/travis-ci/travis-build/pull/1858). 16 | 17 | Removing yarn.lock fixes CI as travis currently thinks it's a yarn-developed project. 18 | 19 | I don't fully understand why we have yarn.lock commited in the first place, however we DO recommend & use yarn when developing using the workspace feature. 20 | 21 | Other things to note for this proposal: 22 | 23 | - greenkeeper is set up to update package-lock.json and not yarn.lock 24 | - we always cite npm in docs 25 | - i've always used npm when doing release builds 26 | - our other projects using things like github actions (NSW DT) use `npm ci` and not yarn 27 | 28 | Some snippets from slack a little later: 29 | 30 | (wing) 31 | 32 | > maybe a simple way forward to unstuck us for now is force travis to use npm, continue to commit yarn lock (because lock files should be committed at least on the terriamap level), and revise again if needed. 33 | 34 | (emma) 35 | 36 | > my vote is for yarn and not npm because we use stuff like yarn workspaces and also yarn lets you do stuff like specific version relsoutions 37 | 38 | (kevin) 39 | 40 | > so I used to always update both yarn.lock and package-lock.json when updating TerriaMap to use a new terriajs 41 | > that way our users can use the tool they prefer 42 | 43 | > if you just .gitignore yarn.lock, it sorta just hides problems.. cause people who use yarn end up generating one, and then their system uses from that then on without them realizing it 44 | 45 | (wing) 46 | 47 | > yeah it's seeming more that we continue to use both, but we should update our release process to reflect the context & decisions made - the primary reason we are using yarn in dev is for workspaces right? i know for me that's why i use yarn in dev. but npm is the default tool that ships with node. so given that, we continue to ship with npm, and we dev however we like internally with yarn? 48 | 49 | (crispy stephen) 50 | 51 | > We used to use npm link, and then npm-git-dev when link failed us. Yarn is just another tool on top of npm we’re using to make dev easier. Unfortunately it comes with it’s own lockfiles and opinions, but it’s still way better than any other way we can dev with npm at the moment 52 | 53 | ## Decision 54 | 55 | Keep both, but force travis to use npm, npm ci, package-lock.json etc(?), at the cost of having to keep yarn.lock up to date as well. 56 | 57 | Continue building production/"gulp release" builds of TerriaMap using package-lock.json, keeping yarn.lock in source as well. 58 | 59 | ## Consequences 60 | 61 | We still use two different tools for generating lock files, npm for releasing, yarn for developing. This could lead to instances where there are 'non-reproducible dev builds' (but always-reproducible production builds), even though a given `package.json` should resolve to roughly the same versions with the two tools. 62 | -------------------------------------------------------------------------------- /buildprocess/configureWebpackForPlugins.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const fs = require("fs"); 3 | 4 | /** 5 | * RegExp pattern used for matching plugin package names for applying various rules. 6 | * 7 | * The pattern is a bit permissive, matching any names that begin with 8 | * "terriajs-" and has the word "plugin" anywhere in it. It will match 9 | * "terriajs-plugin-sample", "terriajs-sample-plugin" as well as 10 | * "terriajs-some-plugin-for-something". 11 | */ 12 | const PluginPackagePattern = /(^@terriajs\/plugin-*|^terriajs-.*plugin)/; 13 | 14 | function configureWebpackForPlugins(config) { 15 | config.module.rules.push(createPluginIconsRule()); 16 | return config; 17 | } 18 | 19 | /** 20 | * Creates a webpack rule for processing svg icons from terriajs plugins using `svg-sprite-loader`. 21 | * We check two things to decide whether to include an icon: 22 | * 1. The icon belongs to assets/icons folder 23 | * 2. assets/icons/../../package.json has a name field with `terriajs-plugin-` prefix 24 | * 25 | * @returns A webpack module rule 26 | */ 27 | function createPluginIconsRule() { 28 | const packageNames = {}; 29 | return { 30 | test: /\.svg$/, 31 | include(svgPath) { 32 | const dirName = path.dirname(svgPath); 33 | const isIconDir = dirName.endsWith(path.join("assets", "icons")); 34 | if (!isIconDir) { 35 | return false; 36 | } 37 | 38 | const packageName = readPackageName( 39 | path.resolve(dirName, "..", "..", "package.json") 40 | ); 41 | 42 | const isTerriaJsPlugin = packageName 43 | ? PluginPackagePattern.test(packageName) 44 | : false; 45 | 46 | packageNames[svgPath] = packageName; 47 | return isTerriaJsPlugin; 48 | }, 49 | loader: require.resolve("svg-sprite-loader"), 50 | options: { 51 | esModule: false, 52 | symbolId: (svgPath) => { 53 | // Generate a symbolId by concatenating the package name and the icon name 54 | const packageName = packageNames[svgPath] || "terriajs-plugin-"; 55 | const iconName = path.basename(svgPath, ".svg"); 56 | const symbolId = `${packageName}-${iconName}`; 57 | return symbolId; 58 | } 59 | } 60 | }; 61 | } 62 | 63 | const packageJsonNames = {}; 64 | function readPackageName(packageFile) { 65 | if (packageJsonNames[packageFile]) { 66 | return packageJsonNames[packageFile]; 67 | } else { 68 | try { 69 | const packageJson = JSON.parse(fs.readFileSync(packageFile)); 70 | packageJsonNames[packageFile] = packageJson 71 | ? packageJson.name 72 | : undefined; 73 | return packageJsonNames[packageFile]; 74 | } catch { 75 | return; 76 | } 77 | } 78 | } 79 | 80 | module.exports = configureWebpackForPlugins; 81 | -------------------------------------------------------------------------------- /buildprocess/generate-region-ids.sh: -------------------------------------------------------------------------------- 1 | # This script downloads lists of region map codes from our WFS region mapping server, and transforms them into a minimal 2 | # JSON file. This is faster to serve, smaller to transfer, and faster to parse. 3 | # It should be run whenever boundary layers are added or changed. 4 | 5 | # This JQ filter can be used to automatically update regionMapping.json to follow the naming convention defined here: 6 | # .regionWmsMap |= (map_values(.regionIdList = @uri "data/regionids/\( .layerName)_\(.regionProp).json")) 7 | # To use it: 8 | # 1. Go to jqplay.org 9 | # 2. Paste the filter in the top box 10 | # 3. Paste the contents of regionmapping.json into the JSON box 11 | # 4. Copy the Result back out. 12 | 13 | OUTPUTDIR="../wwwroot/data/regionids" 14 | 15 | function makeJSON { 16 | LAYER=$1 # Name of the GeoServer layer 17 | COLUMN=$2 # Name of the column/attribute within that layer that we want to get IDs for (assumed to be URL safe) 18 | QUOTES=$3 # Optional double quote mark to insert around non-numeric values 19 | LAYERU=${LAYER//:/%3A} # URL-encoded form of the layer name 20 | 21 | echo "$LAYER, $COLUMN" 22 | 23 | wget --quiet -O response "http://regionmap-dev.nationalmap.nicta.com.au/region_map/ows?service=wfs&version=2.0&request=getPropertyValue&typenames=${LAYERU}&valueReference=${COLUMN}" 24 | 25 | # Add commas between items 26 | perl -pi -e "s/<\/wfs:member>/${QUOTES},${QUOTES}/g" response 27 | 28 | # Strip all other tags 29 | perl -pi -e 's/<[^>]*>//g' response 30 | 31 | # Add JSON header: object with an array 32 | perl -0777 -pi -e "s/^/{\"layer\":\"${LAYER}\",\"property\":\"${COLUMN}\",\"values\": [${QUOTES}/" response 33 | 34 | # Close JSON array and object 35 | echo "${QUOTES}]}" >> response 36 | mv response "${OUTPUTDIR}/${LAYER//:/-}_${COLUMN}.json" 37 | } 38 | 39 | echo "Generating region ID lists and saving to ${OUTPUTDIR}." 40 | 41 | mkdir -p $OUTPUTDIR 42 | # In an ideal world, we'd run this automatically off regionmapping.json 43 | 44 | makeJSON "region_map:FID_SA1_2011_AUST" SA1_MAIN11 45 | makeJSON "region_map:FID_SA1_2011_AUST" SA1_7DIG11 46 | makeJSON "region_map:FID_SA2_2011_AUST" SA2_MAIN11 47 | makeJSON "region_map:FID_SA2_2011_AUST" SA2_5DIG11 48 | makeJSON "region_map:FID_SA2_2011_AUST" SA2_NAME11 '"' 49 | makeJSON "region_map:FID_SA3_2011_AUST" SA3_CODE11 50 | makeJSON "region_map:FID_SA3_2011_AUST" SA3_NAME11 '"' 51 | makeJSON "region_map:FID_SA4_2011_AUST" SA4_CODE11 52 | makeJSON "region_map:FID_SA4_2011_AUST" SA4_NAME11 '"' 53 | makeJSON "region_map:FID_LGA_2015_AUST" LGA_CODE15 54 | makeJSON "region_map:FID_LGA_2015_AUST" LGA_NAME15 '"' 55 | makeJSON "region_map:FID_LGA_2015_AUST" STE_NAME15 '"' # disambiguation column 56 | makeJSON "region_map:FID_LGA_2013_AUST" LGA_CODE13 57 | makeJSON "region_map:FID_LGA_2013_AUST" LGA_NAME13 '"' 58 | makeJSON "region_map:FID_LGA_2013_AUST" STE_NAME11 '"' # yes, 11... 59 | makeJSON "region_map:FID_LGA_2011_AUST" LGA_CODE11 60 | makeJSON "region_map:FID_LGA_2011_AUST" LGA_NAME11 '"' 61 | makeJSON "region_map:FID_LGA_2011_AUST" STE_NAME11 '"' # disambiguation column 62 | makeJSON "region_map:FID_SSC_2011_AUST" SSC_CODE 63 | makeJSON "region_map:FID_SSC_2011_AUST" SSC_NAME '"' 64 | makeJSON "region_map:FID_POA_2011_AUST" POA_CODE '"' # leading zeroes 65 | makeJSON "region_map:FID_COM20111216_ELB_region" ELECT_DIV '"' 66 | makeJSON "region_map:FID_CED_2011_AUST" CED_CODE 67 | makeJSON "region_map:FID_CED_2011_AUST" CED_NAME '"' 68 | makeJSON "region_map:FID_CED_2013_AUST" CED_CODE13 69 | makeJSON "region_map:FID_CED_2013_AUST" CED_NAME13 '"' 70 | makeJSON "region_map:FID_SED_2011_AUST" SED_CODE 71 | makeJSON "region_map:FID_SED_2011_AUST" SED_NAME '"' 72 | makeJSON "region_map:FID_STE_2011_AUST" STE_CODE11 73 | makeJSON "region_map:FID_STE_2011_AUST" STE_NAME11 '"' 74 | makeJSON "region_map:FID_TM_WORLD_BORDERS" ISO2 '"' 75 | makeJSON "region_map:FID_TM_WORLD_BORDERS" ISO3 '"' 76 | makeJSON "region_map:FID_TM_WORLD_BORDERS" NAME '"' 77 | makeJSON "region_map:FID_AUS_2011_AUST" AUS_CODE # lol 78 | makeJSON "region_map:FID_GCCSA_2011_AUST" GCC_CODE11 '"' 79 | makeJSON "region_map:FID_GCCSA_2011_AUST" GCC_NAME11 '"' 80 | makeJSON "region_map:FID_SUA_2011_AUST" SUA_CODE11 81 | makeJSON "region_map:FID_SUA_2011_AUST" SUA_NAME11 '"' 82 | makeJSON "region_map:FID_SOS_2011_AUST" SOS_CODE11 83 | makeJSON "region_map:FID_SOSR_2011_AUST" SSR_CODE11 84 | makeJSON "region_map:FID_UCL_2011_AUST" UCL_CODE11 85 | makeJSON "region_map:FID_IREG_2011_AUST" IR_CODE11 86 | makeJSON "region_map:FID_ILOC_2011_AUST" IL_CODE11 87 | makeJSON "region_map:FID_IARE_2011_AUST" IA_CODE11 88 | makeJSON "region_map:FID_RA_2011_AUST" RA_CODE11 89 | makeJSON "region_map:FID_TR_2015_AUST" TR_CODE15 '"' 90 | makeJSON "region_map:FID_TR_2013_AUST" TR_CODE13 '"' 91 | makeJSON "region_map:FID_PHN_boundaries_AUS_Sep2015_V5" PHN_Code '"' 92 | -------------------------------------------------------------------------------- /buildprocess/split-catalog.sh: -------------------------------------------------------------------------------- 1 | SOURCE=wwwroot/init/nm.json 2 | OUTDIR=datasources 3 | 4 | if [[ -z `which jq` ]]; then 5 | echo "You need to install jq, in order to use this. Try one of: " 6 | echo " sudo apt-get install jq" 7 | echo " sudo brew install jq" 8 | exit 9 | fi 10 | 11 | 12 | echo "Splitting $SOURCE into individual files in ${OUTDIR}/" 13 | 14 | read -p "Continue? (Y/N)" choice 15 | echo 16 | case "$choice" in 17 | y|Y ) ;; 18 | * ) exit ;; 19 | esac 20 | 21 | mkdir -p $OUTDIR 22 | 23 | jq "del(.catalog)" < $SOURCE > $OUTDIR/000_settings.json 24 | 25 | i=0 26 | while true; do 27 | name=`jq -r ".catalog[$i].name" < $SOURCE` 28 | if [[ $name == "null" ]]; then 29 | exit 30 | fi 31 | name=`printf "%02d" $i`_${name// /_}.json 32 | echo $name 33 | jq "{catalog:([.catalog[$i]])}" < $SOURCE > $OUTDIR/$name 34 | ((i++)) 35 | 36 | done 37 | 38 | fi 39 | -------------------------------------------------------------------------------- /buildprocess/split-groups.sh: -------------------------------------------------------------------------------- 1 | SOURCE=datasources/00_National_Data_Sets.json 2 | OUTDIR=datasources/00_National_Data_Sets 3 | 4 | if [[ -z `which jq` ]]; then 5 | echo "You need to install jq, in order to use this. Try one of: " 6 | echo " sudo apt-get install jq" 7 | echo " sudo brew install jq" 8 | exit 9 | fi 10 | 11 | 12 | echo "Replacing files in ${OUTDIR}/ with individual groups split from $SOURCE" 13 | 14 | read -p "Continue? (Y/N)" choice 15 | echo 16 | case "$choice" in 17 | y|Y ) ;; 18 | * ) exit ;; 19 | esac 20 | 21 | mkdir -p "$OUTDIR" 22 | rm "$OUTDIR"/*.json 23 | 24 | i=0 25 | while true; do 26 | name=`jq -r ".catalog[0].items[$i].name" < "$SOURCE"` 27 | if [[ $name == "null" ]]; then 28 | exit 29 | fi 30 | name="00_`printf "%02d" $i`_${name// /_}.json" 31 | echo $name 32 | jq ".catalog=([.catalog[0]|.items = [.items[$i]]])" < "$SOURCE" > "$OUTDIR/$name" 33 | ((i++)) 34 | 35 | done 36 | rm "$SOURCE" -------------------------------------------------------------------------------- /buildprocess/webpack.config.js: -------------------------------------------------------------------------------- 1 | const configureWebpackForTerriaJS = require("terriajs/buildprocess/configureWebpack"); 2 | const configureWebpackForPlugins = require("./configureWebpackForPlugins"); 3 | const MiniCssExtractPlugin = require("mini-css-extract-plugin"); 4 | const path = require("path"); 5 | 6 | /** 7 | * Webpack config for building terriamap 8 | */ 9 | module.exports = function (devMode) { 10 | // Base configuration 11 | const config = { 12 | mode: devMode ? "development" : "production", 13 | entry: "./entry.js", 14 | output: { 15 | path: path.resolve(__dirname, "..", "wwwroot", "build"), 16 | filename: "TerriaMap.js", 17 | publicPath: "build/", 18 | sourcePrefix: "", // to avoid breaking multi-line string literals by inserting extra tabs. 19 | globalObject: "(self || window)" // to avoid breaking in web worker (https://github.com/webpack/webpack/issues/6642) 20 | }, 21 | devtool: devMode ? "eval-cheap-module-source-map" : false, 22 | 23 | module: { 24 | // following rules are for terriamap source files 25 | // rules for building terriajs are configured in configureWebpackForTerriaJS 26 | rules: [ 27 | // build source files 28 | { 29 | test: /\.(ts|js)x?$/, 30 | include: [ 31 | path.resolve(__dirname, "..", "index.js"), 32 | path.resolve(__dirname, "..", "entry.js"), 33 | path.resolve(__dirname, "..", "plugins.ts"), 34 | path.resolve(__dirname, "..", "lib") 35 | ], 36 | use: [ 37 | { 38 | loader: "babel-loader", 39 | options: { 40 | cacheDirectory: true, 41 | presets: [ 42 | [ 43 | "@babel/preset-env", 44 | { 45 | corejs: 3, 46 | useBuiltIns: "usage" 47 | } 48 | ], 49 | ["@babel/preset-react", { runtime: "automatic" }], 50 | ["@babel/preset-typescript", { allowNamespaces: true }] 51 | ], 52 | plugins: [ 53 | ["@babel/plugin-proposal-decorators", { legacy: true }], 54 | "babel-plugin-styled-components" 55 | ] 56 | } 57 | } 58 | ] 59 | }, 60 | // import html file as string 61 | { 62 | test: /\.html$/, 63 | include: path.resolve(__dirname, "..", "lib", "Views"), 64 | type: "asset/source" 65 | }, 66 | // import images 67 | { 68 | test: /\.(png|jpg|svg|gif)$/, 69 | include: path.resolve(__dirname, "..", "wwwroot", "images"), 70 | type: "asset" // inlines as data url if size < 8kb 71 | }, 72 | // import globe.gif 73 | { 74 | test: /globe\.gif$/, 75 | include: path.resolve(__dirname, "..", "lib", "Styles"), 76 | type: "asset", 77 | parser: { 78 | dataUrlCondition: { 79 | maxSize: 65536 // < inline as data url if size < 64k 80 | } 81 | } 82 | }, 83 | // handle css files - inject in html tag 84 | { 85 | test: /loader\.css$/, 86 | include: [path.resolve(__dirname, "..", "lib", "Styles")], 87 | use: ["style-loader", "css-loader"] 88 | }, 89 | // handle scss files 90 | { 91 | test: /\.scss$/, 92 | include: [path.resolve(__dirname, "..", "lib")], 93 | use: [ 94 | { 95 | loader: MiniCssExtractPlugin.loader, 96 | options: { 97 | // Use default export for css modules as opposed to the more 98 | // efficient named exports. This is required because most of 99 | // legacy stylesheets in TerriaJS assumes default export style. 100 | defaultExport: true 101 | } 102 | }, 103 | { 104 | loader: "css-loader", 105 | options: { 106 | sourceMap: true, 107 | modules: { 108 | localIdentName: "tjs-[name]__[local]", 109 | exportLocalsConvention: "camelCase" 110 | }, 111 | importLoaders: 2 112 | } 113 | }, 114 | { 115 | loader: "resolve-url-loader", 116 | options: { 117 | sourceMap: false 118 | } 119 | }, 120 | { 121 | loader: "sass-loader", 122 | options: { 123 | api: "modern", 124 | sassOptions: { 125 | sourceMap: true 126 | } 127 | } 128 | } 129 | ] 130 | } 131 | ] 132 | }, 133 | plugins: [ 134 | // Extract SASS styles into a seperate stylesheet 135 | new MiniCssExtractPlugin({ 136 | filename: "TerriaMap.css", 137 | ignoreOrder: true 138 | }) 139 | ], 140 | resolve: { 141 | alias: {}, 142 | modules: ["node_modules"] 143 | } 144 | }; 145 | config.resolve.alias["terriajs-variables"] = require.resolve( 146 | "../lib/Styles/variables-overrides.scss" 147 | ); 148 | 149 | return configureWebpackForPlugins( 150 | configureWebpackForTerriaJS({ 151 | terriaJSBasePath: path.dirname(require.resolve("terriajs/package.json")), 152 | config, 153 | devMode, 154 | MiniCssExtractPlugin 155 | }) 156 | ); 157 | }; 158 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | 47 | # Translations 48 | *.mo 49 | *.pot 50 | 51 | # Django stuff: 52 | *.log 53 | 54 | # Sphinx documentation 55 | docs/_build/ 56 | 57 | # PyBuilder 58 | target/ 59 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/README.md: -------------------------------------------------------------------------------- 1 | National Map CKAN Preview plugin 2 | ================================ 3 | 4 | A plugin to CKAN to use National Map as a previewer for data.gov.au. 5 | 6 | The goal of this project is to be open source when it releases, so all work 7 | should be carried out with that in mind. 8 | 9 | Uses https://github.com/mapbox/geojson-extent 10 | 11 | ### Getting Started ### 12 | 13 | Check the [wiki](https://github.com/NICTA/nationalmap/wiki) for 14 | more information about how to get this working with CKAN 15 | 16 | #### From Git Repository #### 17 | * Log in to github 18 | * Fork the [NationalMap](https://github.com/NICTA/nationalmap.git) repo into your personal github account using the github UI. 19 | * Clone your forks locally so data is inside subspace at root level e.g. 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/ckanext-cesiumpreview/__init__.py -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/__init__.py: -------------------------------------------------------------------------------- 1 | # this is a namespace package 2 | try: 3 | import pkg_resources 4 | pkg_resources.declare_namespace(__name__) 5 | except ImportError: 6 | import pkgutil 7 | __path__ = pkgutil.extend_path(__path__, __name__) 8 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/ckanext-cesiumpreview/ckanext/__init__.pyc -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/__init__.py: -------------------------------------------------------------------------------- 1 | # this is a namespace package 2 | try: 3 | import pkg_resources 4 | pkg_resources.declare_namespace(__name__) 5 | except ImportError: 6 | import pkgutil 7 | __path__ = pkgutil.extend_path(__path__, __name__) 8 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/__init__.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/ckanext-cesiumpreview/ckanext/cesiumpreview/__init__.pyc -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/plugin.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | import ckan.plugins as p 4 | 5 | from ckan.common import json 6 | 7 | log = logging.getLogger(__name__) 8 | 9 | try: 10 | import os 11 | import ckanext.resourceproxy.plugin as proxy 12 | except ImportError: 13 | pass 14 | 15 | class CesiumPreview(p.SingletonPlugin): 16 | '''This extension adds Cesium. ''' 17 | p.implements(p.IConfigurer, inherit=True) 18 | p.implements(p.IConfigurable, inherit=True) 19 | if p.toolkit.check_ckan_version('2.3'): 20 | p.implements(p.IResourceView, inherit=True) 21 | else: 22 | p.implements(p.IResourcePreview, inherit=True) 23 | 24 | Cesium_Formats = ['wms','wfs','kml', 'kmz','gjson', 'geojson', 'czml'] 25 | proxy_is_enabled = False 26 | 27 | def update_config(self, config): 28 | p.toolkit.add_public_directory(config, 'theme/public') 29 | p.toolkit.add_template_directory(config, 'theme/templates') 30 | p.toolkit.add_resource('theme/public', 'ckanext-cesiumpreview') 31 | 32 | def configure(self, config): 33 | enabled = config.get('ckan.resource_proxy_enabled', False) 34 | self.proxy_is_enabled = enabled 35 | 36 | def can_preview(self, data_dict): 37 | resource = data_dict['resource'] 38 | format_lower = resource['format'].lower() 39 | if (format_lower == ''): 40 | format_lower = os.path.splitext(resource['url'])[1][1:].lower() 41 | # print format_lower 42 | if format_lower in self.Cesium_Formats: 43 | if resource.get('on_same_domain') or self.proxy_is_enabled: 44 | return {'can_preview': True, 'quality': 2} 45 | else: 46 | return {'can_preview': True, 47 | 'fixable': 'Enable resource_proxy', 48 | 'quality': 2} 49 | return {'can_preview': False} 50 | 51 | def info(self): return {'name': 'cesium_view', 'title': 'National Map Beta', 'always_available': True, 'default_title': 'National Map Beta', 'icon': 'globe' } 52 | 53 | def can_view(self, data_dict): 54 | resource = data_dict['resource'] 55 | format_lower = resource['format'].lower() 56 | if (format_lower == ''): 57 | format_lower = os.path.splitext(resource['url'])[1][1:].lower() 58 | # print format_lower 59 | if format_lower in self.Cesium_Formats: 60 | return True 61 | return False 62 | 63 | # def setup_template_variables(self, context, data_dict): 64 | # if (self.proxy_is_enabled 65 | # and not data_dict['resource']['on_same_domain']): 66 | # url = proxy.get_proxified_resource_url(data_dict) 67 | # p.toolkit.c.resource['url'] = url 68 | 69 | def preview_template(self, context, data_dict): 70 | return 'cesium.html' 71 | def view_template(self, context, data_dict): 72 | return 'cesium.html' 73 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/plugin.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/ckanext-cesiumpreview/ckanext/cesiumpreview/plugin.pyc -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/ckanext-cesiumpreview/ckanext/cesiumpreview/tests/__init__.py -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/tests/test_preview.py: -------------------------------------------------------------------------------- 1 | import pylons 2 | import paste.fixture 3 | 4 | import pylons.config as config 5 | 6 | import ckan.logic as logic 7 | import ckan.model as model 8 | import ckan.tests as tests 9 | import ckan.plugins as plugins 10 | import ckan.lib.helpers as h 11 | import ckanext.pdfpreview.plugin as previewplugin 12 | import ckan.lib.create_test_data as create_test_data 13 | import ckan.config.middleware as middleware 14 | 15 | 16 | class TestPdfPreview(tests.WsgiAppCase): 17 | 18 | @classmethod 19 | def setup_class(cls): 20 | wsgiapp = middleware.make_app(config['global_conf'], **config) 21 | plugins.load('pdf_preview') 22 | cls.app = paste.fixture.TestApp(wsgiapp) 23 | 24 | cls.p = previewplugin.PdfPreview() 25 | cls.p.proxy_is_enabled = False 26 | 27 | create_test_data.CreateTestData.create() 28 | 29 | context = { 30 | 'model': model, 31 | 'session': model.Session, 32 | 'user': model.User.get('testsysadmin').name 33 | } 34 | 35 | cls.package = model.Package.get('annakarenina') 36 | cls.resource = logic.get_action('resource_show')( 37 | context, {'id': cls.package.resources[1].id}) 38 | cls.resource['url'] = pylons.config.get( 39 | 'ckan.site_url', '//localhost:5000') 40 | cls.resource['format'] = 'pdf' 41 | logic.action.update.resource_update(context, cls.resource) 42 | 43 | @classmethod 44 | def teardown_class(cls): 45 | plugins.unload('pdf_preview') 46 | create_test_data.CreateTestData.delete() 47 | 48 | def test_can_preview(self): 49 | data_dict = { 50 | 'resource': { 51 | 'format': 'pdf', 52 | 'on_same_domain': True 53 | } 54 | } 55 | assert self.p.can_preview(data_dict)['can_preview'] 56 | 57 | data_dict = { 58 | 'resource': { 59 | 'format': 'x-pdf', 60 | 'on_same_domain': True 61 | } 62 | } 63 | assert self.p.can_preview(data_dict)['can_preview'] 64 | 65 | data_dict = { 66 | 'resource': { 67 | 'format': 'pdf', 68 | 'on_same_domain': True 69 | } 70 | } 71 | assert self.p.can_preview(data_dict)['can_preview'] 72 | 73 | data_dict = { 74 | 'resource': { 75 | 'format': 'pdf', 76 | 'on_same_domain': False 77 | } 78 | } 79 | assert not self.p.can_preview(data_dict)['can_preview'] 80 | 81 | def test_js_included(self): 82 | res_id = self.resource['id'] 83 | pack_id = self.package.name 84 | url = '/dataset/{0}/resource/{1}/preview'.format(pack_id, res_id) 85 | result = self.app.get(url, status='*') 86 | 87 | assert result.status == 200, result.status 88 | assert (('preview_pdf.js' in result.body) or ( 89 | 'preview_pdf.min.js' in result.body)) 90 | assert 'preload_resource' in result.body 91 | assert 'data-module="pdfpreview"' in result.body 92 | 93 | def test_iframe_is_shown(self): 94 | url = h.url_for(controller='package', action='resource_read', 95 | id=self.package.name, resource_id=self.resource['id']) 96 | result = self.app.get(url) 97 | assert 'data-module="data-viewer"' in result.body 98 | assert '=ll[0]&&this._bbox[3]>=ll[1]:null},Extent.prototype.polygon=function(){return this._valid?{type:"Polygon",coordinates:[[[this._bbox[0],this._bbox[1]],[this._bbox[2],this._bbox[1]],[this._bbox[2],this._bbox[3]],[this._bbox[0],this._bbox[3]],[this._bbox[0],this._bbox[1]]]]}:null}},{}],3:[function(require,module){module.exports=function(list){function _flatten(list){return Array.isArray(list)&&list.length&&"number"==typeof list[0]?[list]:list.reduce(function(acc,item){return Array.isArray(item)&&Array.isArray(item[0])?acc.concat(_flatten(item)):(acc.push(item),acc)},[])}return _flatten(list)}},{}],4:[function(require,module){var geojsonNormalize=require("geojson-normalize"),geojsonFlatten=require("geojson-flatten"),flatten=require("./flatten");module.exports=function(_){if(!_)return[];var normalized=geojsonFlatten(geojsonNormalize(_)),coordinates=[];return normalized.features.forEach(function(feature){feature.geometry&&(coordinates=coordinates.concat(flatten(feature.geometry.coordinates)))}),coordinates}},{"./flatten":3,"geojson-flatten":5,"geojson-normalize":6}],5:[function(require,module){function flatten(gj){switch(gj&&gj.type||null){case"FeatureCollection":return gj.features=gj.features.reduce(function(mem,feature){return mem.concat(flatten(feature))},[]),gj;case"Feature":return flatten(gj.geometry).map(function(geom){return{type:"Feature",properties:JSON.parse(JSON.stringify(gj.properties)),geometry:geom}});case"MultiPoint":return gj.coordinates.map(function(_){return{type:"Point",coordinates:_}});case"MultiPolygon":return gj.coordinates.map(function(_){return{type:"Polygon",coordinates:_}});case"MultiLineString":return gj.coordinates.map(function(_){return{type:"LineString",coordinates:_}});case"GeometryCollection":return gj.geometries;case"Point":case"Polygon":case"LineString":return[gj];default:return gj}}module.exports=flatten},{}],6:[function(require,module){function normalize(gj){if(!gj||!gj.type)return null;var type=types[gj.type];return type?"geometry"===type?{type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:gj}]}:"feature"===type?{type:"FeatureCollection",features:[gj]}:"featurecollection"===type?gj:void 0:null}module.exports=normalize;var types={Point:"geometry",MultiPoint:"geometry",LineString:"geometry",MultiLineString:"geometry",Polygon:"geometry",MultiPolygon:"geometry",GeometryCollection:"geometry",Feature:"feature",FeatureCollection:"featurecollection"}},{}],7:[function(require,module){function Traverse(obj){this.value=obj}function walk(root,cb,immutable){var path=[],parents=[],alive=!0;return function walker(node_){function updateState(){if("object"==typeof state.node&&null!==state.node){state.keys&&state.node_===state.node||(state.keys=objectKeys(state.node)),state.isLeaf=0==state.keys.length;for(var i=0;i'; 74 | 75 | console.log(html); 76 | 77 | self.el.html(html); 78 | } 79 | }; 80 | }); 81 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/theme/public/resource.config: -------------------------------------------------------------------------------- 1 | [depends] 2 | 3 | main = base/main 4 | 5 | [groups] 6 | 7 | main = 8 | geojson-extent.js 9 | preview_cesium.js 10 | 11 | 12 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext/cesiumpreview/theme/templates/cesium.html: -------------------------------------------------------------------------------- 1 | {% extends 'dataviewer/base.html' %} 2 | 3 | {% block page %} 4 | 9 |
10 |
11 |       
12 | {{ _('Loading...') }} 13 |
14 |
15 |
16 | 17 | {% resource 'ckanext-cesiumpreview/main' %} 18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext_cesiumpreview.egg-info/PKG-INFO: -------------------------------------------------------------------------------- 1 | Metadata-Version: 1.0 2 | Name: ckanext-cesiumpreview 3 | Version: 0.1 4 | Summary: A plugin to CKAN to use AusGlobe as a previewer for data.gov.au 5 | Home-page: UNKNOWN 6 | Author: NICTA 7 | Author-email: UNKNOWN 8 | License: UNKNOWN 9 | Description: UNKNOWN 10 | Platform: UNKNOWN 11 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext_cesiumpreview.egg-info/SOURCES.txt: -------------------------------------------------------------------------------- 1 | setup.py 2 | ckanext/__init__.py 3 | ckanext/cesiumpreview/__init__.py 4 | ckanext/cesiumpreview/plugin.py 5 | ckanext/cesiumpreview/tests/__init__.py 6 | ckanext/cesiumpreview/tests/test_preview.py 7 | ckanext_cesiumpreview.egg-info/PKG-INFO 8 | ckanext_cesiumpreview.egg-info/SOURCES.txt 9 | ckanext_cesiumpreview.egg-info/dependency_links.txt 10 | ckanext_cesiumpreview.egg-info/entry_points.txt 11 | ckanext_cesiumpreview.egg-info/namespace_packages.txt 12 | ckanext_cesiumpreview.egg-info/not-zip-safe 13 | ckanext_cesiumpreview.egg-info/top_level.txt -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext_cesiumpreview.egg-info/dependency_links.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext_cesiumpreview.egg-info/entry_points.txt: -------------------------------------------------------------------------------- 1 | 2 | [ckan.plugins] 3 | cesium_viewer=ckanext.cesiumpreview.plugin:CesiumPreview 4 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext_cesiumpreview.egg-info/namespace_packages.txt: -------------------------------------------------------------------------------- 1 | ckanext 2 | ckanext.cesiumpreview 3 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext_cesiumpreview.egg-info/not-zip-safe: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/ckanext_cesiumpreview.egg-info/top_level.txt: -------------------------------------------------------------------------------- 1 | ckanext 2 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/install.txt: -------------------------------------------------------------------------------- 1 | To add Cesium Previewer 2 | 3 | Unzip cesiumpreview.zip and either place the cesieumpreview folder in the CKAN location below or make a virtual link in CKAN to the cesiumviewer. 4 | 5 | ln -s ~/ausglobe/cesiumpreview ~/ckan/lib/default/src/ckanext-cesiumpreview 6 | 7 | In the CKAN development.ini under storage settings add the plugin as first in the list 8 | 9 | edit /etc/ckan/default/development.ini 10 | ckan.plugins = cesium_viewer ... 11 | 12 | In the ckanext-cesiumpreview folder 13 | 14 | python setup.py develop 15 | -------------------------------------------------------------------------------- /ckanext-cesiumpreview/setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | version = '0.1' 4 | 5 | setup( 6 | name='ckanext-cesiumpreview', 7 | version=version, 8 | description='A plugin to CKAN to use AusGlobe as a previewer for data.gov.au', 9 | long_description='', 10 | classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers 11 | keywords='', 12 | author='NICTA', 13 | author_email='', 14 | url='', 15 | license='', 16 | packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), 17 | namespace_packages=['ckanext', 'ckanext.cesiumpreview'], 18 | include_package_data=True, 19 | zip_safe=False, 20 | install_requires=[], 21 | entry_points=\ 22 | """ 23 | [ckan.plugins] 24 | cesium_viewer=ckanext.cesiumpreview.plugin:CesiumPreview 25 | """, 26 | ) 27 | -------------------------------------------------------------------------------- /deploy/docker/Dockerfile: -------------------------------------------------------------------------------- 1 | # Docker image for the primary terria map application server 2 | FROM node:20 3 | 4 | RUN mkdir -p /usr/src/app && mkdir -p /etc/config/client 5 | WORKDIR /usr/src/app/component 6 | COPY . /usr/src/app 7 | 8 | EXPOSE 3001 9 | ENV NODE_ENV=production 10 | CMD [ "node", "./node_modules/terriajs-server/lib/app.js", "--config-file", "serverconfig.json" ] 11 | -------------------------------------------------------------------------------- /deploy/docker/docker-util.js: -------------------------------------------------------------------------------- 1 | exports.getVersions = function getVersions(local, version) { 2 | return version.length > 0 3 | ? version 4 | : [ 5 | !local && process.env.npm_package_version 6 | ? process.env.npm_package_version 7 | : "latest" 8 | ]; 9 | }; 10 | 11 | exports.getName = function getName(name) { 12 | if (name && typeof name === "string") { 13 | return name; 14 | } 15 | return process.env.npm_package_config_docker_name 16 | ? process.env.npm_package_config_docker_name 17 | : process.env.npm_package_name 18 | ? "data61/magda-" + process.env.npm_package_name.split("/")[1] 19 | : "UnnamedImage"; 20 | }; 21 | 22 | exports.getTags = function getTags(tag, local, repository, version, name) { 23 | if (tag === "auto") { 24 | return exports.getVersions(local, version).map((version) => { 25 | const tagPrefix = exports.getRepository(local, repository); 26 | const imageName = exports.getName(name); 27 | 28 | return tagPrefix + imageName + ":" + version; 29 | }); 30 | } else { 31 | return tag ? [tag] : []; 32 | } 33 | }; 34 | 35 | exports.getRepository = function getRepository(local, repository) { 36 | return (repository && repository + "/") || (local ? "localhost:5000/" : ""); 37 | }; 38 | -------------------------------------------------------------------------------- /deploy/ecosystem-example.config.js: -------------------------------------------------------------------------------- 1 | /*global __dirname*/ 2 | const os = require("os"); 3 | const path = require("path"); 4 | 5 | // You can start a production server with: 6 | // pm2 start deploy/ecosystem-example.config.js --update-env --env production 7 | // Or configure it to run automatically as a daemon (systemd, upstart, launchd, rcd) with: 8 | // pm2 startup systemd 9 | 10 | module.exports = { 11 | apps: [ 12 | { 13 | name: path.basename(path.resolve(__dirname, "..")) + "-production", 14 | script: require.resolve("terriajs-server"), 15 | 16 | // Add arguments to terriajs-server to the following, e.g. --port 4000 17 | args: "--config-file productionserverconfig.json", 18 | instances: Math.max(4, os.cpus().length), 19 | autorestart: true, 20 | watch: false, 21 | max_memory_restart: "1G", 22 | env: { 23 | NODE_ENV: "development" 24 | }, 25 | env_production: { 26 | NODE_ENV: "production" 27 | } 28 | } 29 | ] 30 | }; 31 | -------------------------------------------------------------------------------- /deploy/helm/example-prod.yml: -------------------------------------------------------------------------------- 1 | global: 2 | rollingUpdate: 3 | maxUnavailable: 1 4 | image: 5 | tag: "0.1.1" 6 | -------------------------------------------------------------------------------- /deploy/helm/minikube-dev.yml: -------------------------------------------------------------------------------- 1 | global: 2 | rollingUpdate: 3 | maxUnavailable: 1 4 | exposeNodePorts: true 5 | image: 6 | repository: "localhost:5000/data61" 7 | tag: "latest" 8 | -------------------------------------------------------------------------------- /deploy/helm/terria/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | -------------------------------------------------------------------------------- /deploy/helm/terria/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | description: "An open source geospatial data explorer" 3 | name: "terria" 4 | version: "0.1.0" 5 | home: "https://github.com/TerriaJS/terriamap" 6 | sources: ["https://github.com/TerriaJS/terriamap"] 7 | -------------------------------------------------------------------------------- /deploy/helm/terria/charts/terriamap/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | description: A Helm chart for Kubernetes 3 | name: terriamap 4 | version: 0.1.0 5 | -------------------------------------------------------------------------------- /deploy/helm/terria/charts/terriamap/templates/configmap-client.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ printf "%s-%s" .Release.Name "terriamap-config-client" | trunc 63 | trimSuffix "-" | quote }} 5 | labels: 6 | pod: {{ printf "%s-%s" .Release.Name "terriamap" | trunc 63 | trimSuffix "-" | quote }} 7 | data: 8 | config.json: '{{ toJson .Values.clientConfig | indent 2 }}' 9 | helm.json: '{{ toJson .Values.initConfig | indent 2 }}' 10 | -------------------------------------------------------------------------------- /deploy/helm/terria/charts/terriamap/templates/configmap-server.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ printf "%s-%s" .Release.Name "terriamap-config-server" | trunc 63 | trimSuffix "-" | quote }} 5 | labels: 6 | pod: {{ printf "%s-%s" .Release.Name "terriamap" | trunc 63 | trimSuffix "-" | quote }} 7 | data: 8 | serverconfig.json: {{ toJson .Values.serverConfig | indent 2 | quote }} 9 | -------------------------------------------------------------------------------- /deploy/helm/terria/charts/terriamap/templates/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ printf "%s-%s" .Release.Name "terriamap" | trunc 63 | trimSuffix "-" | quote }} 5 | spec: 6 | replicas: {{ .Values.replicas | default 1 }} 7 | strategy: 8 | rollingUpdate: 9 | maxUnavailable: {{ .Values.global.rollingUpdate.maxUnavailable | default 0 }} 10 | selector: 11 | matchLabels: 12 | service: {{ printf "%s-%s" .Release.Name "terriamap" | trunc 63 | trimSuffix "-" | quote }} 13 | template: 14 | metadata: 15 | labels: 16 | service: {{ printf "%s-%s" .Release.Name "terriamap" | trunc 63 | trimSuffix "-" | quote }} 17 | spec: 18 | containers: 19 | - name: terriamap 20 | resources: 21 | {{ toYaml .Values.resources | indent 10 }} 22 | command: [ "node", "./node_modules/terriajs-server/lib/app.js", "--config-file", "/etc/config/server/serverconfig.json"] 23 | env: 24 | - name: NODE_ENV 25 | value: production 26 | image: {{ template "dockerimage" . }} 27 | imagePullPolicy: {{ .Values.image.pullPolicy | default .Values.global.image.pullPolicy }} 28 | volumeMounts: 29 | - name: terriamap-config-client 30 | mountPath: /etc/config/client 31 | - name: terriamap-config-server 32 | mountPath: /etc/config/server 33 | - name: terriamap-config-client 34 | mountPath: /usr/src/app/component/wwwroot/config.json 35 | subPath: config.json 36 | volumes: 37 | - name: terriamap-config-client 38 | configMap: 39 | name: {{ printf "%s-%s" .Release.Name "terriamap-config-client" | trunc 63 | trimSuffix "-" | quote }} 40 | - name: terriamap-config-server 41 | configMap: 42 | name: {{ printf "%s-%s" .Release.Name "terriamap-config-server" | trunc 63 | trimSuffix "-" | quote }} 43 | -------------------------------------------------------------------------------- /deploy/helm/terria/charts/terriamap/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ printf "%s-%s" .Release.Name "terriamap" | trunc 63 | trimSuffix "-" | quote }} 5 | spec: 6 | ports: 7 | - name: http 8 | port: 80 9 | targetPort: 3001 10 | {{- if .Values.global.exposeNodePorts }} 11 | {{- if .Values.global.nodePort }} 12 | nodePort: {{ .Values.nodePort }} 13 | {{- end }} 14 | type: NodePort 15 | {{- else }} 16 | type: LoadBalancer 17 | {{- end }} 18 | selector: 19 | service: {{ printf "%s-%s" .Release.Name "terriamap" | trunc 63 | trimSuffix "-" | quote }} 20 | -------------------------------------------------------------------------------- /deploy/helm/terria/charts/terriamap/values.yaml: -------------------------------------------------------------------------------- 1 | nodePort: 2 | image: 3 | # By default this pulls ghcr.io/terriajs/terrimap:latest 4 | # Set "full" to specify a custom terriamap image to be used 5 | # Or you can set "repository" or "tag" if required 6 | # full: "ghcr.io/terriajs/terriamap:0.1.1" 7 | # repository: ghcr.io/terriajs 8 | # tag: latest 9 | pullPolicy: Always 10 | clientConfig: 11 | initializationUrls: 12 | - helm 13 | - terria 14 | parameters: 15 | disclaimer: 16 | text: "Disclaimer: This map must not be used for navigation or precise spatial analysis" 17 | url: "http://google.com" 18 | globalDisclaimer: 19 | confirmationRequired: true 20 | buttonTitle: "I agree" 21 | title: "Disclaimer" 22 | prodHostRegex: "gov.\\.au$" 23 | devHostRegex: "\\b(staging|preview|test|dev)\\." 24 | enableOnLocalhost: true 25 | developerAttribution: 26 | text: "Your organisation" 27 | link: "http://www.example.com" 28 | appName: "Terria Map" 29 | brandBarElements: 30 | [ 31 | "", 32 | '', 33 | "" 34 | ] 35 | supportEmail: "help@example.com" 36 | mobileDefaultViewerMode: "2d" 37 | experimentalFeatures: true 38 | initConfig: 39 | homeCamera: 40 | north: "-8" 41 | east: "158" 42 | south: "-45" 43 | west: "109" 44 | catalog: [] 45 | serverConfig: 46 | port: 3001 47 | allowProxyFor: [] 48 | initPaths: 49 | - "/etc/config/client" 50 | resources: 51 | {} 52 | # We usually recommend not to specify default resources and to leave this as a conscious 53 | # choice for the user. This also increases chances charts run on environments with little 54 | # resources, such as Minikube. If you do want to specify resources, uncomment the following 55 | # lines, adjust them as necessary, and remove the curly braces after 'resources:'. 56 | # limits: 57 | # cpu: 100m 58 | # memory: 128Mi 59 | # requests: 60 | # cpu: 100m 61 | # memory: 128Mi 62 | -------------------------------------------------------------------------------- /deploy/helm/terria/requirements.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | - name: terriamap 3 | version: 0.1.0 4 | tags: 5 | - all 6 | - terriamap 7 | -------------------------------------------------------------------------------- /deploy/helm/terria/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | */}} 13 | {{- define "fullname" -}} 14 | {{- $name := default .Chart.Name .Values.nameOverride -}} 15 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 16 | {{- end -}} 17 | 18 | {{- define "dockerimage" -}} 19 | {{- if .Values.image.full -}} 20 | {{ .Values.image.full | quote }} 21 | {{- else -}} 22 | "{{ .Values.image.repository | default .Values.global.image.repository }}/{{ .Chart.Name }}:{{ .Values.image.tag | default .Values.global.image.tag | default "latest" }}" 23 | {{- end -}} 24 | {{- end -}} 25 | -------------------------------------------------------------------------------- /deploy/helm/terria/values.yaml: -------------------------------------------------------------------------------- 1 | global: 2 | rollingUpdate: 3 | maxUnavailable: 0 4 | exposeNodePorts: false 5 | image: 6 | repository: "ghcr.io/terriajs" 7 | pullPolicy: Always 8 | tags: 9 | all: 10 | -------------------------------------------------------------------------------- /deploy/kubernetes/rbac-config.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ServiceAccount 3 | metadata: 4 | name: tiller 5 | namespace: kube-system 6 | --- 7 | apiVersion: rbac.authorization.k8s.io/v1beta1 8 | kind: ClusterRoleBinding 9 | metadata: 10 | name: tiller 11 | roleRef: 12 | apiGroup: rbac.authorization.k8s.io 13 | kind: ClusterRole 14 | name: cluster-admin 15 | subjects: 16 | - kind: ServiceAccount 17 | name: tiller 18 | namespace: kube-system 19 | -------------------------------------------------------------------------------- /deploy/varnish/default.vcl: -------------------------------------------------------------------------------- 1 | vcl 4.0; 2 | 3 | backend default { 4 | .host = "127.0.0.1"; 5 | .port = "3001"; 6 | } 7 | 8 | sub vcl_recv { 9 | if (req.method == "GET" && req.url ~ "^/proxy"){ 10 | return (hash); 11 | } 12 | } 13 | 14 | sub vcl_backend_response { 15 | if (beresp.status >= 400) { 16 | set beresp.ttl = 0s; 17 | } 18 | 19 | if (bereq.url ~ "https?://stat\.data\.abs\.gov\.au/sdmx-json") { 20 | // Remove the cookie so that the response can be cached. 21 | unset beresp.http.Set-Cookie; 22 | 23 | // The ABS SDMX-JSON API has a habit of returning HTML 24 | // responses with a 200 OK code on error. Detect this and 25 | // don't cache it. 26 | if (beresp.status == 200 && beresp.http.Content-Type ~ "text/html") { 27 | set beresp.ttl = 0s; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /doc/deploying/deploying-to-aws.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | Most of our production TerriaJS-based sites are hosted on Amazon Web Services (AWS). This page describes how to use the automated AWS deployment mechanism available in TerriaMap. There are, of course, countless other ways to deploy to AWS. 4 | 5 | ## Prerequisites 6 | 7 | ### awscli 8 | 9 | Deploying requires a recent version of `awscli`. It's recommended to install and maintain this using python's `pip` as the Homebrew and Ubuntu packages are quite old. 10 | 11 | ```sh 12 | pip install awscli 13 | ``` 14 | 15 | ### AWS credentials 16 | 17 | You must have an `awscli` configuration profile (in `~/.aws/config`) with a name that matches `awsProfile` in `package.json`. e.g. 18 | 19 | ``` 20 | [profile terria] 21 | aws_access_key_id=YOUR_ACCESS_KEY 22 | aws_secret_access_key=YOUR_SECRET_ACCESS_KEY 23 | ``` 24 | 25 | ## package.json 26 | 27 | Various parameters controlling AWS deployment are specified in `package.json`. They are: 28 | 29 | - `awsProfile` - The AWS profile to use (see AWS credentials above) when interacting with AWS. 30 | - `awsS3PackagesPath` - The S3 path to which to copy the deployment .tar.gz. 31 | - `awsRegion` - The AWS region in which to create resources. 32 | - `awsEc2InstanceType` - The type of EC2 instance to use. 33 | - `awsEc2ImageId` - The ID of the EC2 image to use. 34 | - `awsKeyName` - The name of a key that may be used to SSH to the EC2 instance. 35 | - `awsS3ServerConfigOverridePath` - The path to a file on S3 containing any overrides to `devserverconfig.json`. 36 | - `awsS3ClientConfigOverridePath` - The path to a file on S3 containing any overrides to `wwwroot/config.json`. 37 | 38 | You can customize these settings by changing `package.json`, or by using `npm config` to override the setting locally, for example; 39 | 40 | ``` 41 | npm config set terriajs-map:awsProfile myprofilename 42 | ``` 43 | 44 | ## stack.json 45 | 46 | You will need to modify [deploy/aws/stack.json](https://github.com/TerriaJS/TerriaMap/blob/master/deploy/aws/stack.json) to match your environment. In particular, you will need to change: 47 | 48 | - `Parameters.HostedZoneName.Default`: This is the domain name where a DNS record for the deployment will be created. 49 | - `SSLCertificateId` in `Resources.ElasticLoadBalancer.Listeners`: The SSL certificate to use for HTTPS connections to the deployment. If you don't have a certificate or don't want to support HTTPS, remove the entire listener with `"LoadBalancerPort": "443"`. 50 | - `terriamap-sharing` in `Resources.S3Role.Properties.Policies.PolicyDocument.Statement`: This authorizes the EC2 instances to access an S3 bucket to be used to store JSON blobs for the sharing feature. You will want to create a bucket for this purpose and add its name here. 51 | 52 | ## Getting ready to deploy 53 | 54 | Prior to deploying, please tag the release with the date, e.g. 55 | 56 | ``` 57 | git tag -a 2016-05-17 -m '2016-05-17 release' 58 | ``` 59 | 60 | This is used to name the CloudFormation stack, so it's important to get it right. Before deploying, double check that the tag is correct with: 61 | 62 | ``` 63 | git describe 64 | ``` 65 | 66 | Also run: 67 | 68 | ``` 69 | git status 70 | ``` 71 | 72 | and make sure your working directory is clean and that all changes are pushed to the remote origin repository. This is generally the only time that you want to commit changes to `package-lock.json` if you've updated any npm packages. 73 | 74 | Once you're happy with your release, remember to push the tag. 75 | 76 | ``` 77 | git push origin 2016-05-17 78 | ``` 79 | 80 | ## Deploy 81 | 82 | Deployment is initiated via `npm` scripts. A full production deployment may be initiated with: 83 | 84 | ``` 85 | yarn deploy 86 | ``` 87 | 88 | Once the stack starts up, it will be available at `terriajs-map-2016-05-17.terria.io`, where `terriajs-map` is the name of the project in `package.json` and `2016-05-17` is the output of `git describe` (that's why you should tag before starting a deployment). 89 | 90 | The following npm scripts are available: 91 | 92 | - `deploy` - Removes the `node_modules` directory, runs `npm install`, and launches the `deploy-without-reinstall` script. 93 | - `deploy-without-reinstall` - Runs `gulp clean` (which removes the `wwwroot/build` directory) and `gulp release`, and then launches the `deploy-current` script. 94 | - `deploy-current` - Gets the two configuration override files specified in package.json from S3, builds a package (.tar.gz), uploads it to S3, and spins up a CloudFormation stack. 95 | 96 | The CloudFormation stack has the following AWS resources: 97 | 98 | - Elastic Load Balancer 99 | - EC2 Security Group 100 | - Auto Scaling Group 101 | - Launch Configurartion 102 | - Route 53 Record Set 103 | 104 | Instances in the Auto Scaling group are bootstrapped using the supplied `user-data` file. 105 | 106 | The process of starting a new stack takes about 5 minutes but it can take a further 15 minutes for the DNS to propagate. 107 | 108 | ### Test stack 109 | 110 | Each stack is automatically assigned its own URL based on the name of the stack. e.g. 111 | 112 | ``` 113 | https://terriajs-map-2016-05-17.terria.io/ 114 | ``` 115 | 116 | **If you don't see your release immediately, don't panic! It can take 10 minutes or so to appear.** 117 | 118 | ### Update DNS alias 119 | 120 | Once you're satisfied the release is working, change the staging environment DNS record to point to the new stack using the Route 53 Console. 121 | 122 | ``` 123 | map.terria.io -> terriajs-map-2016-05-17.terria.io 124 | ``` 125 | 126 | ### Troubleshooting 127 | 128 | The default Mac OS `tar` command [causes trouble](http://superuser.com/questions/318809/linux-os-x-tar-incompatibility-tarballs-created-on-os-x-give-errors-when-unt). You'll need to replace it with `gtar`, eg. using Homebrew. 129 | 130 | ## After releasing 131 | 132 | Make sure you delete the old CloudFormation stacks for the previous version of the app. Otherwise they'll keep running (and costing money!). 133 | -------------------------------------------------------------------------------- /entry.js: -------------------------------------------------------------------------------- 1 | import globeGif from "./lib/Styles/globe.gif"; 2 | import "./lib/Styles/loader.css"; 3 | 4 | async function loadMainScript() { 5 | return import("terriajs/lib/Core/prerequisites") 6 | .then(() => import("./index")) 7 | .then(({ default: terriaPromise }) => terriaPromise); 8 | } 9 | 10 | function createLoader() { 11 | const loaderDiv = document.createElement("div"); 12 | loaderDiv.classList.add("loader-ui"); 13 | const loaderGif = document.createElement("img"); 14 | loaderGif.src = globeGif; 15 | loaderDiv.appendChild(loaderGif); 16 | 17 | loaderDiv.style.backgroundColor = "#383F4D"; 18 | document.body.appendChild(loaderDiv); 19 | 20 | loadMainScript() 21 | .catch((_err) => { 22 | // Ignore errors and try to show the map anyway 23 | }) 24 | .then(() => { 25 | loaderDiv.classList.add("loader-ui-hide"); 26 | setTimeout(() => { 27 | document.body.removeChild(loaderDiv); 28 | }, 2000); 29 | }); 30 | } 31 | 32 | createLoader(); 33 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | import ConsoleAnalytics from "terriajs/lib/Core/ConsoleAnalytics"; 2 | import GoogleAnalytics from "terriajs/lib/Core/GoogleAnalytics"; 3 | import registerCatalogMembers from "terriajs/lib/Models/Catalog/registerCatalogMembers"; 4 | import registerSearchProviders from "terriajs/lib/Models/SearchProviders/registerSearchProviders"; 5 | import ShareDataService from "terriajs/lib/Models/ShareDataService"; 6 | import Terria from "terriajs/lib/Models/Terria"; 7 | import ViewState from "terriajs/lib/ReactViewModels/ViewState"; 8 | import registerCustomComponentTypes from "terriajs/lib/ReactViews/Custom/registerCustomComponentTypes"; 9 | import updateApplicationOnHashChange from "terriajs/lib/ViewModels/updateApplicationOnHashChange"; 10 | import updateApplicationOnMessageFromParentWindow from "terriajs/lib/ViewModels/updateApplicationOnMessageFromParentWindow"; 11 | import loadPlugins from "./lib/Core/loadPlugins"; 12 | import render from "./lib/Views/render"; 13 | import showGlobalDisclaimer from "./lib/Views/showGlobalDisclaimer"; 14 | import plugins from "./plugins"; 15 | 16 | const terriaOptions = { 17 | baseUrl: "build/TerriaJS" 18 | }; 19 | 20 | // we check exact match for development to reduce chances that production flag isn't set on builds(?) 21 | if (process.env.NODE_ENV === "development") { 22 | terriaOptions.analytics = new ConsoleAnalytics(); 23 | } else { 24 | terriaOptions.analytics = new GoogleAnalytics(); 25 | } 26 | 27 | // Construct the TerriaJS application, arrange to show errors to the user, and start it up. 28 | const terria = new Terria(terriaOptions); 29 | 30 | // Create the ViewState before terria.start so that errors have somewhere to go. 31 | const viewState = new ViewState({ 32 | terria: terria 33 | }); 34 | 35 | // Register all types of catalog members in the core TerriaJS. If you only want to register a subset of them 36 | // (i.e. to reduce the size of your application if you don't actually use them all), feel free to copy a subset of 37 | // the code in the registerCatalogMembers function here instead. 38 | registerCatalogMembers(); 39 | 40 | // Register custom search providers in the core TerriaJS. If you only want to register a subset of them, or to add your own, 41 | // insert your custom version of the code in the registerSearchProviders function here instead. 42 | registerSearchProviders(); 43 | 44 | // Register custom components in the core TerriaJS. If you only want to register a subset of them, or to add your own, 45 | // insert your custom version of the code in the registerCustomComponentTypes function here instead. 46 | registerCustomComponentTypes(terria); 47 | 48 | if (process.env.NODE_ENV === "development") { 49 | window.viewState = viewState; 50 | } 51 | 52 | export default terria 53 | .start({ 54 | applicationUrl: window.location, 55 | configUrl: "config.json", 56 | shareDataService: new ShareDataService({ 57 | terria: terria 58 | }), 59 | beforeRestoreAppState: () => { 60 | // Load plugins before restoring app state because app state may 61 | // reference plugin components and catalog items. 62 | return loadPlugins(viewState, plugins).catch((error) => { 63 | console.error(`Error loading plugins`); 64 | console.error(error); 65 | }); 66 | } 67 | }) 68 | .catch(function (e) { 69 | terria.raiseErrorToUser(e); 70 | }) 71 | .finally(function () { 72 | // Override the default document title with appName. Check first for default 73 | // title, because user might have already customized the title in 74 | // index.ejs 75 | if (document.title === "Terria Map") { 76 | document.title = terria.appName; 77 | } 78 | 79 | // Load init sources like init files and share links 80 | terria.loadInitSources().then((result) => result.raiseError(terria)); 81 | 82 | try { 83 | // Automatically update Terria (load new catalogs, etc.) when the hash part of the URL changes. 84 | updateApplicationOnHashChange(terria, window); 85 | updateApplicationOnMessageFromParentWindow(terria, window); 86 | 87 | // Show a modal disclaimer before user can do anything else. 88 | if (terria.configParameters.globalDisclaimer) { 89 | showGlobalDisclaimer(viewState); 90 | } 91 | 92 | // Add font-imports 93 | const fontImports = terria.configParameters.theme?.fontImports; 94 | if (fontImports) { 95 | const styleSheet = document.createElement("style"); 96 | styleSheet.type = "text/css"; 97 | styleSheet.innerText = fontImports; 98 | document.head.appendChild(styleSheet); 99 | } 100 | 101 | render(terria, [], viewState); 102 | } catch (e) { 103 | console.error(e); 104 | console.error(e.stack); 105 | } 106 | }); 107 | -------------------------------------------------------------------------------- /lib/Core/loadPlugins.ts: -------------------------------------------------------------------------------- 1 | import { 2 | createPluginContext, 3 | TerriaPluginModule, 4 | ViewState 5 | } from "terriajs-plugin-api"; 6 | import TerriaError from "terriajs/lib/Core/TerriaError"; 7 | 8 | /** 9 | * Load plugin modules. 10 | * 11 | * @param viewState - The {@link ViewState} instance 12 | * @param getPluginsList - A function returning an array of promises for plugin modules (i.e the value exported from plugins.ts) 13 | */ 14 | async function loadPlugins( 15 | viewState: ViewState, 16 | getPluginsList: () => Promise[] 17 | ): Promise { 18 | try { 19 | const pluginsList = getPluginsList(); 20 | const loadPromises = pluginsList.map((promise) => { 21 | const pluginContext = createPluginContext(viewState); 22 | return promise 23 | .then(({ default: plugin }) => { 24 | try { 25 | plugin.register(pluginContext); 26 | } catch (ex) { 27 | TerriaError.from(ex, { 28 | title: `Error when registering plugin "${plugin.name}"` 29 | }).log(); 30 | } 31 | }) 32 | .catch((ex) => { 33 | TerriaError.from(ex, { 34 | title: `Error when loading a plugin` 35 | }).log(); 36 | }); 37 | }); 38 | await Promise.all(loadPromises); 39 | } catch (err) { 40 | return Promise.reject(err); 41 | } 42 | } 43 | 44 | export default loadPlugins; 45 | -------------------------------------------------------------------------------- /lib/Styles/globe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/lib/Styles/globe.gif -------------------------------------------------------------------------------- /lib/Styles/loader.css: -------------------------------------------------------------------------------- 1 | .loader-ui img { 2 | display: block; 3 | margin: calc(50vh - 150px) auto; 4 | } 5 | 6 | @media (min-width: 768px) { 7 | .loader-ui { 8 | display: flex; 9 | position: fixed; 10 | left: 0; 11 | top: 0; 12 | width: 100vw; 13 | height: 100vh; 14 | } 15 | } 16 | 17 | .loader-ui { 18 | transition: opacity, 2s; 19 | opacity: 1; 20 | height: 100vh; 21 | width: 100vw; 22 | position: fixed; 23 | z-index: 9999; 24 | left: 0; 25 | top: 0; 26 | pointer-events: none; 27 | } 28 | 29 | .loader-ui-hide { 30 | opacity: 0; 31 | } 32 | -------------------------------------------------------------------------------- /lib/Styles/variables-overrides.scss: -------------------------------------------------------------------------------- 1 | @forward "~terriajs/lib/Sass/common/_default_variables.scss"; 2 | /** 3 | // To customise the look of your map, uncomment and change values here and in lib/Views/global.scss 4 | 5 | with ( 6 | // If your logo is big, set this to give it more room. 7 | //$logo-height: 120px; 8 | 9 | // If using a non-standard font, remember to include an @import statement in global.scss 10 | $font-base: 'Josefin Sans', sans-serif; 11 | $font-pop: $font-base; // If you just want to use one font throughout, do this. 12 | 13 | // These variables are for buttons and text. 14 | // "color-secondary" should be a lighter color than "color-primary" but still readable contrasted with white. 15 | $color-primary: maroon; 16 | $color-secondary: hsl(60,80%,60%); // or: lighten($color-primary, 20%); 17 | 18 | // These variables set background panel colors 19 | $dark: hsl(0,30%,30%); 20 | $dark-with-overlay: hsl(0,30%,30%);; 21 | $dark-lighter: hsl(0,30%,50%); 22 | 23 | // You might find it helpful to define these and use them. 24 | $color-primary-light:lighten($color-primary,10%); 25 | $color-primary-dark:darken($color-primary,10%); 26 | $dark-darker: hsl(0,30%,15%); 27 | ); 28 | */ 29 | -------------------------------------------------------------------------------- /lib/Styles/variables.scss: -------------------------------------------------------------------------------- 1 | @use "./variables-overrides" as variables; 2 | 3 | $focus-border-light-color: variables.$text-light; 4 | $focus-border-dark-color: variables.$text-dark; 5 | $focus-border-width: 2px; 6 | $focus-border: solid $focus-border-width $focus-border-light-color; 7 | $focus-border-dark: solid $focus-border-width $focus-border-dark-color; 8 | -------------------------------------------------------------------------------- /lib/Views/AboutButton.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import MenuButton from "terriajs/lib/ReactViews/Map/MenuButton"; 4 | 5 | export default function AboutButton() { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /lib/Views/DevelopmentDisclaimerPreamble.html: -------------------------------------------------------------------------------- 1 |
8 |

Development site

9 | 10 |

11 | You are viewing a site other than the official production site. It may not 12 | operate as you expect. 13 |

14 |
15 | -------------------------------------------------------------------------------- /lib/Views/GlobalDisclaimer.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | This is the global disclaimer shown to all users of this site. It should be 4 | replaced with something specific, by modifying 5 | lib/Views/GlobalDisclaimer.html. 6 |

7 |
8 | -------------------------------------------------------------------------------- /lib/Views/PreviewLink.html: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /lib/Views/UserInterface.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from "prop-types"; 2 | import React from "react"; 3 | import RelatedMaps from "terriajs/lib/ReactViews/RelatedMaps/RelatedMaps"; 4 | import { 5 | ExperimentalMenu, 6 | MenuLeft 7 | } from "terriajs/lib/ReactViews/StandardUserInterface/customizable/Groups"; 8 | import MenuItem from "terriajs/lib/ReactViews/StandardUserInterface/customizable/MenuItem"; 9 | import StandardUserInterface from "terriajs/lib/ReactViews/StandardUserInterface/StandardUserInterface"; 10 | import version from "../../version"; 11 | import "./global.scss"; 12 | 13 | export default function UserInterface(props) { 14 | const relatedMaps = props.viewState.terria.configParameters.relatedMaps; 15 | const aboutButtonHrefUrl = 16 | props.viewState.terria.configParameters.aboutButtonHrefUrl; 17 | 18 | return ( 19 | 20 | 21 | {aboutButtonHrefUrl ? ( 22 | 27 | ) : null} 28 | {relatedMaps && relatedMaps.length > 0 ? ( 29 | 30 | ) : null} 31 | 32 | 33 | 34 | ); 35 | } 36 | 37 | UserInterface.propTypes = { 38 | terria: PropTypes.object, 39 | viewState: PropTypes.object 40 | }; 41 | -------------------------------------------------------------------------------- /lib/Views/global.scss: -------------------------------------------------------------------------------- 1 | @use "../Styles/variables.scss"; 2 | @use "~terriajs/lib/Sass/global/global"; 3 | 4 | body { 5 | margin: 0; 6 | overflow: hidden; 7 | } 8 | 9 | :global { 10 | @media print { 11 | .nationalmap-print-disclaimer { 12 | color: #000; 13 | display: block; 14 | } 15 | } 16 | 17 | // To customise the look of your Terria Map, uncomment this section and make changes to your heart's content 18 | // You will also want to uncomment and change values in lib/Styles/variables.scss 19 | /* 20 | // Import any custom fonts here 21 | //@import url(https://fonts.googleapis.com/css?family=Josefin+Sans:300,400,700); 22 | 23 | html { 24 | font-family: $font-base; 25 | } 26 | 27 | // Logo area in top left 28 | .tjs-branding__branding { 29 | a:first-child, a:last-child { 30 | display: none; 31 | 32 | @media screen and (min-width: $sm) { 33 | display: inline; 34 | } 35 | } 36 | // Different font size for the branding 37 | font-weight: 300; 38 | color: white; 39 | font-size: 26px; 40 | padding-top:2px; 41 | padding-left:6px; 42 | 43 | // To make the logo clickable, it should be instead set in config.json, at "brandBarElements" 44 | // background:$dark url(http://www.public-domain-image.com/backgrounds/slides/abstract-waves-on-a-blue-background.jpg); 45 | // background-position: top right; 46 | // background-size: 100%; 47 | // background-repeat: no-repeat; 48 | 49 | } 50 | // Background of whole left panel 51 | .tjs-standard-user-interface__sidePanel { 52 | background:$dark-darker; 53 | } 54 | // Individual sections within the left panel 55 | .tjs-side-panel__workBench { 56 | font-family:$font-base; 57 | font-weight:400; 58 | font-size:18px; 59 | background:$dark-darker; 60 | } 61 | 62 | // All kinds of buttons in various screens 63 | .tjs-_buttons__btn { 64 | &-primary { 65 | font-family: $font-base; 66 | } 67 | &:hover { 68 | color: $color-primary; 69 | } 70 | } 71 | 72 | // Buttons like "Share" within the map area. 73 | .tjs-_buttons__btn--map { 74 | background: $dark; 75 | &:focus, &:hover { color: white; } 76 | } 77 | 78 | // Lat/lon buttons 79 | .tjs-legend__locationBar, .tjs-legend__distanceLegend { 80 | 81 | background:$dark; 82 | color:white; 83 | &:hover,&:focus { background: $dark; color: white; } 84 | 85 | } 86 | 87 | // Progress bar while datasets are loading 88 | .tjs-progress-bar__progress-bar { 89 | background: $color-primary; 90 | } 91 | 92 | // Flatten and simplify display of timeline controls 93 | .tjs-timeline-controls__timeline__control { 94 | background:$dark-lighter; 95 | border:none; 96 | } 97 | 98 | .tjs-timeline__text-cell { 99 | font-family: $font-base; 100 | } 101 | 102 | .tjs-timeline__timeline { 103 | background:$dark-lighter; 104 | } 105 | 106 | .cesium-timeline-bar { 107 | background:$dark-with-overlay; 108 | } 109 | 110 | // Feature info table 111 | .tjs-feature-info-section__content { 112 | h1 { 113 | color: $color-primary; 114 | } 115 | table th { 116 | // font-family: $font-base; // if you don't want monospaced 117 | font-weight:200; // not bold 118 | padding-right:0.5em; 119 | } 120 | 121 | table td { 122 | border:none; 123 | // font-family: $font-base; // if you don't want monospaced 124 | font-weight:normal; // not bold 125 | color:hsl(0,0%,90%); 126 | 127 | } 128 | a { 129 | color:$color-secondary; 130 | } 131 | } 132 | 133 | // The Data Catalog ("Add Data") page 134 | // expandable catalog groups 135 | .tjs-data-catalog-group__btn--catalog { 136 | &:hover { background: $color-secondary; color: white; } 137 | &:focus { background: $color-primary; color: white;} 138 | } 139 | // The currently selected item in the list 140 | .tjs-data-catalog-item__btn-catalog-item--is-previewed { 141 | ,&:focus {color: $color-primary; } 142 | } 143 | // The tabs at the top 144 | .tjs-tabs__btn--tab { 145 | font-family:$font-base 146 | } 147 | 148 | .tjs-tabs__btn--selected { 149 | color:$color-primary-dark; 150 | } 151 | .tjs-tabs__btn--tab:hover { 152 | color:$color-secondary; 153 | } 154 | */ 155 | } 156 | -------------------------------------------------------------------------------- /lib/Views/render.jsx: -------------------------------------------------------------------------------- 1 | import ReactDOM from "react-dom"; 2 | import RedBox from "redbox-react"; 3 | import React from "react"; 4 | import Variables from "../Styles/variables.scss"; 5 | import UI from "./UserInterface"; 6 | 7 | export default function renderUi(terria, allBaseMaps, viewState) { 8 | let render = () => { 9 | ReactDOM.render( 10 | , 16 | document.getElementById("ui") 17 | ); 18 | }; 19 | 20 | if (module.hot && process.env.NODE_ENV !== "production") { 21 | // Support hot reloading of components 22 | // and display an overlay for runtime errors 23 | const renderApp = render; 24 | const renderError = (error) => { 25 | console.error(error); 26 | console.error(error.stack); 27 | ReactDOM.render(, document.getElementById("ui")); 28 | }; 29 | render = () => { 30 | try { 31 | renderApp(); 32 | } catch (error) { 33 | renderError(error); 34 | } 35 | }; 36 | module.hot.accept("./UserInterface", () => { 37 | setTimeout(render); 38 | }); 39 | } 40 | 41 | render(); 42 | } 43 | -------------------------------------------------------------------------------- /lib/Views/showGlobalDisclaimer.ts: -------------------------------------------------------------------------------- 1 | import { runInAction } from "mobx"; 2 | import ViewState from "terriajs/lib/ReactViewModels/ViewState"; 3 | import devDisclaimerPreambleText from "./DevelopmentDisclaimerPreamble.html"; 4 | import globalDisclaimerText from "./GlobalDisclaimer.html"; 5 | 6 | /** 7 | * Show global disclaimer 8 | */ 9 | export default function showGlobalDisclaimer(viewState: ViewState) { 10 | const terria = viewState.terria; 11 | const globalDisclaimer = terria.configParameters.globalDisclaimer; 12 | const hostname = window.location.hostname; 13 | if ( 14 | globalDisclaimer && 15 | (globalDisclaimer.enableOnLocalhost || hostname.indexOf("localhost") === -1) 16 | ) { 17 | let message = ""; 18 | // Sometimes we want to show a preamble if the user is viewing a site other than the official production instance. 19 | // This can be expressed as a devHostRegex ("any site starting with staging.") or a negative prodHostRegex ("any site not ending in .gov.au") 20 | if ( 21 | (globalDisclaimer.devHostRegex !== undefined && 22 | hostname.match(globalDisclaimer.devHostRegex)) || 23 | (globalDisclaimer.prodHostRegex !== undefined && 24 | !hostname.match(globalDisclaimer.prodHostRegex)) 25 | ) { 26 | message += devDisclaimerPreambleText; 27 | } 28 | message += globalDisclaimerText; 29 | 30 | const options = { 31 | title: 32 | globalDisclaimer.title !== undefined 33 | ? globalDisclaimer.title 34 | : "Warning", 35 | confirmText: globalDisclaimer.buttonTitle || "Ok", 36 | denyText: globalDisclaimer.denyText || "Cancel", 37 | denyAction: globalDisclaimer.afterDenyLocation 38 | ? function () { 39 | window.location = globalDisclaimer.afterDenyLocation; 40 | } 41 | : undefined, 42 | width: 600, 43 | height: 550, 44 | message: message, 45 | horizontalPadding: 100 46 | }; 47 | runInAction(() => { 48 | viewState.disclaimerSettings = options; 49 | viewState.disclaimerVisible = true; 50 | }); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "workspaces": { 4 | "packages": [ 5 | "packages/terriajs", 6 | "packages/cesium", 7 | "packages/terriajs-server", 8 | "packages/plugin-sample" 9 | ], 10 | "nohoist": [ 11 | "**/husky" 12 | ] 13 | }, 14 | "name": "terriajs-map", 15 | "version": "0.4.2", 16 | "description": "Geospatial catalog explorer based on TerriaJS.", 17 | "license": "Apache-2.0", 18 | "engines": { 19 | "node": ">= 20.0.0" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "http://github.com/TerriaJS/TerriaMap" 24 | }, 25 | "dependencies": { 26 | "terriajs-server": "^4.0.2" 27 | }, 28 | "config": { 29 | "docker": { 30 | "name": "terriamap", 31 | "include": "wwwroot node_modules serverconfig.json index.js package.json version.js", 32 | "dockerfile": "deploy/docker/Dockerfile" 33 | } 34 | }, 35 | "resolutions": { 36 | "underscore": "^1.12.1", 37 | "@types/react": "^17.0.3", 38 | "@types/lodash": "4.14.182", 39 | "@types/css-font-loading-module": "^0.0.13" 40 | }, 41 | "devDependencies": { 42 | "@babel/core": "^7.23.5", 43 | "@babel/preset-env": "^7.23.5", 44 | "@babel/preset-react": "^7.23.3", 45 | "@typescript-eslint/eslint-plugin": "^8.24.0", 46 | "@typescript-eslint/parser": "^8.24.0", 47 | "babel-loader": "^9.2.1", 48 | "css-loader": "^7.1.2", 49 | "ejs": "^3.1.10", 50 | "eslint": "^8.57.1", 51 | "eslint-config-prettier": "^9.1.0", 52 | "eslint-plugin-react": "^7.37.4", 53 | "eslint-plugin-react-hooks": "^5.1.0", 54 | "fetch-mock": "^11.1.5", 55 | "fork-ts-checker-notifier-webpack-plugin": "^9.0.0", 56 | "fork-ts-checker-webpack-plugin": "^9.0.2", 57 | "fs-extra": "^7.0.1", 58 | "gulp": "^5.0.0", 59 | "husky": "^8.0.3", 60 | "is-subdir": "^1.2.0", 61 | "json5": "^2.1.0", 62 | "lodash": "^4.17.21", 63 | "minimist": "^1.2.8", 64 | "node-notifier": "^10.0.1", 65 | "plugin-error": "^2.0.1", 66 | "prettier": "2.7.1", 67 | "pretty-quick": "^4.0.0", 68 | "prop-types": "^15.6.0", 69 | "react": "^16.14.0", 70 | "react-dom": "^16.14.0", 71 | "redbox-react": "^1.3.6", 72 | "resolve-url-loader": "^5.0.0", 73 | "sass": "^1.81.0", 74 | "sass-loader": "^16.0.3", 75 | "style-loader": "^4.0.0", 76 | "svg-sprite-loader": "^6.0.11", 77 | "terriajs": "8.9.5", 78 | "terriajs-cesium": "8.0.2", 79 | "terriajs-plugin-api": "0.0.1-alpha.17", 80 | "terriajs-plugin-sample": "0.0.1-alpha.7", 81 | "typescript": "^5.7.3", 82 | "urijs": "^1.18.12", 83 | "webpack": "^5.96.1", 84 | "webpack-cli": "^5.1.4", 85 | "webpack-dev-server": "^5.1.0", 86 | "yargs": "^17.7.2" 87 | }, 88 | "scripts": { 89 | "prepare": "husky install", 90 | "docker-build-local": "node deploy/docker/create-docker-context.js --build --push --tag auto --local", 91 | "docker-build-prod": "node deploy/docker/create-docker-context.js --build --push --tag auto --repository=ghcr.io/terriajs", 92 | "docker-build-ci": "node deploy/docker/create-docker-context.js --build", 93 | "start": "terriajs-server --config-file serverconfig.json", 94 | "gulp": "gulp", 95 | "postinstall": "echo 'Installation successful. What to do next:\\n yarn gulp dev # Starts the server on port 3001, builds TerriaMap and dependencies, and rebuilds if files change.'", 96 | "hot": "webpack-dev-server --inline --config buildprocess/webpack.config.hot.js --hot --host 0.0.0.0", 97 | "prettier": "prettier --write .", 98 | "prettier-check": "prettier --check ." 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /plugins.ts: -------------------------------------------------------------------------------- 1 | import { TerriaPluginModule } from "terriajs-plugin-api"; 2 | 3 | /** 4 | * A function that when called imports all plugins. 5 | */ 6 | const plugins: () => Promise[] = () => [ 7 | // Add plugin imports. Example: 8 | // import("terriajs-plugin-sample"), 9 | ]; 10 | 11 | export default plugins; 12 | -------------------------------------------------------------------------------- /serverconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "port": 3001, 3 | 4 | "allowProxyFor": [ 5 | "nicta.com.au", 6 | "gov.au", 7 | "csiro.au", 8 | "arcgis.com", 9 | "argo.jcommops.org", 10 | "www.abc.net.au", 11 | "geoserver.aurin.org.au", 12 | "mapsengine.google.com", 13 | "s3-ap-southeast-2.amazonaws.com", 14 | "adelaidecitycouncil.com", 15 | "www.dptiapps.com.au", 16 | "geoserver-123.aodn.org.au", 17 | "geoserver.imos.org.au", 18 | "nci.org.au", 19 | "static.nationalmap.nicta.com.au", 20 | "githubusercontent.com", 21 | "gov", 22 | "gov.uk", 23 | "gov.nz", 24 | "services.aremi.data61.io" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /terria-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/terria-logo.png -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "terriajs/tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /wwwroot/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | The NationalMap - not found 6 | 7 | 8 | 9 | 10 | 18 | 19 | 20 | 21 | 47 |
48 | 49 | 50 |
51 |
52 |
53 | 54 | 55 | 56 | 57 | 58 |
59 |
60 | 61 |

That page doesn't seem to be here

62 |

The page you're looking for doesn't seem to exist. If you think this is an error, please send an email to data@pmc.gov.au.

63 |

← Return to NationalMap. 64 |

404
65 | 66 | 67 |
68 |
69 | 70 | 71 |
72 |
73 | 74 |
75 |
76 |
77 |

© Department of the Prime Minister and Cabinet, Department of Communications, and National ICT Australia Limited (NICTA) 2014-2015. All Rights Reserved.

78 |

79 | Terms and conditions – 80 | Privacy 81 |

82 |
83 |
84 |
85 | 86 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /wwwroot/500.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 500 - Internal server error 6 | 7 | 8 | 9 | 10 | 18 | 19 | 20 | 21 | 47 |
48 | 49 | 50 |
51 |
52 |
53 | 54 | 55 | 56 | 57 | 58 |
59 |
60 | 61 |

Internal server error

62 |

Something went wrong on our server. Please send an email to data@pmc.gov.au, explaining what you were doing at the time it happened. This will help us track down the cause.

63 |

← Return to NationalMap. 64 |

500
65 | 66 | 67 |
68 |
69 | 70 |
71 |
72 | 73 |
74 |
75 |
76 |

© Department of the Prime Minister and Cabinet, Department of Communications, and National ICT Australia Limited (NICTA) 2014-2015. All Rights Reserved.

77 |

78 | Terms and conditions – 79 | Privacy 80 |

81 |
82 |
83 |
84 | 85 | 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /wwwroot/SpecRunner.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Jasmine Spec Runner v2.0.1 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicon.ico -------------------------------------------------------------------------------- /wwwroot/favicons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/android-icon-144x144.png -------------------------------------------------------------------------------- /wwwroot/favicons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/android-icon-192x192.png -------------------------------------------------------------------------------- /wwwroot/favicons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/android-icon-36x36.png -------------------------------------------------------------------------------- /wwwroot/favicons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/android-icon-48x48.png -------------------------------------------------------------------------------- /wwwroot/favicons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/android-icon-72x72.png -------------------------------------------------------------------------------- /wwwroot/favicons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/android-icon-96x96.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-114x114.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-120x120.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-144x144.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-152x152.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-180x180.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-57x57.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-60x60.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-72x72.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-76x76.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /wwwroot/favicons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/apple-icon.png -------------------------------------------------------------------------------- /wwwroot/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /wwwroot/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /wwwroot/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /wwwroot/favicons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/favicon-96x96.png -------------------------------------------------------------------------------- /wwwroot/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/favicon.ico -------------------------------------------------------------------------------- /wwwroot/favicons/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TerriaJS", 3 | "start_url": "/", 4 | "display": "standalone", 5 | "icons": [ 6 | { 7 | "src": "/android-icon-36x36.png", 8 | "sizes": "36x36", 9 | "type": "image/png", 10 | "density": "0.75" 11 | }, 12 | { 13 | "src": "/android-icon-48x48.png", 14 | "sizes": "48x48", 15 | "type": "image/png", 16 | "density": "1.0" 17 | }, 18 | { 19 | "src": "/android-icon-72x72.png", 20 | "sizes": "72x72", 21 | "type": "image/png", 22 | "density": "1.5" 23 | }, 24 | { 25 | "src": "/android-icon-96x96.png", 26 | "sizes": "96x96", 27 | "type": "image/png", 28 | "density": "2.0" 29 | }, 30 | { 31 | "src": "/android-icon-144x144.png", 32 | "sizes": "144x144", 33 | "type": "image/png", 34 | "density": "3.0" 35 | }, 36 | { 37 | "src": "/android-icon-192x192.png", 38 | "sizes": "192x192", 39 | "type": "image/png", 40 | "density": "4.0" 41 | } 42 | ] 43 | } 44 | -------------------------------------------------------------------------------- /wwwroot/favicons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/ms-icon-144x144.png -------------------------------------------------------------------------------- /wwwroot/favicons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/ms-icon-150x150.png -------------------------------------------------------------------------------- /wwwroot/favicons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/ms-icon-310x310.png -------------------------------------------------------------------------------- /wwwroot/favicons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/favicons/ms-icon-70x70.png -------------------------------------------------------------------------------- /wwwroot/help/css/bootstrap-theme.min.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA"} -------------------------------------------------------------------------------- /wwwroot/help/css/custom.css: -------------------------------------------------------------------------------- 1 | /* Sticky footer styles 2 | -------------------------------------------------- */ 3 | html { 4 | position: relative; 5 | min-height: 100%; 6 | } 7 | body { 8 | /* Margin bottom by footer height */ 9 | margin-bottom: 150px; 10 | } 11 | .footer { 12 | position: absolute; 13 | bottom: 0; 14 | width: 100%; 15 | /* Set the fixed height of the footer here */ 16 | height: 100px; 17 | background-color: #f5f5f5; 18 | } 19 | 20 | 21 | /* Custom page CSS 22 | -------------------------------------------------- */ 23 | /* Not required for template or sticky footer method. */ 24 | 25 | body > .container { 26 | padding: 60px 15px 0; 27 | } 28 | .container .text-muted { 29 | margin: 20px 0; 30 | } 31 | 32 | .footer > .container { 33 | padding-right: 15px; 34 | padding-left: 15px; 35 | } 36 | 37 | code { 38 | font-size: 80%; 39 | } 40 | 41 | /* Custom page CSS: PG 42 | -------------------------------------------------- */ 43 | /* Not required for template or sticky footer method. */ 44 | 45 | body { 46 | color: #484848; 47 | } 48 | 49 | .content { 50 | margin-top: 20px; 51 | } 52 | 53 | .embed-responsive { 54 | 55 | margin-bottom: 20px; 56 | 57 | } 58 | 59 | ul { 60 | margin-left: 20px; 61 | padding-left: 0; 62 | } 63 | 64 | .content ul li { 65 | margin-bottom: 10px; 66 | } 67 | 68 | .how-to, .key-features, .faq { 69 | list-style: none; 70 | padding-left: 0; 71 | margin-left: 0; 72 | } 73 | 74 | .side-nav { 75 | margin-bottom: 50px; 76 | } 77 | 78 | .side-nav a { 79 | text-decoration: none; 80 | } 81 | 82 | 83 | .side-nav .active { 84 | font-weight: bold; 85 | } 86 | 87 | .nav-header { 88 | font-size: 16px; 89 | margin-top: 25px; 90 | font-weight: 500; 91 | } 92 | 93 | .nav-header:first-of-type { 94 | margin-top: 0px; 95 | } 96 | 97 | .navbar-inverse { 98 | background-color: #353B43; 99 | border-color: #080808; 100 | } 101 | 102 | .navbar-inverse .navbar-nav > li > a { 103 | color: #ccc; 104 | border-radius: .2em; 105 | margin-right: 5px; 106 | } 107 | 108 | .navbar-inverse .navbar-nav > li > a:hover { 109 | background-color: #3c434c; 110 | } 111 | 112 | .navbar-inverse .navbar-nav > .active > a { 113 | background-color: #49515c; 114 | } 115 | .navbar-inverse .navbar-nav > .active > a:hover { 116 | background-color: #49515c; 117 | } 118 | 119 | .navbar-brand { 120 | padding-top: 5px; 121 | padding-bottom: 5px; 122 | } 123 | 124 | .navbar-brand img { 125 | width: 140px; 126 | } 127 | 128 | 129 | h1, h2, h3, h4, h5, h6 { 130 | font-weight: 300; 131 | font-family: 'Open Sans', sans-serif; 132 | } 133 | 134 | h1:first-of-type { 135 | margin-top: 0; 136 | padding-top: 0; 137 | } 138 | 139 | h1 { 140 | font-size: 26px; 141 | margin-bottom: 30px; 142 | } 143 | 144 | h2 { 145 | font-size: 22px; 146 | margin-top: 30px; 147 | margin-bottom: 20px; 148 | } 149 | 150 | .partners img { 151 | width: 160px; 152 | margin-bottom: 30px; 153 | align-content: center; 154 | } 155 | 156 | .panel-group .panel { 157 | border: none; 158 | border-radius: 0; 159 | } 160 | 161 | .panel-default>.panel-heading { 162 | background-color: #FFFFFF; 163 | padding-left: 0; 164 | padding-top: 20px; 165 | padding-bottom: 20px; 166 | } 167 | 168 | .panel-body { 169 | padding-left: 0; 170 | } 171 | 172 | .affix { 173 | position: static; 174 | } 175 | 176 | /* archor styling */ 177 | 178 | h2 > a { 179 | text-decoration: none; 180 | color: #484848; 181 | } 182 | 183 | 184 | /* Extra small devices (phones, less than 768px) */ 185 | /* No media query since this is the default in Bootstrap */ 186 | 187 | /* Small devices (tablets, 768px and up) */ 188 | @media (min-width: @screen-sm-min) { 189 | 190 | .affix { 191 | position: fixed; 192 | text 193 | } 194 | 195 | } 196 | 197 | /* Medium devices (desktops, 992px and up) */ 198 | @media (min-width: @screen-md-min) { ... } 199 | 200 | /* Large devices (large desktops, 1200px and up) */ 201 | @media (min-width: 1200px) { 202 | 203 | .navbar { 204 | min-height: 80px; 205 | } 206 | 207 | .navbar-nav>li>a { 208 | margin-top: 20px; 209 | padding-top: 10px; 210 | padding-bottom: 10px; 211 | } 212 | 213 | .navbar-brand { 214 | margin-right: 80px; 215 | padding-top: 15px; 216 | padding-bottom: 15px; 217 | } 218 | 219 | .navbar-brand { 220 | height: 80px; 221 | } 222 | 223 | .navbar-brand img { 224 | width: 170px; 225 | } 226 | 227 | .content { 228 | margin-top: 80px; 229 | } 230 | 231 | .nav-header:first-of-type { 232 | margin-top: 25px; 233 | } 234 | 235 | .screenshot { 236 | margin-bottom: 20px; 237 | } 238 | 239 | 240 | } 241 | 242 | 243 | 244 | -------------------------------------------------------------------------------- /wwwroot/help/data-catalogue.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | The National Map - Help & FAQ - Data Catalogue 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | 60 | 61 | 62 |
63 |
64 | 65 | 95 | 96 |
97 | 98 |

Data Catalogue

99 | 100 | screenshot of the NationalMap Data Catalogue 101 | 102 |

A wealth of spatial data has been made available though NationalMap, all of which can be accessed via the Data Catalogue. To launch the Data Catalogue, click the Add Data button in the left hand panel opposite the map.

103 | 104 |

Data sets displayed in the Data Catalogue are directly referenced from data.gov.au or from a server provided by the relevant department or agency. The NationalMap does not store any of the data it serves. For example, if you access data relating to broadband availability and quality, you are accessing that data directly from the Department of Communications and the Arts. When you access data relating to surface geology, it is accessed directly from Geoscience Australia. If you access data relating to water, it is typically coming directly from the Bureau of Meteorology. The NationalMap itself does not store any data - it provides a map-based view of data that is stored by a growing number of government bodies. 105 |

106 | 107 |

You can see details of the department or agency that provides the spatial data by clicking on the title of your prefered data set in the Data Catalogue.

108 | 109 |
110 | 111 | 112 |
113 |
114 | 115 |
116 |
117 |

© Department of the Prime Minister and Cabinet, Department of Communications, and National ICT Australia Limited (NICTA) 2014-2015. All Rights Reserved.

118 |

Terms and conditionsPrivacy

119 | 120 |
121 |
122 | 123 | 124 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /wwwroot/help/data-workbench.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | The National Map - Help & FAQ - Data Workbench 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | 60 | 61 | 62 |
63 |
64 | 65 | 95 | 96 |
97 | 98 |

Data Workbench

99 | 100 | screenshot of the NationalMap Data Workbench 101 | 102 |

When a data set is added to the map via the Data Catalogue, a legend for that data set will appear at the top of your Data Workbench (pictured above). From the Data Workbench you can:

103 | 104 |
    105 |
  • Set the order in which data is shown on the map. To do this, simply click on the title of a data set and drag it to a new position in your Workbench.
  • 106 |
  • Toggle the visibility of added data sets. To do this, click on the checkbox opposite your prefered data set title.
  • 107 |
  • Zoom to the geographical extent of an added data set
  • 108 |
  • Set the opacity of individual data sets
  • 109 |
  • Remove data sets from the map. Note: removed data sets can always be re-added via the Data Catalogue.
  • 110 |
111 | 112 |
113 | 114 | 115 |
116 |
117 | 118 |
119 |
120 |

© Department of the Prime Minister and Cabinet, Department of Communications, and National ICT Australia Limited (NICTA) 2014-2015. All Rights Reserved.

121 |

Terms and conditionsPrivacy

122 | 123 |
124 |
125 | 126 | 127 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /wwwroot/help/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /wwwroot/help/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /wwwroot/help/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /wwwroot/help/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /wwwroot/help/img/Comms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/Comms.jpg -------------------------------------------------------------------------------- /wwwroot/help/img/Finalist-Innovation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/Finalist-Innovation.gif -------------------------------------------------------------------------------- /wwwroot/help/img/GA-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/GA-dark.png -------------------------------------------------------------------------------- /wwwroot/help/img/data-catalogue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/data-catalogue.jpg -------------------------------------------------------------------------------- /wwwroot/help/img/data-workbench.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/data-workbench.jpg -------------------------------------------------------------------------------- /wwwroot/help/img/data61-white.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/data61-white.jpg -------------------------------------------------------------------------------- /wwwroot/help/img/iawards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/iawards.png -------------------------------------------------------------------------------- /wwwroot/help/img/map-controls.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/map-controls.jpg -------------------------------------------------------------------------------- /wwwroot/help/img/map-settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/map-settings.jpg -------------------------------------------------------------------------------- /wwwroot/help/img/nm-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/nm-logo.png -------------------------------------------------------------------------------- /wwwroot/help/img/pmc-stacked.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/help/img/pmc-stacked.jpg -------------------------------------------------------------------------------- /wwwroot/help/js/affix.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: affix.js v3.3.6 3 | * http://getbootstrap.com/javascript/#affix 4 | * ======================================================================== 5 | * Copyright 2011-2015 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // AFFIX CLASS DEFINITION 14 | // ====================== 15 | 16 | var Affix = function (element, options) { 17 | this.options = $.extend({}, Affix.DEFAULTS, options) 18 | 19 | this.$target = $(this.options.target) 20 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) 21 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) 22 | 23 | this.$element = $(element) 24 | this.affixed = null 25 | this.unpin = null 26 | this.pinnedOffset = null 27 | 28 | this.checkPosition() 29 | } 30 | 31 | Affix.VERSION = '3.3.6' 32 | 33 | Affix.RESET = 'affix affix-top affix-bottom' 34 | 35 | Affix.DEFAULTS = { 36 | offset: 0, 37 | target: window 38 | } 39 | 40 | Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { 41 | var scrollTop = this.$target.scrollTop() 42 | var position = this.$element.offset() 43 | var targetHeight = this.$target.height() 44 | 45 | if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false 46 | 47 | if (this.affixed == 'bottom') { 48 | if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' 49 | return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' 50 | } 51 | 52 | var initializing = this.affixed == null 53 | var colliderTop = initializing ? scrollTop : position.top 54 | var colliderHeight = initializing ? targetHeight : height 55 | 56 | if (offsetTop != null && scrollTop <= offsetTop) return 'top' 57 | if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' 58 | 59 | return false 60 | } 61 | 62 | Affix.prototype.getPinnedOffset = function () { 63 | if (this.pinnedOffset) return this.pinnedOffset 64 | this.$element.removeClass(Affix.RESET).addClass('affix') 65 | var scrollTop = this.$target.scrollTop() 66 | var position = this.$element.offset() 67 | return (this.pinnedOffset = position.top - scrollTop) 68 | } 69 | 70 | Affix.prototype.checkPositionWithEventLoop = function () { 71 | setTimeout($.proxy(this.checkPosition, this), 1) 72 | } 73 | 74 | Affix.prototype.checkPosition = function () { 75 | if (!this.$element.is(':visible')) return 76 | 77 | var height = this.$element.height() 78 | var offset = this.options.offset 79 | var offsetTop = offset.top 80 | var offsetBottom = offset.bottom 81 | var scrollHeight = Math.max($(document).height(), $(document.body).height()) 82 | 83 | if (typeof offset != 'object') offsetBottom = offsetTop = offset 84 | if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) 85 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) 86 | 87 | var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) 88 | 89 | if (this.affixed != affix) { 90 | if (this.unpin != null) this.$element.css('top', '') 91 | 92 | var affixType = 'affix' + (affix ? '-' + affix : '') 93 | var e = $.Event(affixType + '.bs.affix') 94 | 95 | this.$element.trigger(e) 96 | 97 | if (e.isDefaultPrevented()) return 98 | 99 | this.affixed = affix 100 | this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null 101 | 102 | this.$element 103 | .removeClass(Affix.RESET) 104 | .addClass(affixType) 105 | .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') 106 | } 107 | 108 | if (affix == 'bottom') { 109 | this.$element.offset({ 110 | top: scrollHeight - height - offsetBottom 111 | }) 112 | } 113 | } 114 | 115 | 116 | // AFFIX PLUGIN DEFINITION 117 | // ======================= 118 | 119 | function Plugin(option) { 120 | return this.each(function () { 121 | var $this = $(this) 122 | var data = $this.data('bs.affix') 123 | var options = typeof option == 'object' && option 124 | 125 | if (!data) $this.data('bs.affix', (data = new Affix(this, options))) 126 | if (typeof option == 'string') data[option]() 127 | }) 128 | } 129 | 130 | var old = $.fn.affix 131 | 132 | $.fn.affix = Plugin 133 | $.fn.affix.Constructor = Affix 134 | 135 | 136 | // AFFIX NO CONFLICT 137 | // ================= 138 | 139 | $.fn.affix.noConflict = function () { 140 | $.fn.affix = old 141 | return this 142 | } 143 | 144 | 145 | // AFFIX DATA-API 146 | // ============== 147 | 148 | $(window).on('load', function () { 149 | $('[data-spy="affix"]').each(function () { 150 | var $spy = $(this) 151 | var data = $spy.data() 152 | 153 | data.offset = data.offset || {} 154 | 155 | if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom 156 | if (data.offsetTop != null) data.offset.top = data.offsetTop 157 | 158 | Plugin.call($spy, data) 159 | }) 160 | }) 161 | 162 | }(jQuery); 163 | -------------------------------------------------------------------------------- /wwwroot/help/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /wwwroot/images/Dept_of_Comms-Reg-Stacked-Press_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/Dept_of_Comms-Reg-Stacked-Press_0.jpg -------------------------------------------------------------------------------- /wwwroot/images/Finalist-Innovation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/Finalist-Innovation.gif -------------------------------------------------------------------------------- /wwwroot/images/aremi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/aremi.jpg -------------------------------------------------------------------------------- /wwwroot/images/aurin-map.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/aurin-map.jpg -------------------------------------------------------------------------------- /wwwroot/images/basemaps/australian-topo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/basemaps/australian-topo.png -------------------------------------------------------------------------------- /wwwroot/images/basemaps/bing-aerial-labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/basemaps/bing-aerial-labels.png -------------------------------------------------------------------------------- /wwwroot/images/basemaps/bing-aerial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/basemaps/bing-aerial.png -------------------------------------------------------------------------------- /wwwroot/images/basemaps/bing-maps-roads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/basemaps/bing-maps-roads.png -------------------------------------------------------------------------------- /wwwroot/images/basemaps/natural-earth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/basemaps/natural-earth.png -------------------------------------------------------------------------------- /wwwroot/images/branding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/branding.png -------------------------------------------------------------------------------- /wwwroot/images/data61-white-bg-huge.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/data61-white-bg-huge.jpg -------------------------------------------------------------------------------- /wwwroot/images/geoscience_stacked.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/geoscience_stacked.jpg -------------------------------------------------------------------------------- /wwwroot/images/nationalmap-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/nationalmap-logo.png -------------------------------------------------------------------------------- /wwwroot/images/neii.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/neii.jpg -------------------------------------------------------------------------------- /wwwroot/images/nicta-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/nicta-logo.png -------------------------------------------------------------------------------- /wwwroot/images/nicta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/nicta.png -------------------------------------------------------------------------------- /wwwroot/images/northernaustralia.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/northernaustralia.jpg -------------------------------------------------------------------------------- /wwwroot/images/solar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/solar.png -------------------------------------------------------------------------------- /wwwroot/images/square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/square.png -------------------------------------------------------------------------------- /wwwroot/images/terrarium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/terrarium.png -------------------------------------------------------------------------------- /wwwroot/images/terria_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/terria_logo.png -------------------------------------------------------------------------------- /wwwroot/images/welcome-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/welcome-bg.jpg -------------------------------------------------------------------------------- /wwwroot/images/wind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/images/wind.png -------------------------------------------------------------------------------- /wwwroot/index.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | Terria Map 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /wwwroot/languages/en/languageOverrides.json: -------------------------------------------------------------------------------- 1 | { 2 | "gettingstarted": { 3 | "title": "Getting started with the map", 4 | "markdownText": "## Getting started with the map\n\nIf you're new to the map or using spatial data, our Getting Started video quickly covers the basic functionality you'll need to use to add and interrogate data sets.\n\nIf you don't have time to watch the video, we suggest exploring the following areas:\n\n1. Search for a location to quickly find an area of interest\n2. Use 'Explore map data' to view the catalogue of available data sets and add them to the map\n3. Interact with the data layer, including opacity and toggling on and off on the left in your workbench\n4. Click on the data on the map to view more detailed data, including the raw data\n5. Change your basemap using options in 'Map Settings' to help make some data sets more visible\n6. Zoom and change your view, including tilting the view angle using the controls on the right-hand side of the screen", 5 | "videoUrl": "https://www.youtube-nocookie.com/embed/FjSxaviSLhc", 6 | "placeholderImage": "https://img.youtube.com/vi/FjSxaviSLhc/maxresdefault.jpg" 7 | }, 8 | "stepbystepguide": { 9 | "title": "Step by step guide", 10 | "markdownText": "## Step by step guide\n\nLaunch a step by step guide for various popular workflows below:", 11 | "gettingstarted": { 12 | "title": "Getting started with the map", 13 | "step1": { 14 | "markdownDescription": "The search is at the top of the workbench on the left.", 15 | "title": "Search for a location to find an area of interest" 16 | }, 17 | "step2": { 18 | "markdownDescription": "You can view the catalogue at any time", 19 | "title": "Use \"Explore map data\" to view data catalogue" 20 | }, 21 | "step3": { 22 | "markdownDescription": "Find a dataset of interest", 23 | "title": "Search for data or browse catalogue" 24 | }, 25 | "step4": { 26 | "title": "Add data to map by clicking on + sign or \"Add to map\" button in preview window", 27 | "markdownDescription": "" 28 | }, 29 | "step5": { 30 | "title": "Interact with data, including opacity and toggling on & off on the left in your workbench" 31 | }, 32 | "step6": { 33 | "title": "Click on data on the map to view more details by triggering Feature Information panel" 34 | }, 35 | "step7": { 36 | "title": "Change your basemap using options in \"Map Settings\" to improve contrast" 37 | }, 38 | "step8": { 39 | "title": "Zoom and change view using the controls on the right-hand side of the screen" 40 | } 41 | }, 42 | "satelliteimagery": { 43 | "title": "Adding satellite imagery", 44 | "footnote": "Important: Satellite imagery can take a little while to load so please be patient. If images don’t seem to be loading, zoom out a little bit", 45 | "step1": { 46 | "title": "Find the location to view satellite imagery", 47 | "markdownDescription": "- Use the location search or zoom and pan around the map using your mouse or the zoom controls" 48 | }, 49 | "step2": { 50 | "title": "Add the satellite imagery to the map", 51 | "markdownDescription": "- Open the data catalogue using \"Explore map data\" button\n- Navigate through datasets to select your satellite option: Landsat or Sentinel, and daily or composite images. This can depend on resolution of the image you need (10m or 25m) and whether you want daily, 16 day composite, or annual average images\n - Select \"Add to the map\" to view the satellite imagery" 52 | }, 53 | "step3": { 54 | "title": "Filter images to find satellite imagery", 55 | "markdownDescription": "- Filter images by location to quickly find satellite images for that location\n - Satellites circle the globe many times a day. You can expect satellite imagery to be available for one location every two weeks\n - If you haven't already selected your point of interest on the map, zoom in to select one. You will see the filter applied in blue in the Workbench on the left" 56 | }, 57 | "step4": { 58 | "title": "Select a time and date", 59 | "markdownDescription": "- Use the date picker to select a time and date. Cycle backwards through previous years using the back arrow\n - Choose another date if your imagery is obscured by clouds. You can quickly cycle back and forward using the arrows next to the date picker" 60 | } 61 | }, 62 | "comparetimeseries": { 63 | "title": "View and compare different points in time", 64 | "footnote": "Important: Any time series data can be compared using the Split Screen Mode, not just satellite imagery", 65 | "step1": { 66 | "title": "Add a time series dataset to the map", 67 | "markdownDescription": "- Satellite imagery is a good example of time series data, with many satellites going back decades\n- Find your location of interest and filter available imagery by this location\n-See our Adding Satellite Imagery to the Map guide for more" 68 | }, 69 | "step2": { 70 | "title": "Select the time and date", 71 | "markdownDescription": "- In the workbench on the left, select the time and date which will open the date picker\n- Select a year, month and date, or navigate back to other years and even centuries using the back arrow\n- Available dates appear in blue" 72 | }, 73 | "step3": { 74 | "title": "Compare different dates at one location", 75 | "markdownDescription": "- From the 3 dots drop-down menu in the workbench, press 'Compare' to activate Split Screen Mode\n- A duplicate copy of your dataset will appear in the workbench\n- Choose the dates you want to compare on the left and right of the screen\n- Drag the slider using the white button to swipe and compare the two image dates" 76 | }, 77 | "step4": { 78 | "title": "Close Split Screen Mode", 79 | "markdownDescription": "- Escape the Split Screen Mode by pressing the 'x' of Split Screen Mode title in the workbench\n- Remove the duplicate copy of your dataset in the workbench using the 3 dots drop-down menu" 80 | } 81 | } 82 | }, 83 | "helpContentTerm1": { 84 | "term": "dataset", 85 | "aliases": ["data set", "data sets", "datasets"], 86 | "content": "A collection of related information, organised as one using a common data structure, e.g. \"average house prices in Sydney for 2019\" or \"minimum and maximum daily temperature\"" 87 | }, 88 | "helpContentTerm2": { 89 | "term": "time series", 90 | "aliases": ["timeseries"], 91 | "content": "A sequence of data collected over different points in time, e.g. temperature sensor data or a gallery of images of the same location" 92 | }, 93 | "helpContentTerm3": { 94 | "term": "workbench", 95 | "content": "The panel on the left side of the screen that shows what datasets you have added to the map" 96 | }, 97 | "helpContentTerm4": { 98 | "term": "4D", 99 | "content": "3D data that also has a time-series component" 100 | }, 101 | "helpContentTerm5": { 102 | "term": "catalog", 103 | "aliases": ["catalogue"], 104 | "content": "the inventory of all datasets available to be added to the map" 105 | }, 106 | "helpContentTerm6": { 107 | "term": "base maps", 108 | "aliases": ["basemap", "base map", "basemaps"], 109 | "content": "Different map options for the blank base map, such as Bing imagery, roads, dark or light maps" 110 | }, 111 | "helpContentTerm7": { 112 | "term": "source dataset", 113 | "content": "The dataset you added to your workbench that allows for difference calculations" 114 | }, 115 | "helpContentTerm8": { 116 | "term": "preview style", 117 | "content": "The way the dataset appears in the preview window. We recommend true colour to search for cloud-free images" 118 | } 119 | } 120 | -------------------------------------------------------------------------------- /wwwroot/lowpoly_bus/attribution.txt: -------------------------------------------------------------------------------- 1 | Model from Sketchfab user rkmorello: 2 | https://sketchfab.com/models/5c8b8d30a37543feae428846484d316b 3 | Available under Creative Commons Attribution license 4 | -------------------------------------------------------------------------------- /wwwroot/lowpoly_bus/scene.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/lowpoly_bus/scene.bin -------------------------------------------------------------------------------- /wwwroot/lowpoly_bus/textures/CARRO3PCARRO1P1C1greytire_baseColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/lowpoly_bus/textures/CARRO3PCARRO1P1C1greytire_baseColor.png -------------------------------------------------------------------------------- /wwwroot/lowpoly_bus/textures/onibus1body1_baseColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/lowpoly_bus/textures/onibus1body1_baseColor.png -------------------------------------------------------------------------------- /wwwroot/public/css/custom.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - Shop Item HTML Template (http://startbootstrap.com) 3 | * Code licensed under the Apache License v2.0. 4 | * For details, see http://www.apache.org/licenses/LICENSE-2.0. 5 | */ 6 | 7 | html { 8 | position: relative; 9 | min-height: 100%; 10 | } 11 | 12 | body { 13 | padding-top: 100px; /* Required padding for .navbar-fixed-top. Remove if using .navbar-static-top. Change if height of navigation changes. */ 14 | padding-bottom: 20px; 15 | margin-bottom: 60px; /* Margin bottom by footer height */ 16 | } 17 | 18 | .container { 19 | padding: 0; 20 | } 21 | 22 | .logo-block { 23 | margin-top: 35px; 24 | } 25 | 26 | a { 27 | outline: none; 28 | } 29 | 30 | ul { 31 | padding-left: 20px; 32 | } 33 | 34 | .anchor { 35 | padding-top: 30px; 36 | } 37 | 38 | .anchor:focus { 39 | outline: 0; 40 | } 41 | 42 | /* footer */ 43 | 44 | .footer { 45 | position: absolute; 46 | bottom: 0; 47 | width: 100%; 48 | height: 90px; 49 | background-color: #f5f5f5; 50 | } 51 | 52 | .footer p { 53 | margin-top: 10px; 54 | } 55 | 56 | @media (min-width: 768px) { 57 | .footer { 58 | height: 90px; 59 | padding-top: 10px; 60 | } 61 | } 62 | 63 | /* navbar */ 64 | 65 | .navbar { 66 | min-height: 60px; 67 | } 68 | 69 | .navbar-inverse { 70 | background-color: #353B43; 71 | border-color: #080808; 72 | } 73 | 74 | .navbar-brand { 75 | padding-top: 10px; 76 | } 77 | 78 | .navbar-brand img { 79 | height: 40px; 80 | } 81 | 82 | .navbar-inverse .navbar-text { 83 | color: #ccc; 84 | } 85 | .navbar-inverse .navbar-nav > li > a { 86 | color: #ccc; 87 | } 88 | 89 | .navbar-inverse .navbar-nav> .active > a { 90 | background-color: #202428; 91 | } 92 | 93 | .navbar-nav > li > a { 94 | padding-top: 15px; 95 | padding-bottom: 15px; 96 | } 97 | 98 | @media (min-width: 768px) { 99 | .navbar-toggle { 100 | display: none; 101 | } 102 | 103 | .navbar-nav > li > a { 104 | padding-top: 20px; 105 | padding-bottom: 20px; 106 | } 107 | } 108 | 109 | /* navbar toggle (mobile) */ 110 | 111 | 112 | .navbar-header { 113 | padding-left: 15px; 114 | padding-right: 15px; 115 | } 116 | 117 | .navbar-nav { 118 | padding-left: 10px; 119 | padding-right: 10px; 120 | } 121 | 122 | .navbar-toggle { 123 | margin-top: 13px; 124 | } 125 | 126 | 127 | /* headings */ 128 | 129 | h1, h2, h3, h4, h5, h6 { 130 | font-weight: 300; 131 | font-family: 'Roboto', sans-serif; 132 | } 133 | 134 | h1 { 135 | font-size: 24px; 136 | margin-top: 0; 137 | margin-bottom: 20px; 138 | } 139 | 140 | h2 { 141 | font-size: 20px; 142 | } 143 | 144 | h3 { 145 | font-size: 18px; 146 | } 147 | 148 | /* sub nav */ 149 | 150 | .list-group-item:first-child { 151 | border-top-left-radius: 2px; 152 | border-top-right-radius: 2px; 153 | } 154 | 155 | .list-group-item:last-child { 156 | border-bottom-left-radius: 2px; 157 | border-bottom-right-radius: 2px; 158 | } 159 | 160 | /* terms */ 161 | 162 | .terms { 163 | text-decoration: none; 164 | } 165 | 166 | /* sidebar */ 167 | 168 | #sidebar { 169 | margin-bottom: 40px; 170 | } 171 | 172 | #sidebar p { 173 | font-size: 15px; 174 | } 175 | 176 | #sidebar expl { 177 | font-size: 12px; 178 | } 179 | 180 | .sidebar-list { 181 | list-style: none; 182 | padding-left: 0; 183 | } 184 | 185 | .sidebar-list li { 186 | font-size: 13px; 187 | } 188 | 189 | @media (min-width: 768px) { 190 | #sidebar { 191 | margin-top: 48px; 192 | } 193 | } 194 | 195 | /* logos */ 196 | 197 | .logo { 198 | margin-bottom: 20px; 199 | } 200 | 201 | /* First level of nav */ 202 | .sidenav { 203 | margin-top: 30px; 204 | margin-bottom: 30px; 205 | padding-top: 10px; 206 | padding-bottom: 10px; 207 | } 208 | 209 | /* Responsive iframe fix */ 210 | 211 | .video-container { 212 | position: relative; 213 | padding-bottom: 56.25%; 214 | margin-bottom: 15px; 215 | padding-top: 35px; 216 | height: 0; 217 | overflow: hidden; 218 | } 219 | 220 | .video-container iframe { 221 | position: absolute; 222 | top:0; 223 | left: 0; 224 | width: 100%; 225 | height: 100%; 226 | } 227 | 228 | /* help and faq */ 229 | 230 | .faq-grouping { 231 | color: #b1b1b1; 232 | margin-top: 30px; 233 | margin-bottom: 20px; 234 | } 235 | 236 | .panel-title { 237 | line-height: 1.5em; 238 | } 239 | 240 | .text-indent p { 241 | margin-left: 10px; 242 | } 243 | 244 | p.no-indent { 245 | margin-left: 0; 246 | } 247 | 248 | .img-group { 249 | margin-top: 20px; 250 | margin-bottom: 20px; 251 | } 252 | 253 | .howto { 254 | margin-bottom: 13px; 255 | } 256 | 257 | /* lists */ 258 | 259 | .starter-template ul li { 260 | padding-bottom: 10px; 261 | } 262 | 263 | /* accordion */ 264 | 265 | #accordion { 266 | margin-bottom: 30px; 267 | } 268 | 269 | .panel-default { 270 | border: none; 271 | } 272 | 273 | .panel-heading { 274 | padding: 15px 0; 275 | } 276 | 277 | .panel-group { 278 | margin-top: -10px; 279 | z-index: 100; 280 | } 281 | 282 | .panel-group a { 283 | z-index: 1000; 284 | } 285 | 286 | .panel-default>.panel-heading { 287 | background-color: #FFFFFF; 288 | } 289 | 290 | .panel-group .panel-heading+.panel-collapse>.panel-body, .panel-group .panel-heading+.panel-collapse>.list-group { 291 | border-top: none; 292 | } 293 | -------------------------------------------------------------------------------- /wwwroot/public/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /wwwroot/public/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /wwwroot/public/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /wwwroot/public/img/Comms.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/Comms.jpg -------------------------------------------------------------------------------- /wwwroot/public/img/Finalist-Innovation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/Finalist-Innovation.gif -------------------------------------------------------------------------------- /wwwroot/public/img/GA-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/GA-dark.png -------------------------------------------------------------------------------- /wwwroot/public/img/GA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/GA.png -------------------------------------------------------------------------------- /wwwroot/public/img/Gov_NICTA_NM_logos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/Gov_NICTA_NM_logos.png -------------------------------------------------------------------------------- /wwwroot/public/img/InfoButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/InfoButton.png -------------------------------------------------------------------------------- /wwwroot/public/img/ZoomHome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/ZoomHome.png -------------------------------------------------------------------------------- /wwwroot/public/img/ZoomIn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/ZoomIn.png -------------------------------------------------------------------------------- /wwwroot/public/img/ZoomOut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/ZoomOut.png -------------------------------------------------------------------------------- /wwwroot/public/img/base-maps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/base-maps.png -------------------------------------------------------------------------------- /wwwroot/public/img/compass-control.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/compass-control.png -------------------------------------------------------------------------------- /wwwroot/public/img/data-catalogue-groups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/data-catalogue-groups.png -------------------------------------------------------------------------------- /wwwroot/public/img/data-catalogue-subgroups.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/data-catalogue-subgroups.png -------------------------------------------------------------------------------- /wwwroot/public/img/data61-white.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/data61-white.jpg -------------------------------------------------------------------------------- /wwwroot/public/img/data61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/data61.png -------------------------------------------------------------------------------- /wwwroot/public/img/dragIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/dragIcon.png -------------------------------------------------------------------------------- /wwwroot/public/img/dragIconLight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/dragIconLight.png -------------------------------------------------------------------------------- /wwwroot/public/img/glyphicons_067_cleaning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/glyphicons_067_cleaning.png -------------------------------------------------------------------------------- /wwwroot/public/img/glyphicons_094_vector_path_square.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/glyphicons_094_vector_path_square.png -------------------------------------------------------------------------------- /wwwroot/public/img/glyphicons_095_vector_path_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/glyphicons_095_vector_path_circle.png -------------------------------------------------------------------------------- /wwwroot/public/img/glyphicons_096_vector_path_polygon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/glyphicons_096_vector_path_polygon.png -------------------------------------------------------------------------------- /wwwroot/public/img/glyphicons_097_vector_path_line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/glyphicons_097_vector_path_line.png -------------------------------------------------------------------------------- /wwwroot/public/img/glyphicons_242_google_maps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/glyphicons_242_google_maps.png -------------------------------------------------------------------------------- /wwwroot/public/img/iawards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/iawards.png -------------------------------------------------------------------------------- /wwwroot/public/img/nm-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/nm-logo.png -------------------------------------------------------------------------------- /wwwroot/public/img/now-viewing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/now-viewing.png -------------------------------------------------------------------------------- /wwwroot/public/img/pmc-stacked.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/pmc-stacked.jpg -------------------------------------------------------------------------------- /wwwroot/public/img/search-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/public/img/search-tab.png -------------------------------------------------------------------------------- /wwwroot/status.php: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /wwwroot/test/3d/geelong/license.txt: -------------------------------------------------------------------------------- 1 | geelong_mini_demo_bin_linux_v1.0-draft_x64.gltf was created using a dataset obtained from the City of Greater Geelong (gis@geelongcity.vic.gov.au). The original dataset is licensed under the following Creative Commons license: 2 | http://creativecommons.org/licenses/by/3.0/au/ 3 | 4 | -------------------------------------------------------------------------------- /wwwroot/test/3d/geelong/readme.txt: -------------------------------------------------------------------------------- 1 | geelong_mini_demo_bin_linux_v1.0-draft_x64.gltf was created using data made available from the City of Greater Geelong (gis@geelongcity.vic.gov.au) under a Creative Commons license. The data used to create this demo was originally obtained via email in .skp format (> 100MB so not suitable for inclusion in this repo), however there is also a lower quality dataset of the same region available on data.gov.au in .kml/.dae format (this dataset does not seem to contain building textures). 2 | 3 | This demo is a trivial example to show Caesium's 3D capability with a simple available Australian dataset. The structure of the data and the nature of the demo does not really lend its self to more substantial extension for larger datasets (it is not expected that this method will scale and it doesn't leverage the 3D tiles capability which is designed for this scaleability - it is purely to demo some 3D capability to explore future potential). 4 | 5 | The blocks used were extracted from the larger model using a traditional modelling tool into Collada (.dae) format. The gltf model was created from the Collada (.dae) model using the latest binary collada2gltf tool from Khronos (the standardising body of both the Collada and gltf formats): 6 | https://github.com/KhronosGroup/glTF/releases 7 | collada2gltf_linux_v1.0-draft_x64.tar.gz 8 | 9 | The command line used to convert the model from .dae to .gltf was: 10 | $ ./collada2gltf -i -e -f geelong_mini_demo_bin_linux_v1.0-draft_x64.dae 11 | 12 | 13 | The height of the buildings in the original model did not seem to correlate with the heights used for either the terrain or smooth surfaces, so the heights were set manually (by eye) in the CZML files so that the height looks approximately correct. The height is not perfect for either of these configurations since: 14 | Terrain) The original data has a custom terrain surface defined (this was removed from the model deliberately when it was converted). The terrain surface from the tileset does not match with the terrain surface that was present in the original geelong model. This means that in some places the building models penetrate the terrain surface we are using and in some places the building models float above the surface. The Caesium viewer does not clip the model where the buildings intersect with the terrain model and so this makes the geometry look even funnier where the model extends below the surface of the terrain drawn. The height set seems to be a height that on average makes the model seem most sane (in some places it looks correct, in some places it seems to be floating, in some places it renders bizarrely because it is below the surface). 15 | Smooth) Since the model has terrain data, the base height of the building is not uniform over the whole model and as a result the buildings start higher the further the model ground height becomes from the estimated smooth ground height. For this model the height is set at almost the models minimum height and is approximately zero on the corner of Police Lane and Little Malop Street. From here the remainder of the model appears to float as the elevation rises. This was done as it is more sane to look at the model floating then when any of the model is below the grounds surface (as it is clear to most viewers what is going on when the model is floating, however when the building height is below the grounds surface it is less intuitive because the model is not clipped to the ground and so the projection seems somewhat more strange). 16 | It is not obvious how we could trivially make the dataset more seamlessly integrate with the globe surfaces. However two more complex options could be to extract the terrain from the 3D model and use this in the terrain tileset, or alternatively use the terrain currently used and intersect this with the models (gap filling where needed where the terrain height from the tileset is lower then the terrain height from the model). Alternatively for the smooth model the average of the terrain for the building in the model could be subtracted from the height of the building so that they fit more correctly to the surface. 17 | 18 | The location of the origin of the dataset given was: Long 144.3568, Lat -38.1468. The accuracy was improved manually, by tweaking the model location with respect to the map imagery. 19 | 20 | There are clearly a few polygons missing from the clock-tower on the corner of Ryrie and Gheringhap streets. It seems that this defect is present in the original model (visible in the modelling tool), and it looks like the polygons here have the wrong orientation (they are facing the wrong way). It is unknown why these polygons have the incorrect orientation and whether this a fault in modelling tool, or the original model, but it is important to note that it seems that this fault is not further down the chain. If you process without the -i option (which reverses the faces) you can examine all of the polygons with this problem. 21 | 22 | This workflow does not work correctly with more complex/larger areas of data. While exploring I also tired a larger region however the model produced was not able to be loaded through Caesium. I did not investigate further to examine whether the fault here was caused by the size of the model being used, specific model attributes which were not present in this smaller data set (a subset of the data in the larger dataset) and whether the fault came from the conversion tools or the rendering pipeline. 23 | 24 | -------------------------------------------------------------------------------- /wwwroot/test/3d/geelong/smooth.czml: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id":"document", 4 | "version":"1.0" 5 | }, 6 | { 7 | "id":"GeelongBuildingsApproxSmoothHeight", 8 | "position":{ 9 | "cartographicDegrees":[ 10 | 144.35690, -38.14688, -16 11 | ] 12 | }, 13 | "model":{ 14 | "gltf":{ 15 | "uri":"./geelong_mini_demo_bin_linux_v1.0-draft_x64.gltf" 16 | }, 17 | "scale":{ 18 | "number":[ 19 | 1.0 20 | ] 21 | }, 22 | "show":{ 23 | "boolean":true 24 | } 25 | } 26 | } 27 | ] 28 | 29 | -------------------------------------------------------------------------------- /wwwroot/test/3d/geelong/terrain.czml: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id":"document", 4 | "version":"1.0" 5 | }, 6 | { 7 | "id":"GeelongBuildingsApproxTerrainHeight", 8 | "position":{ 9 | "cartographicDegrees":[ 10 | 144.35690, -38.14688, 8.5 11 | ] 12 | }, 13 | "model":{ 14 | "gltf":{ 15 | "uri":"./geelong_mini_demo_bin_linux_v1.0-draft_x64.gltf" 16 | }, 17 | "scale":{ 18 | "number":[ 19 | 1.0 20 | ] 21 | }, 22 | "show":{ 23 | "boolean":true 24 | } 25 | } 26 | } 27 | ] 28 | 29 | -------------------------------------------------------------------------------- /wwwroot/test/airports.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/test/airports.zip -------------------------------------------------------------------------------- /wwwroot/test/bigInfobox.czml: -------------------------------------------------------------------------------- 1 | 2 | [ 3 | { 4 | "id" : "document", 5 | "version" : "1.0" 6 | }, 7 | { 8 | "id":"Vehicle", 9 | "billboard":{ 10 | "eyeOffset":{ 11 | "cartesian":[ 12 | 0.0,0.0,0.0 13 | ] 14 | }, 15 | "horizontalOrigin":"CENTER", 16 | "image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEISURBVEhLvVXBDYQwDOuojHKj8LhBbpTbpBCEkZsmIVTXq1RVQGrHiWlLmTTqPiZBlyLgy/KSZQ5JSHDQ/mCYCsC8106kDU0AdwRnvYZArWRcAl0dcYJq1hWCb3hBrumbDAVMwAC82WoRvgMnVMDBnB0nYZFTbE6BBvdUGqVqCbjBIk3PyFFR/NU7EKzru+qZsau3ryPwwCRLKYOzutZuCL6fUmWeJGzNzL/RxAMrUmASSCkkAayk2IxPlwhAAYGpsiHQjbLccfdOY5gKkCXAMi7SscAwbQpAnKyctWyUZ6z8ja3OGMepwD8asz+9FnSvbhU8uVOHFIwQsI3/p0CfhuqCSQuxLqsN6mu8SS+N42MAAAAASUVORK5CYII=", 17 | "pixelOffset":{ 18 | "cartesian2":[ 19 | 0.0,0.0 20 | ] 21 | }, 22 | "scale":0.8333333333333334, 23 | "show":[ 24 | { 25 | "boolean":true 26 | } 27 | ], 28 | "verticalOrigin":"BOTTOM" 29 | }, 30 | "label":{ 31 | "fillColor":[ 32 | { 33 | "rgba":[ 34 | 255,255,0,255 35 | ] 36 | } 37 | ], 38 | "font":"bold 10pt Segoe UI Semibold", 39 | "horizontalOrigin":"LEFT", 40 | "outlineColor":{ 41 | "rgba":[ 42 | 0,0,0,255 43 | ] 44 | }, 45 | "pixelOffset":{ 46 | "cartesian2":[ 47 | 10.0,0.0 48 | ] 49 | }, 50 | "scale":1.0, 51 | "show":[ 52 | { 53 | "boolean":true 54 | } 55 | ], 56 | "style":"FILL", 57 | "text":"Vehicle", 58 | "verticalOrigin":"CENTER" 59 | }, 60 | "path":{ 61 | "color":[ 62 | { 63 | "rgba":[ 64 | 255,255,0,255 65 | ] 66 | } 67 | ], 68 | "outlineWidth":0.0, 69 | "width":[ 70 | { 71 | "number":5.0 72 | } 73 | ], 74 | "show":[ 75 | { 76 | "boolean":true 77 | } 78 | ] 79 | }, 80 | "description": "
This is really long text This is really long text This is really long text This is really long text This is really long text This is really long textThis is really long text

This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
This is really long text
", 81 | "position":{ 82 | "cartographicDegrees":[150,-35,0] 83 | } 84 | } 85 | ] 86 | -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/cd.csv: -------------------------------------------------------------------------------- 1 | cd_code_2006,SLA Name 2 | 4010202,Unincorp. Far North 3 | 4010203,Unincorp. Far North 4 | 3090102,Diamantina 5 | 7030201,Petermann-Simpson 6 | 7031301,Sandover 7 | 3021304,Boulia -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/ced_code_2011.csv: -------------------------------------------------------------------------------- 1 | ced_code_2011,Name 2 | 236,Wannon 3 | 204,Bendigo 4 | 234,Murray 5 | 221,Indi 6 | 202,Ballarat 7 | 227,Mallee 8 | 229,Mcewen 9 | 215,Gippsland 10 | 230,Mcmillan 11 | 209,Corangamite -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/ced_code_2013.csv: -------------------------------------------------------------------------------- 1 | ced_code_2013,Name 2 | 236,Wannon 3 | 204,Bendigo 4 | 234,Murray 5 | 221,Indi 6 | 202,Ballarat 7 | 227,Mallee 8 | 229,Mcewen 9 | 215,Gippsland 10 | 230,Mcmillan 11 | 209,Corangamite -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/gccsa.csv: -------------------------------------------------------------------------------- 1 | GCCSA_code_2011,Urban 2 | 2GMEL,Yes 3 | 2RVIC,No 4 | 1RNSW,No 5 | 8ACTE,Yes 6 | 1GSYD,Yes 7 | 3GBRI,Yes 8 | 3RQLD,No 9 | 4RSAU,No 10 | 4GADE,Yes 11 | 7RNTE,No 12 | 7GDAR,Yes 13 | 5RWAU,No 14 | 5GPER,Yes 15 | 6RTAS,No 16 | 6GHOB,Yes -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/iare.csv: -------------------------------------------------------------------------------- 1 | IARE_code,Number 2 | 702004,1 3 | 402003,4 4 | 702001,3 5 | 503004,6 6 | 702014,5 7 | 702013,3 8 | 402001,2 9 | 702008,4 -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/iloc.csv: -------------------------------------------------------------------------------- 1 | ILOC_code_2011, 2 | 30600201,4 3 | 30601201,2 4 | 30601001,1 5 | 30600801,3 6 | 30600101,4 7 | 10300606,5 8 | 10300202,6 9 | 10300102,2 10 | 10200802,3 -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/ireg.csv: -------------------------------------------------------------------------------- 1 | IREG_code,number 2 | 501,1 3 | 502,2 4 | 503,3 5 | 504,4 6 | 505,5 7 | 506,6 8 | 507,7 9 | 508,8 10 | 301,1 11 | 302,2 12 | 303,3 13 | 401,1 14 | 402,2 15 | 403,3 -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/lga_code_2011.csv: -------------------------------------------------------------------------------- 1 | lga_code_2011,name 2 | 36710,Sunshine Coast 3 | 53520,Geraldton-Greenough 4 | 56020,Mullewa -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/lga_code_2013.csv: -------------------------------------------------------------------------------- 1 | lga_code_2013,name 2 | 36710,Sunshine Coast 3 | 53800,Greater Geraldton -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/lga_code_2015.csv: -------------------------------------------------------------------------------- 1 | lga_code_2015,Name 2 | 36720,Sunshine Coast 3 | 53800,Greater Geraldton 4 | 35740,Noosa 5 | -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/phn.csv: -------------------------------------------------------------------------------- 1 | phn_code,number 2 | PHN106,6 3 | PHN105,5 4 | PHN104,4 5 | PHN103,3 6 | PHN102,2 7 | PHN101,1 8 | PHN107,7 9 | PHN108,8 10 | PHN109,9 11 | PHN110,10 12 | PHN201,1 13 | PHN202,2 14 | PHN203,3 15 | PHN204,4 16 | PHN205,5 17 | PHN301,1 18 | PHN302,2 19 | PHN303,3 20 | PHN304,4 21 | -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/ra.csv: -------------------------------------------------------------------------------- 1 | ra_code_2011,2nd_digit 2 | 10,0 3 | 11,1 4 | 12,2 5 | 13,3 6 | 14,4 7 | 20,0 8 | 21,1 9 | 22,2 10 | 23,3 11 | 30,0 12 | 31,1 13 | 32,2 14 | 33,3 15 | 34,4 16 | 40,0 17 | 41,1 18 | 42,2 19 | 43,3 20 | 44,4 21 | 50,0 22 | 51,2 23 | 52,2 24 | 53,3 25 | 54,4 26 | 61,2 27 | 62,2 28 | 63,3 29 | 64,4 30 | 72,2 31 | 73,3 32 | 74,4 33 | 80,0 34 | 81,1 -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/sla.csv: -------------------------------------------------------------------------------- 1 | sla_code_2006,Name 2 | 135151750,Cobar 3 | 135100950,Bogan 4 | 140154600,Lachlan 5 | 160101700,Central Darling 6 | 135151150,Bourke 7 | 135151200,Brewarrina 8 | 160108809,Unincorp. Far West -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/sos.csv: -------------------------------------------------------------------------------- 1 | SOS_code_2011,Type 2 | 10,0 3 | 11,1 4 | 12,2 5 | 13,3 6 | 20,0 7 | 21,1 8 | 22,2 9 | 23,3 10 | 30,0 11 | 31,1 12 | 32,2 13 | 33,3 14 | 40,0 15 | 41,1 16 | 42,2 17 | 43,3 -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/sosr.csv: -------------------------------------------------------------------------------- 1 | SOSR_code_2011,color 2 | 603,2 3 | 611,1 4 | 614,3 5 | 621,4 6 | 622,5 7 | 631,10 8 | -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/sua.csv: -------------------------------------------------------------------------------- 1 | SUA_code_2011,Color 2 | 2022,1 3 | 2005,2 4 | 2003,3 5 | 2004,4 6 | 2007,1 7 | 2017,2 8 | 2020,3 9 | 2002,4 10 | 2016,1 11 | 2019,2 12 | 2014,3 13 | 2021,4 -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/sua_name.csv: -------------------------------------------------------------------------------- 1 | SUA_name_2011,Color 2 | Warragul - Drouin,2 3 | Moe-Newborough,3 4 | Melbourne,4 5 | Traralgon Morwell,1 6 | Sale,2 7 | Bairnsdale,3 -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/tr_code_2013.csv: -------------------------------------------------------------------------------- 1 | tr_code_2013,Name 2 | 4R010,Limestone Coast 3 | 4R020,Murraylands 4 | 4R060,Riverland 5 | 2R030,Mallee 6 | 2R050,Western Grampians 7 | 2R020,Wimmera 8 | 2R100,High Country 9 | 2R200,Murray East 10 | 1R070,The Murray 11 | 3R030,Sunshine Coast 12 | 3R040,Fraser Coast 13 | 3R060,Darling Downs 14 | 6R060,North West 15 | 6R100,Hobart and the South 16 | 6R080,Wilderness West -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/tr_code_2015.csv: -------------------------------------------------------------------------------- 1 | tr_code_2015,Name 2 | 4R010,Limestone Coast 3 | 4R020,Murraylands 4 | 4R060,Riverland 5 | 2R030,Mallee 6 | 2R050,Western Grampians 7 | 2R020,Wimmera 8 | 2R100,High Country 9 | 2R200,Murray East 10 | 1R070,The Murray 11 | 3R030,Sunshine Coast 12 | 3R040,Fraser Coast 13 | 3R060,Darling Downs 14 | 6R060,North West 15 | 6R100,Hobart and the South 16 | 6R080,Wilderness West -------------------------------------------------------------------------------- /wwwroot/test/csv-geo-au/ucl.csv: -------------------------------------------------------------------------------- 1 | ucl_code_2011,number 2 | 301001,10 3 | 321065,5 4 | 315080,4 5 | 313003,5 6 | 315054,4 7 | 303002,7 8 | 122072,5 9 | 131777,0 10 | 331777,0 11 | 302001,8 -------------------------------------------------------------------------------- /wwwroot/test/images/place32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/test/images/place32.png -------------------------------------------------------------------------------- /wwwroot/test/images/pow32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/test/images/pow32.png -------------------------------------------------------------------------------- /wwwroot/test/simple.czml: -------------------------------------------------------------------------------- 1 | 2 | [ 3 | { 4 | "id" : "document", 5 | "version" : "1.0" 6 | }, 7 | { 8 | "id":"Vehicle", 9 | "billboard":{ 10 | "eyeOffset":{ 11 | "cartesian":[ 12 | 0.0,0.0,0.0 13 | ] 14 | }, 15 | "horizontalOrigin":"CENTER", 16 | "image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEISURBVEhLvVXBDYQwDOuojHKj8LhBbpTbpBCEkZsmIVTXq1RVQGrHiWlLmTTqPiZBlyLgy/KSZQ5JSHDQ/mCYCsC8106kDU0AdwRnvYZArWRcAl0dcYJq1hWCb3hBrumbDAVMwAC82WoRvgMnVMDBnB0nYZFTbE6BBvdUGqVqCbjBIk3PyFFR/NU7EKzru+qZsau3ryPwwCRLKYOzutZuCL6fUmWeJGzNzL/RxAMrUmASSCkkAayk2IxPlwhAAYGpsiHQjbLccfdOY5gKkCXAMi7SscAwbQpAnKyctWyUZ6z8ja3OGMepwD8asz+9FnSvbhU8uVOHFIwQsI3/p0CfhuqCSQuxLqsN6mu8SS+N42MAAAAASUVORK5CYII=", 17 | "pixelOffset":{ 18 | "cartesian2":[ 19 | 0.0,0.0 20 | ] 21 | }, 22 | "scale":0.8333333333333334, 23 | "show":[ 24 | { 25 | "boolean":true 26 | } 27 | ], 28 | "verticalOrigin":"BOTTOM" 29 | }, 30 | "label":{ 31 | "fillColor":[ 32 | { 33 | "rgba":[ 34 | 255,255,0,255 35 | ] 36 | } 37 | ], 38 | "font":"bold 10pt Segoe UI Semibold", 39 | "horizontalOrigin":"LEFT", 40 | "outlineColor":{ 41 | "rgba":[ 42 | 0,0,0,255 43 | ] 44 | }, 45 | "pixelOffset":{ 46 | "cartesian2":[ 47 | 10.0,0.0 48 | ] 49 | }, 50 | "scale":1.0, 51 | "show":[ 52 | { 53 | "boolean":true 54 | } 55 | ], 56 | "style":"FILL", 57 | "text":"Vehicle", 58 | "verticalOrigin":"CENTER" 59 | }, 60 | "path":{ 61 | "color":[ 62 | { 63 | "rgba":[ 64 | 255,255,0,255 65 | ] 66 | } 67 | ], 68 | "outlineWidth":0.0, 69 | "width":[ 70 | { 71 | "number":5.0 72 | } 73 | ], 74 | "show":[ 75 | { 76 | "boolean":true 77 | } 78 | ] 79 | }, 80 | "position":{ 81 | "cartographicDegrees":[150,-35,0] 82 | } 83 | } 84 | ] 85 | -------------------------------------------------------------------------------- /wwwroot/test/simple.kml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | my office 6 | 7 | 151.0 8 | -35.0 9 | 50000000 10 | 11 | 12 | 150.0,-35.0,500 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /wwwroot/test/states_stem_2013.csv: -------------------------------------------------------------------------------- 1 | state,IT (2013),Eng (2013),Science (2013),Total (2013),Mask 2 | 1,9161,19941,27861,56963,0 3 | 5,2057,7012,12953,22022,0 4 | 3,5424,16089,14935,36448,0 5 | 2,7765,15914,23798,47477,1 6 | 6,395,1083,1627,3105,1 7 | 8,1053,798,3273,5124,1 8 | 7,130,418,445,993,1 9 | 4,1474,4860,5672,12006,1 10 | -------------------------------------------------------------------------------- /wwwroot/test/vic_police.kmz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TerriaJS/TerriaMap/a534689c2157780ee3a3bd5e2827d1b46b86cde2/wwwroot/test/vic_police.kmz --------------------------------------------------------------------------------