{"id":15722328,"url":"https://github.com/stackotter/uq-maps-reborn","last_synced_at":"2025-05-05T21:21:03.527Z","repository":{"id":253378370,"uuid":"843322030","full_name":"stackotter/uq-maps-reborn","owner":"stackotter","description":"A new and improved (unofficial) version of UQ Maps with 360 degree imagery and superior walking/accessible navigation instructions.","archived":false,"fork":false,"pushed_at":"2024-08-20T03:22:43.000Z","size":9869,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T23:43:41.453Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stackotter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-16T09:02:26.000Z","updated_at":"2025-01-22T15:22:07.000Z","dependencies_parsed_at":"2024-08-19T15:12:11.604Z","dependency_job_id":"5d697860-1404-4ea7-a9d0-16dfd9a458f5","html_url":"https://github.com/stackotter/uq-maps-reborn","commit_stats":{"total_commits":79,"total_committers":2,"mean_commits":39.5,"dds":"0.20253164556962022","last_synced_commit":"d96393bc1eef41bac97877427b46615367ed8abb"},"previous_names":["stackotter/uq-maps-reborn"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackotter%2Fuq-maps-reborn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackotter%2Fuq-maps-reborn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackotter%2Fuq-maps-reborn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stackotter%2Fuq-maps-reborn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stackotter","download_url":"https://codeload.github.com/stackotter/uq-maps-reborn/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252577110,"owners_count":21770733,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-03T22:06:46.425Z","updated_at":"2025-05-05T21:21:03.504Z","avatar_url":"https://github.com/stackotter.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"## UQ Maps Reborn\n\nA new and improved (unofficial) version of UQ Maps, made during the 43.5 hour 2024 UQCS Hackathon by a team of two;\nmyself and @emileclarkb. Supports both iOS and Android (and kind of macOS).\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"images/screenshots/home.webp\" alt=\"The app's home screen\" width=\"20%\"/\u003e\n  \u0026nbsp;\n  \u003cimg src=\"images/screenshots/search.webp\" alt=\"The app's search feature\" width=\"20%\"/\u003e\n  \u0026nbsp;\n  \u003cimg src=\"images/screenshots/directions.webp\" alt=\"The app's navigation UI with 360 degree imagery\" width=\"20%\"/\u003e\n  \u0026nbsp;\n  \u003cimg src=\"images/screenshots/navigation.webp\" alt=\"The app's route selection view\" width=\"20%\"/\u003e\n\u003c/div\u003e\n\n### Features\n\n- **Easy to follow walking directions** accompanied by 360 degree imagery at each turn\n  so that you can easily figure out exactly where you need to go\n- **Accessible navigation** avoiding stairs\n- **Offline navigation** (no 360 degree imagery)\n- **Much better search** than UQ Maps\n- **A native and fluid** mobile UI\n- Coverage of floors 2 and 3 of the Advanced Engineering Building\n\n### `/app`\n\nThe mobile app for UQ Maps Reborn. Also kind of works on macOS and web.\n\n#### Running on iOS\n\nWith this method, `expo` will run a bundler on your laptop and the app will\nonly work while the bundler is still running.\n\n```sh\nnpx expo run:ios --device\n```\n\n#### Installing on iOS\n\n1. Open `app/ios/uqmapsreborn.xcworkspace`\n2. Select `Product \u003e Archive` from the menu\n3. Select the built archive and click `Distribute App \u003e Development \u003e Distribute`\n4. Select `Window \u003e Devices and Simulators`\n5. Drag the `ipa` file from inside the archive you exported in step 3 onto your device in the device manager\n\n#### Running/installing on macOS\n\n`expo` doesn't seem to support running directly on macOS via the bundler, but you can still\ninstall the app on macOS as long as you have an Apple Silicon Mac. Simply follow the steps for\n`Installing on iOS` and instead of dragging the `ipa` onto your iOS device, just double click\nthe `ipa` to install the app to your `/Applications` directory.\n\nKeep in mind that the UI was designed for mobile so it doesn't really make much sense on macOS. Also,\nthe 360 panorama imagery doesn't load on macOS at the moment because it's served from an `http` web server\n(not `https`) and macOS blocks `http` requests by default it seems.\n\n#### Running on Android\n\nWith this method, `expo` will run a bundler on your laptop and the app will\nonly work while the bundler is still running.\n\n```sh\nnpx expo run:android --device\n```\n\n#### Installing on Android\n\nTo produce an `apk`, run the following commands.\n\n```sh\ncd app\nnpx react-native build-android --mode=release\ncd android\n./gradlew app:assembleRelease\n```\n\nThe final `apk` file can be found in `app/android/app/build/outputs/apk/release`. Install this on your Android device as you would any other `apk` file.\n\n#### Running on the web\n\nAlthough the app can run on the web, I simply disabled any features that weren't working, so there is quite a bit missing. Also, the UI was designed for a small iPhone 7 screen, so it doesn't make any sense at all on desktop.\n\n```sh\nnpx expo start --web\n```\n\n### `/backend`\n\nThe backend server's sole job is to serve the 360 degree imagery.\n\nThe 360 degree images are expected to be stored at `./panos` (in `backend`) and must follow\nthe naming convention of `\u003cid\u003e.jpg`.\n\n#### Endpoints\n\n- `/pano/\u003cid\u003e`: Serves the raw 360 degree image in equirectangular form\n- `/view/pano/\u003cid\u003e`: Displays the 360 degree image in an online 360 degree image viewer\n  (`Pannellum`). This is used by the app (in a webview) to display the 360 degree imagery\n  because I couldn't find any easy way to display 360 degree imagery in React Native during\n  the hackathon.\n\n### `/scraping`\n\nThis directory contains a bunch of scripts and a ton of data scraped from the UQ Maps website.\nWe only ended up using a small fraction of the scraped data but some of it could be useful in\nthe future.\n\n### `/mapping`\n\nThis directory contains a bunch of scripts that allow efficient collection of navigation nodes\nand construction of navigation graphs.\n\n#### `latlongs.json`\n\nThis file contains the data collected for each navigation node during the hackathon.\n\n#### `location_grabber.py`\n\nThis script is what we used while collecting the imagery. It assumes that you enter nodes as you\ntake the 360 degree images so that the images and nodes are in the same order and can easily be\nassociated.\n\nThe script opens the UQ maps website in a browser and injects a small red cursor to the center\nof the webpage. This marks that position that the latitude and longitude in the page's URL\ncorrespond to. Once you enter information such as node type, floor, room, building, and connections\nto other nodes, the script extracts the latitude and longitude from the URL of the page and stores\nit along with the data you entered. This allows you to pinpoint the exact location of each image\ninstead of relying on e.g. a phone's GPS, which wouldn't work at all, especially indoors (the navigation\ngraph has to be as accurate as possible, both for sensible routefinding and sensible relative direction\nsuch as \"Turn left\" or \"Walk 15m\").\n\nWhen entering connections to other nodes, the format is a comma separated list of node\nids which can each optionally have an edge type associated with them (e.g. `stairs` or `elevator`).\nAn example of valid input is `2, 5 stairs, 3 elevator, 4`. During data collection these connections\nshould only be registered on one of the two nodes involved (which is the only possible way anyway unless\nyou plan ahead and predict the node ids of future nodes you'll collect; which you shouldn't do).\n\n#### `plot_nodes.py`\n\nThis script is intended to be used in conjunction with `location_grabber.py` and simply displays\nall nodes collected so far in a separate browser window so that you can find out the node ids\nof the nodes that you want to create connections to. View the node id of a marked node by\nclicking on its marker.\n\n#### `node_fixer.py`\n\nDuring collection of a navigation graph with `location_grabber.py`, it's easy to make a few mistakes.\nThis script runs through all of the nodes and allows you to delete/edit nodes and their positions. It\nwas only designed to fix the mistakes that I made during the hackathon so it'll probably need editing\nin the future if it ever gets used again.\n\n#### `plot_map.py`\n\nThis script is quite similar to `plot_nodes.py` except that it doesn't update the map live and\nit plots both nodes and edges. The script outputs the map to `map.html`.\n\n#### `map.html`\n\nThe output of `plot_map.py`.\n\n#### `preprocess_map.py`\n\nConverts `latlongs.json` into the format that the mobile app uses. This essentially transforms the\nlist of nodes and connections into a doubly linked graph (each node has the ids of its edges and each\nedge has the ides of its two nodes). This also gets the list of building from `/scraping` and transforms\nit into a nicer format.\n\n#### `map.json`\n\nThe output of `preprocess_map.py`; this is the form of the navigation graph that actually\ngets used in the mobile app.\n\n#### `process_images.py`\n\nCovers up the tripod, blurs faces, and renames a bunch of 360 images (assuming that alphabetical order\ncorresponds to the chronological order in which the images were taken).\n\nThe input images are assumed to be at `../../imagery/panos` relative to the script and the output\nimages get saved to `../../imagery/processed_panos`.\n\nAll 360 images get run through this script before getting uploaded to the backend server.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackotter%2Fuq-maps-reborn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstackotter%2Fuq-maps-reborn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstackotter%2Fuq-maps-reborn/lists"}