Allows the public to easily report and track the geolocation of anyone or anything they spot outside, using a mobile app or web frontend.

Overview

LIVE DEMO: https://armytracker.com/ (tracking the invading Russian army in Ukraine)

Attention:

- If you'd like to help the project either as a programmer or by spreading the word, 
- check the challenges below and contact me at certicky (at) gmail (dot) com.

Current challenges for the community:
- Getting the armytracker.com to the end users in Ukraine. Let people know it exists and that they can use it to track the invaders.
- Writing scripts & bots to get more data. People's reports aren't the only possible source - example ideas:
  -- parsing Twitter API for tweets about RU soldiers and using their geolocation? or other social networks?
  -- getting the location of soldiers from Tinder API?
  -- getting access to some satellite or aerial imagery APIs and looking for locations there?
  -- getting the locations or RU SIM cards and checking for higher than usual concentration?
  -- connecting any data sources provided by UKR government?
- Improving the web frontend - it's a very early prototype now.
- Filtering of submitted reports on the backend (client IP's country of origin, checking blacklists, etc.).

Crowdsourced GeoTracker

Crowdsourced GeoTracker is an open-source project that allows the public to easily report and track the geolocation of anyone or anything they spot outside.

The project can be configured to track all kinds of things - here are a few examples:

  • Civilians can report on the movements of an inviding army when they see them, so others are able to prepare (evacuate or get ready to defend).
  • Citizens can report damaged public equipement to local authorities / municipalities, so they can quickly make repairs.
  • Drivers can report traffic accidents or delays.
  • Tracking the occurences of wild animals; Bird watching.
  • ...

5

Backend (Node.JS + Express + Postgres)

Installation

  1. Install Node.JS and npm (on Ubuntu/Debian run sudo apt install nodejs npm)
  2. Clone this repository: git clone https://github.com/certicky/crowdsourced-geotracker.git
  3. Navigate to folder backend: cd crowdsourced-geotracker/backend
  4. Install the dependencies: npm install
  5. Install Postgres and Postgis extension (depending on your OS)
  6. Create a DB user, database and tables using the following commands (don't forget to replace <YOUR DB PASSWORD> with the actual password):
CREATE USER geotracker_user WITH PASSWORD '<YOUR DB PASSWORD>';
CREATE DATABASE geotracker_db OWNER geotracker_user;
CREATE EXTENSION postgis;
CREATE TABLE public.reports
(
    id SERIAL,
    location geography(Point,4326),
    type character varying(32) COLLATE pg_catalog."default",
    valid_from timestamptz NOT NULL DEFAULT now(),
    valid_until timestamptz NOT NULL DEFAULT now() + interval '1 hour',
    description varchar(256),
    media_url varchar(256),
    ip varchar(64)
);
ALTER TABLE public.reports OWNER to geotracker_user;
CREATE INDEX report_location_idx ON reports USING GIST(location);
CREATE INDEX valid_from_idx ON reports USING btree(valid_from DESC);
CREATE INDEX valid_until_idx ON reports USING btree(valid_until DESC);
CREATE UNIQUE INDEX duplicates_constraint ON reports (type, valid_from, valid_until, ST_SnapToGrid(location::geometry, 0.00001)); -- this index prevents having multiple reports with very similar location and same type & validity
  1. Copy the settings.js.example file to settings.js and update the values in it.
  2. You can insert some reports from external data sources from by calling some of the scripts in /backend/data_import_scripts/. These scripts can be called periodically using cron if you want to always have fresh external data in the DB. The DB indexes prevent adding duplicate entries when the scripts are called repeatedly.
  3. Run the backend: npm run listen or simply node index.js.
  4. The backend also serves the web frontend, so you can just open http://localhost:3000/ in a browser to see the map (assuming that you use port 3000 in your settings.js).

API

  • [GET] /metadata
Returns all the meta data / settings that might be required by frontends.
Example: http://localhost:3000/metadata
  • [GET] /reports
Returns all the reports from the specified bounding box.
Example: http://localhost:3000/reports?latmin=46.278977050642126&lonmin=25.19668223803358&latmax=51.515386508021386&lonmax=41.30651925297246&time=1646226061
GET parameters:
  - latmin, lonmin, latmax, lonmax: Latitude-Longitude definition of the bounding box from which we're getting the reports. Accepts float numbers. (required)
  - time: Point in time that we're looking at in UNIX timestamp format = number of seconds that have elapsed since January 1, 1970 midnight (required)
  • [POST] /reports
Adds a new report to DB.
Example: http://localhost:3000/reports with BODY: lat = 49.71422916693619, lon = 26.66829512680357, type = AIRCRAFT, validfrom: 1646312461, validuntil: 1646316061
POST parameters:
  - lat, lon: Latitude and Longitude of the sighting. Accepts float numbers. (required)
  - type: The type of the reported sighting, for example VEHICLES or AIRCRAFT. Accepts values enumerated in supportedTypes in settings.js. (required)
  - validfrom, validuntil: Start and end of the time period when the report is valid in second-UNIX timestamp format. (optional, by default the 1-hour period starting when the request is processed)
  - description: Short textual description fo the sighting. (optional)
  - mediafile: Image file (jpeg, png or webp) can be attaced to the report here. It will be stored on backend as a static file. (optional)
  - mediaurl: Url to an external image or a Tweet that's displayed next to the report. (optional)

Web Frontend (basic HTML with a bit of JS)

Installation

  • Clone this repository: git clone https://github.com/certicky/crowdsourced-geotracker.git
  • Navigate to folder frontend-web: cd crowdsourced-geotracker/frontend-web
  • Copy the settings.js.example file to settings.js and update the values in it. You need to point it to your running backend and provide your Google Maps API key.
  • Then just open index.html in your web browser.
  • Alternatively, if you have the backend running locally, you can access it at http://localhost:3000/ (assuming you're using port 3000 in your backend's settings.js).

Functions:

  • The web displays a map of recent reports in the area. The default area displayed is set according to browser's location.
  • Users can report sightings via this web frontend by clicking anywhere on the map. Photos can be added to reports.
  • It's be possible to rewind the time back using a slider to see how the report locations changed over time.
You might also like...

Candy Shop is a JavaScript library that allows DAOs, NFT projects and anyone to create an NFT marketplace on Solana in minutes!

Candy Shop is a JavaScript library that allows DAOs, NFT projects and anyone to create an NFT marketplace on Solana in minutes!

Candy Shop (IN BETA) Intro Candy Shop is a JavaScript library that allows DAOs, NFT projects and anyone to create an NFT marketplace on Solana in minu

Dec 15, 2022

To-do list" is an app that helps to organize your day. the user simply lists the things that needs to done and the app allows the to mark them as complete when they are done. Made with webpack, JavaScript ES6 , HTML 5 and CSS 3.

Todo-list project This is a Microverse project that entails a to-do-list. Built With HTML CSS Javascript Webpack VS code Live Demo (if available) Live

Aug 3, 2022

Code Scanning/SAST/Static Analysis/Linting using many tools/Scanners with One Report - Scanmycode Community Edition (CE)

Code Scanning/SAST/Static Analysis/Linting using many tools/Scanners with One Report - Scanmycode Community Edition (CE)

Star it If you like it, please give it a GitHub star/fork/contribute. This will ensure continous development ⭐ TLDR; To install it. Install docker and

Dec 29, 2022

📈 AI powered web scraper that let's you scrape anything you want from the web including google search results

AI powered web scraper that let's you scrape anything you want from the web including google web search results from your terminal. And at the same ti

Dec 27, 2022

This project entails a To-do-List whereby a user can input the tasks they want to do, check the tasks done and also clear all tasks when all of them are completed. It is efficient for a user who want to manage their time and keep track of their day.

This project entails a To-do-List whereby a user can input the tasks they want to do, check the tasks done and also clear all tasks when all of them are completed. It is efficient for a user who want to manage their time and keep track of their day.

Screenshot Here is a screenshot for the project. To-Do-List Project This is a Microverse project that entails a to-do-list which one is able to add an

Jun 16, 2022

Evolve is an online investment portfolio management system where users can keep track of all the assets that they have invested in and how well their assets are performing.

Evolve is an online investment portfolio management system where users can keep track of all the assets that they have invested in and how well their assets are performing.

Evolve is an online investment portfolio management system where users can keep track of all the assets that they have invested in and how well their assets are performing.

Oct 16, 2022

The project integrates workflow engine, report engine and organization authority management background, which can be applied to the development of OA, HR, CRM, PM and other systems. With tlv8 IDE, business system development, testing and deployment can be realized quickly.

The project integrates workflow engine, report engine and organization authority management background, which can be applied to the development of OA, HR, CRM, PM and other systems. With tlv8 IDE, business system development, testing and deployment can be realized quickly.

介绍 项目集成了工作流引擎、报表引擎和组织机构权限管理后台,可以应用于OA、HR、CRM、PM等系统开发。配合使用tlv8 ide可以快速实现业务系统开发、测试、部署。 后台采用Spring MVC架构简单方便,前端使用流行的layui界面美观大方。 采用组件开发技术,提高系统的灵活性和可扩展性;采

Dec 27, 2022

Smooth mobile touch slider for Mobile WebApp, HTML5 App, Hybrid App

Smooth mobile touch slider for Mobile WebApp, HTML5 App, Hybrid App

iSlider iSlider is a lightweight, high-performant, no library dependencies cross-platform slide controller. It can help handling most sliding effects,

Nov 25, 2022
Comments
  • [FEAT] Add an option to turn marking aircraft off

    [FEAT] Add an option to turn marking aircraft off

    As it's very difficult for civilians to recognize a side to which an aircraft belong, I think a hosting operator must be able to turn this feature off. Because it can give an enemies some clues. It's better to make it disabled by default.

    I apologize if this is somewhere in a config, and I simply not found it.

    opened by dmytro-shchurov 0
Owner
Michal Certicky
Michal Certicky
A GitHub app to report failed workflow job actions and notify pull request creator with custom report message for the failed workflow job.

Workflow Reporter A GitHub App built with Probot that reports failed workflow job actions and notify the pull request creator with custom report messa

Divyanshu Shekhar 14 Nov 12, 2022
Utility to automatically fill foreign income section of 3-NDFL report based on tax report from Tinkoff broker

Заполнение дохода за пределами РФ в декларации 3-НДФЛ Disclaimer Автор не несет ответственности за корректное заполнение налоговой декларации. Вы запу

Oleg Elifantiev 12 Dec 9, 2022
Simple weather app written in HTML, CSS, and JavaScript using the OpenWeather API for fetching weather and geolocation information

Description Simple weather app written in HTML, CSS, and JavaScript using the OpenWeather API for fetching weather and geolocation information. Acknow

Gleb Korzan 4 Feb 23, 2022
A Mindustry mod that is public for anyone to contribute. Star the mod for access.

Star the mod and I will add you as a contributor. Rules for contributors Only delete or edit content if you have permission, or if you made the conten

null 6 Jul 25, 2022
Inside-out promise; lets you call resolve and reject from outside the Promise constructor function.

Inside-out promise; lets you call resolve and reject from outside the Promise constructor function.

Lily Scott 3 Feb 28, 2022
Lightweight privacy respecting geolocation library with no dependencies.

tzlocator Lightweight privacy respecting geolocation library with no dependencies. Key features ?? No third-party API calls ?? Works without browser p

null 13 Nov 15, 2022
Check your device when you have anything to change on your PC or mobile.

opgg-use-device-detector Check your device when you have anything to change on your PC or mobile. ❤️ it? ⭐️ it on GitHub opgg-use-device-detector basi

ChoGeonHo 11 Aug 6, 2022
This is a full-stack exercise tracker web application built using the MERN (MongoDB, ExpressJS, ReactJS, NodeJS) stack. You can easily track your exercises with this Full-Stack Web Application.

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

WMouton 2 Dec 25, 2021
A superfast and easy to use knowledge base to help your customers get the info they need, when they need it most.

A superfast and easy to use knowledge base to help your customers get the info they need, when they need it most. helpkb is an open-source Next.js (A

Mark Moffat 11 Dec 5, 2022