{"id":20011090,"url":"https://github.com/lukehb/137-stopmove","last_synced_at":"2025-05-04T20:30:56.233Z","repository":{"id":95379042,"uuid":"83859221","full_name":"lukehb/137-stopmove","owner":"lukehb","description":"Algorithms to automatically discover stops and moves in GPS trajectories.","archived":false,"fork":false,"pushed_at":"2018-06-16T01:07:09.000Z","size":78,"stargazers_count":25,"open_issues_count":1,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-08T11:51:39.511Z","etag":null,"topics":["classification","gps","java","move","spatio-temporal","stop","trajectory"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lukehb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2017-03-04T02:31:53.000Z","updated_at":"2025-01-16T21:16:05.000Z","dependencies_parsed_at":"2023-03-06T16:00:33.166Z","dependency_job_id":null,"html_url":"https://github.com/lukehb/137-stopmove","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehb%2F137-stopmove","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehb%2F137-stopmove/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehb%2F137-stopmove/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lukehb%2F137-stopmove/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lukehb","download_url":"https://codeload.github.com/lukehb/137-stopmove/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252395203,"owners_count":21740986,"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":["classification","gps","java","move","spatio-temporal","stop","trajectory"],"created_at":"2024-11-13T07:24:24.340Z","updated_at":"2025-05-04T20:30:56.226Z","avatar_url":"https://github.com/lukehb.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 137-stopmove\nA module for [TrajSuite](https://github.com/lukehb/TrajSuite). Algorithms to automatically discover stops and moves in GPS trajectories.\n\nWhite-paper describing POSMIT can be found [here](https://link.springer.com/article/10.1007/s10618-018-0568-8).\n\n## Algorithms\n* **POSMIT** - Probability of Stops and Moves in Trajectories. Uses a probabilistic approach to determine if a given entry in the trajectory is stopping or moving. Unlike traditional approaches POSMIT allows the user filter out low probability stops using the minimum stop probability parameter. Also, POSMIT comes with some heuristics to estimate its parameters.\n* **CB-SMoT** - Clustering-based Stop and Moves of Trajectories. Uses a modified DB-SCAN algorithm to find stops. \n* **SMoT** - Stops and Moves of Trajectories. Uses predefined regions to search for a minimum duration stay within those region. Unlike the original algorithm our implementation creates these regions by divided up the studying region into uniform cells. The original algorithms calls for the author to pass in interesting regions.\n\n## Usages\nBelow are some code usages for each of the algorithms provided in this repo.\n\n### POSMIT*\n```java\n//load in a trajectory to process\nSTTrajectory traj = ....\n//how many entries to search either side of each entry \nint nSearchRadius = 2;\n//how much a stop can spatially jitter around and still be considered a stop (remember GPS is quite noisy)\ndouble stopVariance = 1.5;\n//intialise the actual POSMIT algorithm\nPOSMIT algo = new POSMIT();\n//find the stop probability for each entry in the trajectory\ndouble[] stopProbabilities = algo.run(traj, nSearchRadius, stopVariance);\n//set a threshold for an entry to be classified as a stop, otherwise it is a move.\n//i.e in this case only entries with an 80% or higher probability become stops,\n//whilst lower probability entries become moves.\ndouble minStopConfidence = 0.8;\n//convert the trajectory into a trajectory with stop/move annotations at each entry\nSTStopTrajectory stopTraj = algo.toStopTrajectory(traj, stopProbabilities, minStopConfidence);\n```\n*Note: see [`FindStopsPOSMIT.java`](https://github.com/lukehb/137-stopmove/blob/master/src/main/java/onethreeseven/stopmove/experiments/FindStopsPOSMIT.java) for a full example.\n\n### CB-SMoT*\n```java\n//load in a trajectory to process\nSTTrajectory traj = ....\n//Much like DB-SCAN you must specify a spatial epsilon to control cluster growth\ndouble epsMeters = 1.5;\n//CB-SMoT introduces a concept that a cluster can only become a stop if it has a \n//total duration equal to or exceeding a user-specified minimum stop duration\nlong minTimeMillis = 3000L;\n//run the CB-SMoT algorithm\nSTStopTrajectory outTraj = new CBSMoT().run(traj, epsMeters, minTimeMillis);\n```\n*Note: see [`FindStopsCBSmot.java`](https://github.com/lukehb/137-stopmove/blob/master/src/main/java/onethreeseven/stopmove/experiments/FindStopCBSMoT.java) for a full example.\n\n## Working with the source\nThe source is licensed under the MIT licsense so feel free to use it in your projects. It does have some dependencies which are listed in the build.gradle file. The easiest use-case is setting the source up as a gradle project and letting gradle grab those dependencies for you. Next easiest is maven, though you will have translate the dependencies yourself.\n\nUsing this project as a library in your own project, your build.gradle file will have to include these:\n\n```groovy\nrepositories {\n    maven{url 'https://dl.bintray.com/lukehb/137-stopmove'} //hosted on bintray\n}\n\ndependencies {\n    compile 'onethreeseven:stopmove:0.0.4'\n}\n```\n\n....Or without cloning, the built source is also hosted on BinTray and can be downloaded: [ ![Download](https://api.bintray.com/packages/lukehb/137-stopmove/137-stopmove/images/download.svg) ](https://bintray.com/lukehb/137-stopmove/137-stopmove/_latestVersion)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukehb%2F137-stopmove","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flukehb%2F137-stopmove","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flukehb%2F137-stopmove/lists"}